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

當前位置:首頁 > > wenzi嵌入式軟件
[導讀]LwIP是TCP/IP協(xié)議中一種獨立、簡單的實現(xiàn),其設計目的在于保證嵌入式產(chǎn)品擁有完整TCP/IP功能的同時,又能夠保證協(xié)議棧對處理器資源的有效消耗,其運行一般僅需要幾十KB的RAM和40KB左右的ROM。

前言

之前在做一個關(guān)于數(shù)據(jù)傳輸?shù)臅r候,使用到了 WiFi 傳輸數(shù)據(jù),而在傳輸數(shù)據(jù)時使用到的協(xié)議就是 LwIP 協(xié)議棧中的 udp 協(xié)議?,F(xiàn)在來回顧總結(jié)一下。要敘述 LwIP 協(xié)議棧,那自然得明白 LwIP 協(xié)議棧具體是個啥。總的來說,LwIP 是 TCP/IP 協(xié)議中一種獨立、簡單的實現(xiàn),其設計目的在于保證嵌入式產(chǎn)品擁有完整 TCP/IP 功能的同時,又能夠保證協(xié)議棧對處理器資源的有效消耗,其運行一般僅需要幾十 KB 的 RAM 和 40KB 左右的 ROM。上述所說便是關(guān)于 LwIP 協(xié)議棧的相關(guān)敘述。

LwIP 的分層機制

在敘述 udp 協(xié)議概念之前,先對 LwIP 協(xié)議的框架有一個簡單的了解,LwIP 在實現(xiàn)的時候,參考了 TCP/IP 協(xié)議的分層思想,每一層都在一個單獨的模塊中實現(xiàn),并為其他層次模塊提供一些輸入/輸出接口函數(shù)。下面是分層結(jié)構(gòu)示意圖:

image-20201219165628915

如同前面所說,LwIP 協(xié)議只是參考了 TCP/IP 的分層結(jié)構(gòu),但是它并沒有嚴格地遵循上述所示地分層機制,其為了節(jié)省時間和空間上地消耗,各個層次之間存在著交叉存取地現(xiàn)象。

我們通過上述地框圖可以知道 UDP 屬于傳輸層協(xié)議。要明白為什么有傳輸層協(xié)議,我們需要明白在傳輸層的下一層,也就是網(wǎng)絡互連層,有 IP 協(xié)議,IP 協(xié)議是用于數(shù)據(jù)報在各個主機中傳遞的,但是我們在實際的應用過程中,我們所需要的是數(shù)據(jù)報在各個應用之間傳遞,說白了也就是在進程與進程之間通信,而傳輸層的存在就是為了實現(xiàn)數(shù)據(jù)報在進程與進程之間通信的。

而要完成進程到進程之間的通信,傳輸層需要完成幾個重要的任務:

  • 第一:為兩個通信的進程提供連接機制,也就是說傳輸層在接收了 IP 層傳輸過來的數(shù)據(jù)之后,應該將這個數(shù)據(jù)傳到哪一個應用程序中。在這里是通過端口號來完成的。

  • 第二:傳輸層需要提供數(shù)據(jù)傳送服務。在數(shù)據(jù)發(fā)送端,傳輸層將數(shù)據(jù)進行組裝、編號,將數(shù)據(jù)分割成可運輸?shù)膯卧?,然后依次遞交給 IP 層發(fā)送出去。而接收端的傳輸層需要等屬于同一應用程序的數(shù)據(jù)都到達之后,對他們進行差錯校驗、最后將整個數(shù)據(jù)交付給應用程序。

  • 第三:為了提供更為可靠的傳輸服務,傳輸層還應該提供流量控制機制。

UDP 協(xié)議

