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 巨集宣告。先看...