日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 物聯(lián)網(wǎng) > 網(wǎng)絡協(xié)議
[導讀]   1、LWIP的結構   lwip是瑞典計算機科學院(SICS)的Adam Dunkels 開發(fā)的一個小型開源的TCP/IP協(xié)議棧。實現(xiàn)的重點是在保持TCP協(xié)議主要功能的基礎上減少對R

  1、LWIP的結構

  lwip是瑞典計算機科學院(SICS)的Adam Dunkels 開發(fā)的一個小型開源的TCP/IP協(xié)議棧。實現(xiàn)的重點是在保持TCP協(xié)議主要功能的基礎上減少對RAM 的占用。

  LWIP(Light weight internet protocol)的主要模塊包括:配置模塊、初始化模塊、NeTIf模塊、mem(memp)模塊、netarp模塊、ip模塊、udp模塊、icmp 模塊、igmp模塊、dhcp模塊、tcp模塊、snmp模塊等。下面主要對我們需要關心的協(xié)議處理進行說明和梳理。

  配置模塊:

  配置模塊通過各種宏定義的方式對系統(tǒng)、子模塊進行了配置。比如,通過宏,配置了mem管理模塊的參數(shù)。該配置模塊還通過宏,配置了協(xié)議棧所支持的協(xié)議簇,通過宏定制的方式,決定了支持那些協(xié)議。主要的文件是opt.h。

  初始化模塊:

  初始化模塊入口的文件為tcpip.c,其初始化入口函數(shù)為: void tcpip_init(void (* initfunc)(void *), void *arg)

  該入口通過調用lwip_init()函數(shù),初始化了所有的子模塊,并啟動了協(xié)議棧管理進程。同時,該函數(shù)還帶有回調鉤子及其參數(shù)??梢栽谛枰牡胤竭M行調用。

  協(xié)議棧數(shù)據(jù)分發(fā)管理進程負責了輸入報文的處理、超時處理、API函數(shù)以及回調的處理,原型如下:

  staTIc void tcpip_thread(void *arg)

  NeTIf模塊:

  NeTIf模塊為協(xié)議棧與底層驅動的接口模塊,其將底層的一個網(wǎng)口設備描述成協(xié)議棧的一個接口設備(net interface)。該模塊的主要文件為netif.c。其通過鏈表的方式描述了系統(tǒng)中的所有網(wǎng)口設備。

  Netif的數(shù)據(jù)結構描述了網(wǎng)口的參數(shù),包括IP地址、MAC地址、link狀態(tài)、網(wǎng)口號、收發(fā)函數(shù)等等參數(shù)。一個網(wǎng)口設備的數(shù)據(jù)收發(fā)主要通過該結構進行。

  Mem(memp)模塊:

  Mem模塊同一管理了協(xié)議棧使用的內容緩沖區(qū),并管理pbuf結構以及報文的字段處理。主要的文件包括mem.c、memp.c、pbuf.c。

  netarp模塊:

  netarp模塊是處理arp協(xié)議的模塊,主要源文件為etharp.c。其主要入口函數(shù)為: err_t ethernet_input(struct pbuf *p, struct netif *netif)

  該入口函數(shù)通過判斷輸入報文p的協(xié)議類型來決定是按照arp協(xié)議進行處理還是將該報文提交到IP協(xié)議。如果報文是arp報文,該接口則調用etharp_arp_input,進行arp請求處理。

  如果是ip報文,該接口就調用etharp_ip_input進行arp更新,并調用ip_input接口,將報文提交給ip層。

  在該模塊中,創(chuàng)建了設備的地址映射arp表,并提供地址映射關系查詢接口。同時還提供了arp報文的發(fā)送接口。如下

  err_t etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr)

  該接口需要注冊到netif的output字段,ip層在輸出報文時,通過該接口獲取目標機的MAC地址,組合最終報文后,由該接口調用底層設備的驅動接口發(fā)送數(shù)據(jù)。

  在etharp_output接口中,判斷報文類型,如果是廣播包或者組播包,就調用etharp_send_ip(組裝目標mac和源mac)接口,etharp_send_ip調用netif結構中的設備驅動注冊的linkoutput鉤子函數(shù)發(fā)送最終報文。如果是單播包,etharp_output接口就調用etharp_query進行ip地址和MAC地址的映射,來獲取到目標機的MAC地址。并在etharp_query中調用etharp_send_ip來發(fā)送最終組合報文。

  ip模塊:

  ip模塊實現(xiàn)了協(xié)議的ip層處理,主要文件為ip.c。其主要入口函數(shù)為: err_t ip_input(struct pbuf *p, struct netif *inp)

  該接口通過判斷輸入報文的協(xié)議類型,將其輸入到相應的上層協(xié)議模塊中去。比如,將udp報文送到udp_input。

  該模塊另外一個接口是輸入函數(shù),原型如下:

  err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, u8_t ttl, u8_t

  tos, u8_t proto)

  該接口通過路由表或者傳輸ip后,調用netif的output字段函數(shù)鉤子發(fā)送報文。

  udp模塊:

  udp模塊實現(xiàn)了udp協(xié)議層的協(xié)議處理,主要文件為udp.c。該模塊通過PCB控制塊將應用端口跟應用程序做了綁定。在接收到新報文時,分析其對應的PCB,找到對應的處理鉤子,進行應用的處理。主要入口函數(shù)為:

  void udp_input(struct pbuf *p, struct netif *inp) 該模塊負責輸出的接口如下:

  err_t udp_send(struct udp_pcb *pcb, struct pbuf *p)

  該模塊負責將一個PCB跟一個本地端口進行綁定的接口如下:

  err_t udp_bind(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) 該模塊負責將一個PCB跟一個遠端端口綁定的接口如下:

  err_t udp_connect(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port)

  igmp模塊:

  igmp模塊負責分組管理。其主要的接口函數(shù)如下:

  void igmp_input(struct pbuf *p, struct netif *inp, struct ip_addr *dest) 該接口負責IGMP協(xié)議報文的處理,比如分析當前報文是請求還是應答。 err_t igmp_joingroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr) 該接口將一個網(wǎng)口加入一個組。

  err_t igmp_leavegroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr) 該接口將一個網(wǎng)口從一個組中移出。

  dhcp模塊:

  dhcp模塊用于獲取設備ip地址的相關信息。其處理入口主要有這么幾個:dpch的啟動、dpch的接收報文處理以及定時器模塊的處理。

  主要的接口原型如下:

  err_t dhcp_start(struct netif *netif)

  該接口用于設備啟動dhcp模塊,主要是客戶端的功能。該模塊實現(xiàn)設備dhcp描述結構生成,并將dhcp的端口綁定到udp協(xié)議中,以及將本dhcp模塊跟遠端服務器端口進行綁定。最后啟動dhcp申請。

  static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port)

  該接口為一個注冊接口,用于dhcp報文接收。在start dhcp時,該接口通過dhcp的udp pcb注冊到udp協(xié)議層。Udp進行報文處理后,根據(jù)端口調用該注冊接口。該接口中,實現(xiàn)dhcp報文的協(xié)議處理。

  Void dhcp_fine_tmr() Void dhcp_coarse_tmr()

  這兩個函數(shù)接口實現(xiàn)了dhcp的相關超時處理監(jiān)控。上面一個用于請求應答超時處理。下面一個用于地址租用情況的到期處理。

  從源碼分析看,上述的接口在應用lwip的協(xié)議棧時,需要重點關注。對于小內存應用的場合,該協(xié)議棧的內存管理以及pbuf應用部分需要自行改寫。

  2、lwip特征

 ?。?)支持多網(wǎng)絡接口下的IP轉發(fā);

 ?。?)支持ICMP協(xié)議;

 ?。?)包括實驗性擴展的UDP(用戶數(shù)據(jù)報協(xié)議);

 ?。?)包括阻塞控制、RTT 估算、快速恢復和快速轉發(fā)的TCP(傳輸控制協(xié)議);

 ?。?)提供專門的內部回調接口(Raw API),用于提高應用程序性能;

  (6)可選擇的Berkeley接口API (在多線程情況下使用) 。

  (7)在最新的版本中支持ppp

 ?。?) 新版本中增加了的IP fragment的支持。

 ?。?) 支持DHCP協(xié)議,動態(tài)分配ip地址.

  3、LWIP的協(xié)議流程

  下面這張圖比較清楚的描述了lwip的報文處理流程,呵呵,借用一下。不過,其對netif-》output描述不夠。從代碼看,該output實際是arp層的輸出,最后通過arp層調用netif中的底層輸出接口發(fā)送報文。


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