在簡單地敘述了關(guān)于 LwIP 的框架之后,接下來詳細闡述 UDP 地相關(guān)概念。UDP 稱之為用戶數(shù)據(jù)報協(xié)議,是一種無連接地、不可靠地傳輸協(xié)議,它只在低級程度上實現(xiàn)了上述地傳輸層功能,為什么說只在低級程度上實現(xiàn)了上述功能呢?因為它只是簡單地完成數(shù)據(jù)從一個進程到另一個進程地交付,它沒有提供任何流量控制機制,收到地報文也沒有確認,差錯控制上,只提供了檢驗和計算,當校驗和計算不成功時,它將丟棄掉這個報文。

當用戶的進程使用 UDP 來傳送數(shù)據(jù)的時候,會經(jīng)歷三個過程

  • (1)UDP 協(xié)議會在數(shù)據(jù)前加上首部組成 UDP 報文,并交給 IP 協(xié)議來發(fā)送

  • (2)IP 層將報文封裝在 IP 數(shù)據(jù)報中并交給底層發(fā)送

  • (3)底層,IP 數(shù)據(jù)報被封裝在物理數(shù)據(jù)幀中

UDP 數(shù)據(jù)的封裝

在 UDP 的接收端,物理網(wǎng)絡先接收到數(shù)據(jù)幀,然后逐層將數(shù)據(jù)遞交給上層協(xié)議,每一層都在向上一層去除掉一個首部。

## UDP 報文格式

UDP 報文成為用戶數(shù)據(jù)報,從結(jié)構(gòu)上可以分為兩部分:UDP 首部和 UDP 數(shù)據(jù)區(qū),下面是報文結(jié)構(gòu)示意圖:

image-20201219205656710

UDP 校驗和的計算超過了 UDP 報文本身,為了計算校驗和,UDP 引入了偽首部的概念,加入了偽首部之后的 UDP 報文格式如下圖所示:

image-20201219210404321

這里需要指出的一點是,偽首部完全是虛擬的,它并不會和用戶數(shù)據(jù)報一起被發(fā)送出去,只是在校驗和的計算過程中會被使用到,偽首部主要來自于運載 UDP 報文的 IP 數(shù)據(jù)報首部,將源 IP 地址和目的 IP 地址加入到校驗和的計算中可以驗證用戶數(shù)據(jù)報是否已經(jīng)到達正確的終點。

UDP 數(shù)據(jù)結(jié)構(gòu)體解析

報文首部結(jié)構(gòu)

先來看下 UDP 數(shù)據(jù)報首部,代碼如下:

#define?UDP_HLEN?8

PACK_STRUCT_BEGIN
struct?udp_hdr?{
??PACK_STRUCT_FIELD(u16_t?src);
??PACK_STRUCT_FIELD(u16_t?dest);??/*?src/dest?UDP?ports?*/
??PACK_STRUCT_FIELD(u16_t?len);
??PACK_STRUCT_FIELD(u16_t?chksum);
}?PACK_STRUCT_STRUCT;
PACK_STRUCT_END

這個結(jié)構(gòu)體很簡潔,使用結(jié)構(gòu)體封裝宏定義的每個字段,還應該注意的是四個字段保存的值應該與網(wǎng)絡字段保持一致。

udp 控制塊

控制塊是整個 UDP 中最為核心的東西,用戶使用 UDP 進行編程,以及對于 UDP 報文的處理,本質(zhì)上都是對 UDP 控制塊進行操作。一個 UDP 的控制塊包含 UDP 連接時需要的所有信息,主要包括:

  • 端口號

  • 目的端口號

  • 源 IP 地址

  • 目的 IP 地址

總體來說,系統(tǒng)會為每一個連接分配一個 UDP 控制塊,然后將他們組織在一個全局的鏈表上,當 UDP 收到 IP 層遞交的報文的時候,就會去遍歷這個鏈表,找出與報文中首部信息匹配的控制塊,并調(diào)用控制塊中注冊的函數(shù)最終完成報文的處理。

在定義 UDP 控制塊的時候,會使用到 IP的控制塊

