UIP協議棧筆記 一

2021-08-21 21:28:04 字數 1451 閱讀 7524

uip協議多用於嵌入式產品。

結合如cp2200晶元的網絡卡晶元,組成嵌入式網絡卡,硬體提供能力,uip提供的是策略。

由上往下逐步封裝使用者的資料,如:

應用層----------傳輸層--------網路層------資料鏈路層-----物理層

應用資料---tcp封裝頭部---ip封裝頭部-----mac封裝+尾部-----傳送 

任何的事物需要經過一定的初始階段,在uip協議裡面通過uip_init()來初始化。

在uip_init()函式裡面主要工作是:

1. 將uip_state結構體全部清零。

2. 初始化用於tcp鏈結的uip_conn結構體,將連線狀態置為close。

3. 設定用於tcp鏈結的埠lastport = 4096;應該是最大的埠號,待查證。

4. 如果定義了udp,同樣進行初始化。

void uip_init(void) 

for (c = 0; c < uip_listenports; ++c) 

for (c = 0; c < uip_conns; ++c) 

lastport = 4096;

#if uip_udp

for (c = 0; c < uip_udp_conns; ++c) 

#endif /* uip_udp */

/* ipv4 initialization. */

#if uip_fixedaddr == 0

/* uip_hostaddr[0] = uip_hostaddr[1] = 0;*/

#endif /* uip_fixedaddr */

}struct timer periodic_timer, arp_timer;

timer_set(&periodic_timer, clock_second / 2);

timer_set(&arp_timer, clock_second * 10);

還要進行的配置是,比如配置主機位址,ip位址,還有掩碼,乙太網mac位址等資訊,或者配置dhcp。

這些配置完成之後,進入協議的主迴圈,接受,和傳送等等的過程了。

要應用到實際的使用中,還需要結合硬體,比如cp2200晶元,使用過程中,需要有接收,和傳送函

數,這個需要自己實現,迴圈的流程如下:

while(1)

} else if(buf->type == htons(uip_ethtype_arp))}} 

else if(timer_expired(&periodic_timer))

}#if uip_udp

for(i = 0; i < uip_udp_conns; i++)

}#endif /* uip_udp */

/* call the arp timer function every 10 seconds. */

if(timer_expired(&arp_timer))}}

uIP協議棧學習(一)

uip 源 可以從 uip的原始碼目錄結構 目錄是一些應用層的協議和例項,doc目錄是文件,lib目錄下有記憶體塊管理函式,uip下 uip協議棧的源 unix 下是unix 環境裡的 uip應用例子。研究unix 下的 可以知道 uip是如何使用的,關鍵是理解 uip協議棧的主控制迴圈。int m...

uIP協議棧分析

uip特性 由於uip協議棧專門為嵌進式系統而設計,因此還具有如下優越功能 1 非常少,其協議棧 不到6k,很方便閱讀和移植。2 占用的記憶體數非常少,ram占用僅幾百位元組。3 其硬體處理層 協議棧層和應用層共用乙個全域性快取區,不存在資料的拷貝,且傳送和接收都是依靠這個快取區,極大的節省空間和時...

uip協議棧學習(二)

uip的記憶體管理方法 記憶體管理的實現在memb.c memb.h裡。這兩個檔案負責 uip的記憶體塊的管理,記憶體塊是由 memb 巨集宣告。記憶體從宣告的記憶體塊裡用 memb alloc 分配,用 memb free 釋放。因為命名空間的衝突,每個 c模組只能有乙個 memb 巨集宣告。先看...