lwip可以用於發udp LWIP UDP

2021-10-12 23:53:42 字數 2121 閱讀 9451

lwip是乙個輕量級的tcp/ip協議棧(lightweight tcp/ip

stack)實現,最初是瑞士電腦科學學院adam

dunkels編寫的乙個應用於無作業系統的嵌入式系統中的tcp/ip協議棧,後來作為乙個開源(open

source)專案,由乙個全球性的團隊進行開發和維護。

已實現的部分有:

1. 標準的tcp/ip協議棧實現,包括tcp、udp、icmp、ip、arp、dhcp;

icmp(internet control message protocol):網路維護和除錯。

udp(user datagram protocol)

dhcp(dynamic host configuration protocol)

arp(address resolution protocol)

2.非標準socket介面,lwip提供了一套socket api,這套api的標準與正常作業系統下的socket

api的形式不是很一致,我們先前已經在這套api上實現了web server,已測試在沒有mobile ip環境下工作正常。

下面我們就乙個lwip典型的udp協議工作過程作為對lwip的簡單介紹。

udp傳送過程:

1.應用層:繫結udp套接字

我們必須先建立乙個udp套接字,通過呼叫udp_new()進行申請,然後呼叫udp_bind()繫結在

udp埠上,在這個呼叫過程中,我們必須編寫乙個用於處理這個udp套接字接收到的資料報文的函式,並把這個函式作為udp_bind()的引數,以後

當套接字接收到資料報文時會自動呼叫這個函式,我們將在後面介紹這個函式怎麼呼叫的。繫結結束之後,必須呼叫udp_connect()將資料報文的目的

位址繫結在udp的資料結構中,最後就是呼叫udp_send()把資料報文傳送出去。

udp_bind()的處理流程圖

2.傳輸層的處理

做好應用層的處理之後,資料報文被提交到udp層,udp_send()函式中首先給資料報文加入udp頭部,然後呼叫ip_route()選擇乙個合適的網路介面進行傳送,最後呼叫ip_output()把資料報文傳入ip層。

3.ip層的處理

ip_route()函式比較各個網路介面的ip位址是否與目的ip位址在同一子網中,如果有,就把它當成傳送的網路介面返回,如果沒有就返回乙個預設的網路介面。

在ip_output()函式中,先給資料報文加上ip頭部,然後比較目的ip位址與網路介面的ip位址是否在同一網段,如果不是,就必須先把資料報文傳送

到閘道器,於是使用閘道器的ip位址作為目的主機,如果目的ip位址與網路介面的ip位址在同一網段,則把目的ip位址作為目的主機。接著呼叫

arp_lookup()在arp快取中查詢目的主機的mac位址,找到了呼叫ethernet_output()把資料報文傳入到資料鏈路層傳送,如果

找不到,就呼叫arp_query()傳送arp請求解析目的主機的mac位址。

4.arp協議的處理

arp_lookup()實現在本地arp快取中查詢目的主機的mac位址,找到了返回該mac位址,找不到返回null。

arp_query()函式中構造乙個arp請求報文,然後呼叫ethernet_output()把該報文送到資料鏈路層傳送。

5. 資料鏈路層的處理

資料鏈路層的處理就是給資料報文添上相對的乙太網頭部,然後呼叫lowlever_output()直接把報文傳送出去。

udp接收過程:

接收過程與傳送過程剛好相反,資料報文首先呼叫ethernet_input()函式到達資料鏈路層,去掉乙太網頭部之後如果是arp報文傳給呼叫

arp_input()交給arp協議處理,如果是ip報文就呼叫ip_input()進入ip層處理,ip_input()函式中比較資料報文的目的

ip位址,如果與某個網路介面的ip位址相同,則接收這個報文,依照ip頭部的協議字段,呼叫各自協議的輸入處理函式,本例中將呼叫

udp_input(),在udp_input()中提取資料報文的埠號,然後在已登記的套接字中查詢與該埠號符合的udp接收函式,如果沒有找到相

應的套接字,呼叫icmp_output()傳送乙個icmp不可達報文,如果找到了,就呼叫該函式(這個函式就是我們在udp_bind()時傳入的其

中乙個引數)。

udp_input處理流程圖:

網域名稱可以用多久 織髮髮套可以用多久?

織髮髮套屬於純手工鉤織的假髮,純手工鉤織的假髮正常的壽命是三到五年,新的時候狀態較好,髮型比較真實自然,舊了以後髮型較呆板,真實度稍差一些。也跟平時佩戴習慣 保養習慣有關。經常風吹日曬可能會縮短使用壽命,經常辦公室工作佩戴 加上洗護正確方式可以適當延長使用壽命,因人而異!織髮髮套使用壽命還是比較長久...

gdb可以用於分析core檔案

gdb可以用於分析 core 檔案。產生core的原因一般是 1.記憶體訪問越界,錯誤的陣列下標,字串越界,2。多執行緒下使用執行緒不安全的函式 3.多執行緒共享資料不加鎖保護。4.非法指標。5堆疊溢位。特別是不能使用過大的區域性變數,容易早成棧溢位。root ubuntu ulimit c 0 可...

RatingBar 可以用於客戶打星評分的控制項

什麼是ratingbar呢?其實就是類似於一種進度條,它顯示出 星星 來代替以前的一條行框的進度條 可以用於客戶評分,當客戶勾選時可以顯示 在activity中定義乙個onratingbarchangelistener,當然,在布局檔案中要寫好基礎的 android numstarts 5 這裡是要...