新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > IPv4/IPv6雙協議棧實現方案解析

        IPv4/IPv6雙協議棧實現方案解析

        作者: 時間:2012-05-09 來源:網絡 收藏

        1引言

        本文引用地址:http://www.104case.com/article/190394.htm

        隨著嵌入式系統與網絡的日益結合,在嵌入式系統中引入TCP/IP,以支持嵌入式設備接入網絡,成為嵌入式領域重要的研究方向。并且隨著 Internet技術的迅猛發展和規模的不斷擴大,現行的Internet協議4在地址空間、端到端的IP連接、服務質量和網絡安全等方面暴露出了不足,極大地限制了IP網絡的進一步發展。而6所提供的巨大地址空間和網絡安全等因素已經使其成為下一代因特網IP協議,為了能夠支持6的應用,并且考慮到從IPv4到IPv6仍然需要一個過渡期,本文實現了一種基于實時操作系統的IPv4/IPv6雙結構。

        2的設計要點

        2.1平臺無關性

        本文所設計的TCP/IP雙協議棧,要求不能局限于特定的硬件環境和軟件系統。因此,本協議棧的實現采用將所有的TCP/IP協議都駐留在一個進程當中,協議棧模塊與操作系統內核分開。通過定義一個操作系統模擬層實現平臺無關性。操作系統模擬層屏蔽硬件上的差異和獲取操作系統提供統一的接口,如時鐘、過程同步以及信息傳遞機制等。對于特定的嵌入式操作系統,直接對操作系統模擬層相應部分進行修改,以符合具體的要求。操作系統模擬層主要包括下面兩個部分:

        ⑴與處理器和編譯器有關

        對不同微處理器的BYTE_ORDER存儲系統定義;對不同編譯器的數據類型長度的定義;與CPU或編譯器相關的內容的定義。

        ⑵與操作系統相關

        協議棧進程與應用程序進程之間的同步與通訊,需要對信號量sys_sem_t、消息隊列sys_mbox_t和時鐘函數進行定義和操作。

        2.2協議棧的裁減

        標準的TCP/IP協議棧功能復雜,代碼量大,且需大量的存儲器資源。為了滿足嵌入式應用,必須對RFC定義的協議棧進行裁減[1]。本協議棧的實現作了如下裁減:

        ⑴IP模塊:不支持數據分片,不支持數據包轉發,不支持IPv6移動功能,不支持部分IPv6的擴展報頭。

        ⑵ICMPv6模塊:支持信息報文中的請求和應答報文,支持錯誤報文中的目的不可達和超時報文。

        ⑶鄰居發現模塊:支持地址解析、重復性探測,省略了路由功能。

        ⑷TCP模塊:支持多個連接,簡化滑動窗口,實現快速重傳、慢啟動與擁塞避免算法的TCP可靠性機制;約減掉半關閉,緊急指針,大部分TCP選項等。

        協議棧的層次結構如圖1所示。采用獨立于網絡層的方式,IPv4協議和IPv6協議分開實現,條理清楚,易于裁減,同時不會增加太多代碼空間。

        上層應用(HTTP)

        TCP

        ICMPv4ICMPv6

        ARPIPv4IPv6

        網絡驅動

        3協議棧的實現

        3.1內存管理

        內存管理主要是針對協議棧內部緩沖區的管理。為了勝任任意大小報文的處理,并且能夠達到比較高的處理效率,在這里定義了兩種緩沖區實現機制:固定長度緩沖區(pbuf_pool)和變長度緩沖區(pbuf_ram)。pbuf_pool主要適合于網絡設備驅動,存放從網卡接收的數據。 pbuf_ram根據數據的大小動態的分配緩沖區,如協議的報頭空間。

        在這里對存儲空間的申請做了一定改進。由于發送數據時很難確定各層協議頭部需要多大的內存空間,特別是IPv6報文可以包含若干個擴展頭,所以只申請基本頭部的內存空間,在使用中動態調整的可能性就會很大,使得系統的效率降低。在這里提出了一種優化方法,根據局部性原理,通常情況下一個連接在局部時間范圍內需要網絡層提供相同功能的概率非常大,所以在該連接的TCP_PCB控制塊中增加一個變量num,用于記錄上次通信時IPv6協議頭所使用的字節數,并且此變量可以被網絡層的函數進行修改。當傳輸層下次申請pbuf時,就參考這個值。如果所需的存儲空間比此值大,就需重新申請能滿足要求的存儲空間,同時修改num的值,并作為下一次申請的參考。

        3.2網絡接口的實現

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

        針對上述目標,設計了如下的網絡接口控制結構:

        struct netif {

        struct netif *next; /*指向下一個netif結構的指針*/

        netif_ipaddr *iplist; /*指向接口的ip地址鏈的首指針*/

        char name[2]; /*接口名稱*/

        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; /*指向接口的狀態信息*/

        mac_addr netifmacaddr; /*接口的MAC地址*/

        netif_multi *multilist; /*本接口的MAC多播地址鏈首指針*/

        ┊ /*省略了部分信息 */

        };

        網絡接口層是協議棧與下層網絡設備驅動程序之間的接口,同時支持IPv4報文和IPv6報文,通過判斷幀的類型字段,把接收到的不同類型的報文交給不同的協議模塊進行處理。



        上一頁 1 2 3 4 下一頁

        關鍵詞: IPv 協議棧 實現方案

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 资溪县| 宝清县| 栾城县| 车致| 德庆县| 贵南县| 亚东县| 高台县| 芒康县| 宁武县| 潞西市| 三河市| 五峰| 信宜市| 辽阳县| 曲麻莱县| 满城县| 文昌市| 红桥区| 镇康县| 苏尼特右旗| 芜湖县| 荃湾区| 杭州市| 安丘市| 弥渡县| 焉耆| 巴彦县| 慈利县| 静宁县| 临潭县| 昌江| 邯郸县| 宝山区| 阜新市| 大名县| 保山市| 大英县| 岢岚县| 嘉祥县| 河西区|