本發(fā)明涉及于網(wǎng)絡(luò)技術(shù)領(lǐng)域,具體涉及一種網(wǎng)絡(luò)雙協(xié)議棧并行處理模型及其處理方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)應(yīng)用的普及和信息共享程度的提高,嵌入式設(shè)備與國際互聯(lián)網(wǎng)連接,也就是嵌入式網(wǎng)絡(luò)技術(shù)已經(jīng)成為一種趨勢(shì)。嵌入式網(wǎng)絡(luò)技術(shù)主要是指怎樣把嵌入式系統(tǒng)接入國際互聯(lián)網(wǎng),但是目前,嵌入式系統(tǒng)還沒有一個(gè)確切統(tǒng)一的定義。廣義地說,任何內(nèi)含中央處理器的專用系統(tǒng)都可以稱之為嵌入式系統(tǒng)。嵌入式系統(tǒng)另一種較為通用定義是:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟硬件可裁剪、適應(yīng)于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。嵌入式網(wǎng)絡(luò)技術(shù)是指為了使嵌入式系統(tǒng)實(shí)現(xiàn)接入互聯(lián)網(wǎng)功能,把tcp/ip協(xié)議按照實(shí)際需求經(jīng)過簡化后,作為一種嵌入式應(yīng)用,從而,這種技術(shù)也可以簡單地理解為一種采用嵌入式模塊而非pc系統(tǒng)直接接入互聯(lián)網(wǎng)的技術(shù)。
實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議是嵌入式系統(tǒng)網(wǎng)絡(luò)功能的首要問題。嵌入式設(shè)備受硬件資源的限制,一般只支持簡單的通信協(xié)議(如rs-232/485等),這些簡單的通信協(xié)議不足以讓這些嵌入式設(shè)備連入互聯(lián)網(wǎng),因此要讓嵌入式設(shè)備連入互聯(lián)網(wǎng),就必須讓它支持tcp/ip協(xié)議棧,最終通過互聯(lián)網(wǎng)來實(shí)現(xiàn)遠(yuǎn)程控制、遠(yuǎn)程數(shù)據(jù)采集等應(yīng)用。而隨著互聯(lián)網(wǎng)的發(fā)展,ipv6協(xié)議的出現(xiàn),嵌入式網(wǎng)絡(luò)技術(shù)支持ipv6協(xié)議已經(jīng)成為研究的重點(diǎn)。
一般嵌入式系統(tǒng)硬件資源無法容納體系結(jié)構(gòu)復(fù)雜的協(xié)議棧,而且標(biāo)準(zhǔn)的基于ipv4,ipv6的tcp/ip協(xié)議棧都是面對(duì)pc或者服務(wù)器的實(shí)現(xiàn),具有復(fù)雜的功能,而這些功能對(duì)于簡單的,實(shí)現(xiàn)某種特定功能的嵌入式應(yīng)用是不必要的,并且給有限的系統(tǒng)資源帶來較高的負(fù)擔(dān)。因而,設(shè)計(jì)并實(shí)現(xiàn)支持ipv4和ipv6兩種協(xié)議的tcp/ip雙協(xié)議棧時(shí),必須遵照協(xié)議標(biāo)準(zhǔn)文件,即ietf(intemetengineeringtaskforce互聯(lián)網(wǎng)工程任務(wù)組)的rfc(requestforcomments)文檔,從以下兩個(gè)方面裁剪嵌入式系統(tǒng):
①功能性裁剪:裁剪掉對(duì)tcp/ip雙協(xié)議棧功能實(shí)現(xiàn)關(guān)系不大,而又不影響系統(tǒng)最終功能的協(xié)議實(shí)現(xiàn);
②性能性裁剪:由于嵌入式系統(tǒng)一般都是針對(duì)某個(gè)特定的系統(tǒng)而實(shí)現(xiàn)的,因此根據(jù)應(yīng)用目的要求可以對(duì)某些復(fù)雜的情況進(jìn)行簡化處理。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的:本發(fā)明的目的在于針對(duì)現(xiàn)有技術(shù)的問題,提供了一種網(wǎng)絡(luò)雙協(xié)議棧并行處理模型及其處理方法。
技術(shù)方案:本發(fā)明提供了一種網(wǎng)絡(luò)雙協(xié)議棧并行處理模型,包括tcp/udp協(xié)議層、網(wǎng)絡(luò)接口協(xié)議層、ipv4、ipv6協(xié)議層、icmpv4/icmpv6協(xié)議層;所述tcp/udp協(xié)議層用于識(shí)別ipv4數(shù)據(jù)包和ipv6數(shù)據(jù)包,所述網(wǎng)絡(luò)接口協(xié)議層對(duì)數(shù)據(jù)鏈路層數(shù)據(jù)包的封裝以及將接收到的數(shù)據(jù)發(fā)送給上層,所述ipv4、ipv6協(xié)議層實(shí)現(xiàn)了雙協(xié)議棧并行處理工作,所述icmpv4、icmpv6協(xié)議層對(duì)接收到的ping請(qǐng)求報(bào)的應(yīng)答和主動(dòng)發(fā)送ping請(qǐng)求報(bào)。
一種網(wǎng)絡(luò)雙協(xié)議棧并行處理模型的處理方法,首先將在物理層截獲下來的信息提交給數(shù)據(jù)鏈路層,在mac層對(duì)收到的幀進(jìn)行分析,此時(shí)便可以根據(jù)幀中的相應(yīng)字段區(qū)分出是ipv4包還是ipv6包,封裝處理結(jié)束后繼續(xù)向上層遞交,在網(wǎng)絡(luò)層根據(jù)從底層收上來包是ipv4包或者ipv6包來做相應(yīng)的處理實(shí)現(xiàn)雙協(xié)議棧,處理結(jié)束后繼續(xù)向上層遞交進(jìn)行傳輸層的相應(yīng)處理,直至上層用戶的應(yīng)用。
有益效果:本發(fā)明把tcp/ip雙協(xié)議棧的實(shí)現(xiàn)過程層次化,提高了協(xié)議棧的移植性,把該協(xié)議棧移植到其他的硬件上只需更改少量和底層硬件聯(lián)系的文件,上層的程序無需修改;tcp/ip雙協(xié)議棧在嵌入式系統(tǒng)的實(shí)現(xiàn)可以大量應(yīng)用到工業(yè)生產(chǎn)以及普通生活中,可使設(shè)備輕易增加網(wǎng)絡(luò)接口,特別是隨著ipv6的推廣應(yīng)用以及現(xiàn)代生活的飛速發(fā)展,本發(fā)明所闡述的實(shí)現(xiàn)就有著更為重大的意義。
附圖說明
圖1是本發(fā)明雙協(xié)議棧結(jié)構(gòu);
圖2是本發(fā)明雙協(xié)議棧處理流程。
具體實(shí)施方式
下面對(duì)本發(fā)明技術(shù)方案進(jìn)行詳細(xì)說明,但是本發(fā)明的保護(hù)范圍不局限于所述實(shí)施例。
實(shí)施例:一種網(wǎng)絡(luò)雙協(xié)議棧并行處理模型,如圖1所示,包括tcp/udp協(xié)議層、網(wǎng)絡(luò)接口協(xié)議層、ipv4、ipv6協(xié)議層、icmpv4/icmpv6協(xié)議層;tcp/udp協(xié)議層用于識(shí)別ipv4數(shù)據(jù)包和ipv6數(shù)據(jù)包,網(wǎng)絡(luò)接口協(xié)議層對(duì)數(shù)據(jù)鏈路層數(shù)據(jù)包的封裝以及將接收到的數(shù)據(jù)發(fā)送給上層,ipv4、ipv6協(xié)議層實(shí)現(xiàn)了雙協(xié)議棧并行處理工作,icmpv4、icmpv6協(xié)議層對(duì)接收到的ping請(qǐng)求報(bào)的應(yīng)答和主動(dòng)發(fā)送ping請(qǐng)求報(bào)。
網(wǎng)絡(luò)接口協(xié)議層主要完成與硬件設(shè)備的通信。這部分功能的實(shí)現(xiàn)主要是:以太網(wǎng)控制芯片rtl8019as接口驅(qū)動(dòng)和針對(duì)ipv4棧的apr地址解析協(xié)議。接收數(shù)據(jù)時(shí),網(wǎng)絡(luò)接口層將從網(wǎng)卡接收到的數(shù)據(jù)存到緩沖區(qū),通過讀取數(shù)據(jù)的得到以太幀報(bào)頭,根據(jù)以太幀報(bào)頭的類型字段判斷以太類型,從而轉(zhuǎn)入相應(yīng)的處理。在發(fā)送時(shí)根據(jù)ip報(bào)文的報(bào)頭判斷發(fā)送的是ipv4還是ipv6報(bào)文來對(duì)發(fā)送的以太幀進(jìn)行封裝。
ipv4協(xié)議的實(shí)現(xiàn)主要是ip協(xié)議層的處理,包括兩個(gè)方面:第一,對(duì)接收到的ip報(bào)進(jìn)行處理;第二,根據(jù)傳輸層協(xié)議的信息處理發(fā)送的lp報(bào)。
以下列出實(shí)現(xiàn)的幾個(gè)主要函數(shù):
(1)createipheadcrc()16位校驗(yàn)和函數(shù)
該函數(shù)是先將ip報(bào)頭按16位的方式累加,累加的結(jié)果如果大于oxffff,就把高出的16位和低16位相加,最后結(jié)構(gòu)取反輸出。
(2)send_lp4_frame()ip報(bào)發(fā)送函數(shù)
該函數(shù)主要由上層協(xié)議的需求來封裝ip層的數(shù)據(jù),以及把數(shù)據(jù)傳遞到以太網(wǎng)接口層等待發(fā)送。在它的輸入?yún)?shù)中指明了上一層協(xié)議的類型,就是在這個(gè)函數(shù)中調(diào)用了以太網(wǎng)接口層的發(fā)送函數(shù)send_ip4_to_llc()。
(3)ip4_process()ip報(bào)接收函數(shù)
以太網(wǎng)層的接收函數(shù)recethernetpacked()調(diào)用該函數(shù),它通過ip報(bào)中的協(xié)議字段判斷上層協(xié)議的類型再調(diào)用上層協(xié)議的相應(yīng)函數(shù)進(jìn)行處理。在本發(fā)明中能處理的上層協(xié)議類型是icmp,udp和tcp協(xié)議。
ipv6協(xié)議主要實(shí)現(xiàn)無連接的ip數(shù)據(jù)報(bào)的封裝、解封、接收和傳送的功能,系統(tǒng)實(shí)現(xiàn)包括以下函數(shù):
(1)ip6_init()初始化函數(shù)
該函數(shù)的主要是初始化ipv6協(xié)議族中各字段的參數(shù),以及可能包含的協(xié)議的數(shù)目,例如:協(xié)議中的ip地址、使用協(xié)議的類型。
(2)ip6-process()ip報(bào)接收函數(shù)
下層的網(wǎng)絡(luò)接口層接收函數(shù)調(diào)用此函數(shù)接收ipv6數(shù)據(jù)報(bào)。ip6_process要實(shí)現(xiàn)以下兩個(gè)功能:
①報(bào)文的驗(yàn)證
報(bào)文的正確性驗(yàn)證,包括檢查版本號(hào)是否正確,收到的報(bào)文長度是否短應(yīng)有的長度,報(bào)文的目的是否本地接口等。
②和向上層協(xié)議傳遞數(shù)據(jù)報(bào)
向上層協(xié)議傳遞數(shù)據(jù)報(bào),就是根據(jù)ip6_head.nextheader(下一報(bào)頭),對(duì)報(bào)文進(jìn)行分發(fā)。如果是udp報(bào)文,則調(diào)用上層的udp協(xié)議實(shí)現(xiàn)的接收函數(shù),如果是tcp報(bào)文,則調(diào)用上層tcp協(xié)議實(shí)現(xiàn)的接收處理函數(shù)。
(3)send_lp6_frame()ip報(bào)發(fā)送函數(shù)
在發(fā)送數(shù)據(jù)時(shí),函數(shù)send_ip6_fram()通常要從兩處接收傳送報(bào)文:ip轉(zhuǎn)發(fā)模塊和ip層之上的協(xié)議。在本發(fā)明中,由于系統(tǒng)需要傳送的數(shù)據(jù)包都較小,系統(tǒng)硬件資源有限,send_ip6_frame()的處理過程沒有實(shí)現(xiàn)分片功能。該函數(shù)被調(diào)用時(shí),ipv6首部雖然被上層初始化,但是ipv6首部中的版本號(hào)和流標(biāo)簽字段還是需要從主機(jī)字節(jié)順序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序。
icmp報(bào)文中,回送請(qǐng)求和回送應(yīng)答報(bào)文可用于測(cè)試兩個(gè)系統(tǒng)的連通情況,ping工具利用的就是這兩種報(bào)文,icmp協(xié)議的實(shí)現(xiàn)主要是對(duì)接收到的ping請(qǐng)求報(bào)的應(yīng)答和主動(dòng)發(fā)送ping請(qǐng)求報(bào)等。下面說明主要的需要實(shí)現(xiàn)的函數(shù):
(1)createlcmp4headcrc()校驗(yàn)和計(jì)算函數(shù)
該函數(shù)負(fù)責(zé)對(duì)icmpv4報(bào)校驗(yàn)和的計(jì)算,具體算法參看ipv4報(bào)頭的校驗(yàn)和函數(shù)createipheadcrc()。
(2)ping_process發(fā)送ping請(qǐng)求幀
該函數(shù)主要是用來發(fā)送ping請(qǐng)求報(bào),函數(shù)在運(yùn)行時(shí)首先根據(jù)輸入?yún)?shù)設(shè)置好icmp報(bào)的發(fā)送緩存區(qū),然后調(diào)用send_ip4_framed()函數(shù)進(jìn)行發(fā)送。
(3)icmpv4_processicmpv4請(qǐng)求報(bào)處理
該函數(shù)主要處理接收到的icmpv4請(qǐng)求報(bào),函數(shù)在運(yùn)行時(shí)首先根據(jù)icmpv4報(bào)的類型字段判斷接收到的是否是ping請(qǐng)求幀,如果是,則根據(jù)接收到的ping請(qǐng)求幀來設(shè)置ping應(yīng)答幀,然后調(diào)用ip層的發(fā)送函數(shù)send_ip4seframe()把ping應(yīng)答幀發(fā)送出去。
(4)icmpv4_send()發(fā)送icmpv4報(bào)文
該函數(shù)主要是用來發(fā)送icmpv4信息報(bào),首先把ip報(bào)的前20個(gè)字節(jié)復(fù)制到icmpv4報(bào)的發(fā)送緩沖區(qū),然后根據(jù)類型和操作等設(shè)置icmpv4報(bào)的各個(gè)字段,最后調(diào)用send_ip4_framed()函數(shù)進(jìn)行發(fā)送。
icmpv6是icmpv4的后續(xù)的版本,它對(duì)原來的icmpv4協(xié)議在功能上進(jìn)行了擴(kuò)充,icmpv6包括錯(cuò)誤報(bào)文和信息報(bào)文,錯(cuò)誤報(bào)文用來報(bào)告ipv6包在傳輸和轉(zhuǎn)發(fā)過程中的錯(cuò)誤。信息報(bào)文分為3類:診斷報(bào)文、管理多點(diǎn)傳送組的報(bào)文和鄰居發(fā)現(xiàn)消息。與icmpv4不同,icmpv6響應(yīng)echo命令來檢查網(wǎng)絡(luò)是否連通,本發(fā)明中不作該命令的實(shí)現(xiàn)。
icmpv6中規(guī)定了多種協(xié)議類型和功能,如果實(shí)現(xiàn)全部功能,需要占用大量的系統(tǒng)資源。因此,本發(fā)明對(duì)于icmpv6協(xié)議僅僅利用鄰居發(fā)現(xiàn)協(xié)議實(shí)現(xiàn)地址解析功能。
在ipv4協(xié)議中地址解析過程是由arp協(xié)議來完成,而在ipv6協(xié)議中,鄰居發(fā)現(xiàn)協(xié)議實(shí)現(xiàn)了在ipv4中的地址解析協(xié)議、控制報(bào)文協(xié)議中的路由器發(fā)現(xiàn)部分、重定向協(xié)議的所有功能,并進(jìn)行了一定的擴(kuò)展。鄰居發(fā)現(xiàn)協(xié)議解決了同一條鏈路上的所有節(jié)點(diǎn)之間的互操作問題,地址解析過程是由鄰居請(qǐng)求和鄰居宣告報(bào)文來完成的。由于本發(fā)明沒有實(shí)現(xiàn)路由功能,因此默認(rèn)目的地址為下一跳目的地址,下面解釋地址解析過程:
當(dāng)節(jié)點(diǎn)向目的地發(fā)送數(shù)據(jù)包時(shí),發(fā)送方根據(jù)目的地址檢查鄰居緩存表中有無目的ip地址對(duì)應(yīng)的鏈路層地址。如果鄰居緩存表中沒有記錄該目的ip地址相關(guān)的表項(xiàng)存在,就創(chuàng)建該記錄,同時(shí)將要發(fā)送的數(shù)據(jù)報(bào)放在隊(duì)列中,并啟動(dòng)地址解析過程,地址解析的過程是發(fā)送一個(gè)鄰居請(qǐng)求信息,以及等待一個(gè)鄰居宣告報(bào)文。當(dāng)收到一個(gè)鄰居宣告應(yīng)答時(shí),將該應(yīng)答的硬件地址記錄在鄰居緩存表中,同時(shí)開始發(fā)送放在隊(duì)列中的數(shù)據(jù)報(bào)。當(dāng)開始傳送數(shù)據(jù)報(bào)時(shí),發(fā)送者根據(jù)鄰居不可達(dá)檢測(cè)算法檢測(cè)相關(guān)的可達(dá)性信息,驗(yàn)證鄰居的可達(dá)性,由于本發(fā)明沒有實(shí)現(xiàn)路由功能,為了簡化,這里的鄰居不可達(dá)協(xié)議檢測(cè)算法僅僅檢測(cè)新數(shù)據(jù)包的目的地址是否與鄰居緩存表中已有的目的地址相同,如果不同就開始新的地址解析過程。