#define?IP_PCB?struct?ip_addr?local_ip;?\
??struct?ip_addr?remote_ip;?\
???/*?Socket?options?*/??\
??u16_t?so_options;??????\
???/*?Type?Of?Service?*/?\
??u8_t?tos;??????????????\
??/*?Time?To?Live?*/?????\
??u8_t?ttl;??????????????\

如上述所示,IP 控制塊的定義是通過一個宏來實現(xiàn)的,它包含了本地 IP 地址、遠端 IP 地址、socket 選項、服務類型、生存時間這幾個字段。有了 UP 控制塊之后,我們再來看 UDP 控制塊,下面是 UDP 控制塊的代碼:

//?定義回調(diào)函數(shù)的類型
typedef?void?(*udp_recv_fn)(void?*arg,?struct?udp_pcb?*pcb,?struct?pbuf?*p,
????ip_addr_t?*addr,?u16_t?port)
;

//?定義?UDP?控制塊結(jié)構(gòu)體
struct?udp_pcb?{
/*?Common?members?of?all?PCB?types?*/
??IP_PCB;

/*?Protocol?specific?PCB?members?*/

??struct?udp_pcb?*next;

??u8_t?flags;
??/**?ports?are?in?host?byte?order?*/
??u16_t?local_port,?remote_port;

#if?LWIP_IGMP
??/**?outgoing?network?interface?for?multicast?packets?*/
??ip_addr_t?multicast_ip;
#endif?/*?LWIP_IGMP?*/

#if?LWIP_UDPLITE
??/**?used?for?UDP_LITE?only?*/
??u16_t?chksum_len_rx,?chksum_len_tx;
#endif?/*?LWIP_UDPLITE?*/

??/**?receive?callback?function?*/
??udp_recv_fn?recv;
??/**?user-supplied?argument?for?the?recv?callback?*/
??void?*recv_arg;??
}

UDP 協(xié)議實現(xiàn)的本質(zhì)就是對鏈表上各個 UDP 控制塊進行操作,再上述所示的結(jié)構(gòu)體中,next 是一個 UDP 控制塊類型的指針,他就是用來構(gòu)成鏈表的。最后,需要注意的一點是,上述控制塊中的最后兩個字段的是用于用戶和協(xié)議棧內(nèi)核通信的紐帶,反應再 udp 協(xié)議里,就是用來執(zhí)行用戶自定義的報文數(shù)據(jù)處理函數(shù)的。下面是三個控制塊構(gòu)成的一個鏈表的一個示意圖:

image-20201220141759180

通過上述示意圖我們可有看到第一個控制塊和第二個控制塊中,包含了本地和遠程的 IP 地址和端口,所以他們處于連接狀態(tài)。第三個控制塊中,只包含了本地IP地址和端口,所以它處于未連接的狀態(tài)。UDP 的的工作流程是什么呢?簡單來說就是如果當前 UDP 控制塊收到一個目的端口為 1234的數(shù)據(jù)報,那么內(nèi)核就會從鏈表的起始處開始遍歷整個鏈表,直到查出具有本地端口號 1234 的控制塊。當找到控制塊之后,控制塊的 recv 字段指向的函數(shù) proc1 會被調(diào)用以處理報文數(shù)據(jù)。

總結(jié)

上述就是關(guān)于 LwIP 中 udp 的一個解析,只是簡單地說明了 UDP 地一個基本原理,它所涉及地控制塊以及當 UDP 接收到數(shù)據(jù)報地時候,又是一個怎樣地處理過程。當然,除了這些,關(guān)于 UDP 還有很多地內(nèi)容,如何使用 UDP 發(fā)送數(shù)據(jù)和接收數(shù)據(jù)都沒涉及到,關(guān)于 LwIP 內(nèi)核地內(nèi)容也還需要繼續(xù)仔細研讀。


免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

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

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

關(guān)鍵字: 驅(qū)動電源

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

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

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

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

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

關(guān)鍵字: LED 設計 驅(qū)動電源

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

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

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

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

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

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

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

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

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

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

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

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