<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 一種嵌入式IPv4/IPv6雙協(xié)議棧的實(shí)現

一種嵌入式IPv4/IPv6雙協(xié)議棧的實(shí)現

作者: 時(shí)間:2012-04-13 來(lái)源:網(wǎng)絡(luò ) 收藏

3.2網(wǎng)絡(luò )接口的

網(wǎng)絡(luò )接口層在設計上主要考慮下面幾個(gè)目標:⑴向層提供一個(gè)統一的網(wǎng)絡(luò )通信接口,能夠將上層模塊與具體的網(wǎng)絡(luò )接口硬件隔離開(kāi)來(lái),以利于向不同操作系統的移植;⑵支持一個(gè)網(wǎng)絡(luò )接口配置多個(gè)IP地址的功能,因為IPv6一個(gè)接口的IP地址包括本地鏈路、本地站點(diǎn)和全局三類(lèi)地址;⑶支持多播報文的收發(fā),提供動(dòng)態(tài)的多播IP與多播MAC地址的映射服務(wù);⑷提供較好的通信性能等。

針對上述目標,設計了如下的網(wǎng)絡(luò )接口控制結構:

struct netif {
struct netif *next; /*指向下一個(gè)netif結構的指針*/
netif_ipaddr *iplist; /*指向接口的ip地址鏈的首指針*/
char name[2]; /*接口名稱(chēng)*/
err_t (* input)(struct pbuf *p, struct netif *); /*接口輸入函數指針*/
err_t (* output)(struct netif *, struct pbuf *p,netif_addr *); /*接口輸出函數指針*/
err_t (* linkoutput)(struct netif *, struct pbuf *p); /*鏈路層輸出函數指針*/
void *state; /*指向接口的狀態(tài)信息*/
mac_addr netifmacaddr; /*接口的MAC地址*/
netif_multi *multilist; /*本接口的MAC多播地址鏈首指針*/
┊ /*省略了部分信息 */
};

網(wǎng)絡(luò )接口層是棧與下層網(wǎng)絡(luò )設備驅動(dòng)程序之間的接口,同時(shí)支持IPv4報文和IPv6報文,通過(guò)判斷幀的類(lèi)型字段,把接收到的不同類(lèi)型的報文交給不同的協(xié)議模塊進(jìn)行處理。

3.3 IPv6模塊

IPv6[2]模塊主要包括兩部分的功能,一是負責從網(wǎng)絡(luò )接口層接收IPv6數據包,對數據包進(jìn)行一定的處理后發(fā)送給上層處理模塊(TCP或ICMPv6)。二是從上層接收數據,進(jìn)行報文的選路,封裝IPv6報頭后將數據報發(fā)送給網(wǎng)絡(luò )接口層。

3.3.1 ICMPv6[3]的簡(jiǎn)化分析

⑴ICMPv6信息報文

設備只需作為Ping的接收端,所以不需要發(fā)送回顯請求報文和處理回顯應答報文。為了讓客戶(hù)端可以測試網(wǎng)絡(luò )狀態(tài)以及測試使用,必須支持接收請求報文和發(fā)送相應的應答報文。

⑵ICMPv6錯誤報文

由于設備不會(huì )作為路由轉發(fā)設備,所以需要發(fā)送端口不可達報文,同時(shí)要支持超時(shí)報文通告對端超時(shí)錯誤。在BSD中,IP層沒(méi)有發(fā)送參數問(wèn)題報文, ICMPv6無(wú)需支持處理參數問(wèn)題報文。

3.3.2鄰居發(fā)現協(xié)議(NDP)的簡(jiǎn)化分析

NDP[4]是IPv6協(xié)議的一個(gè)基本組成部分,它用于地址解析、鄰居發(fā)現以及路由器及網(wǎng)絡(luò )參數發(fā)現。本協(xié)議棧不支持路由功能,所以無(wú)需發(fā)送路由器通告報文,但必須接受路由器通告報文,以完成路由發(fā)現功能。同時(shí)支持鄰居通告和鄰居請求報文的接收和發(fā)送,以實(shí)現地址解析和重復探測。

3.4 TCP模塊

在TCP之上實(shí)現有限的WEB服務(wù),可以對該協(xié)議的實(shí)現機制作相應的簡(jiǎn)化及優(yōu)化。

3.4.1 TCP模塊的擴展

TCP對IPv4和IPv6報文的處理過(guò)程沒(méi)有任何的不同,但是由于IPv4和IPv6地址結構不同,需要對使用IP地址的部分進(jìn)行擴展。

⑴數據結構擴展

PCB是用來(lái)記錄每個(gè)TCP連接狀態(tài)的,包括本地IP地址和遠程IP地址,擴展時(shí)使用union結構添加IPv6地址,同時(shí)添加標識位區別連接。

⑵操作擴展

在TCP處理過(guò)程中包括輸入時(shí)對IP地址和端口號的匹配,輸出時(shí)校驗和的計算和路由的查找。由于對IPv4和IPv6報文調用相同的處理函數,需要在實(shí)現時(shí)在這幾個(gè)函數的處理過(guò)程中加入對相應PCB中標識位的判斷。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

tcp/ip相關(guān)文章:tcp/ip是什么




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>