潘 艷,陳 姝
(1.渤海大學(xué),遼寧錦州,121000;2.遼寧省基礎(chǔ)測(cè)繪院,遼寧錦州,121000)
隨著下一代互聯(lián)網(wǎng)協(xié)議IPv6 以及嵌入式技術(shù)的成熟,對(duì)功能、成本及執(zhí)行速度等都有嚴(yán)格要求的小型固定終端嵌入式設(shè)備也得到了廣泛應(yīng)用,它們對(duì)網(wǎng)絡(luò)互聯(lián)的需求日益增長(zhǎng),如智能家電,醫(yī)療儀器的遠(yuǎn)程監(jiān)控等,人們可以利用智能手機(jī)等移動(dòng)終端設(shè)備對(duì)其進(jìn)行遠(yuǎn)程控制。而它們不需要支持移動(dòng)節(jié)點(diǎn)和家鄉(xiāng)代理的功能,只是需要與移動(dòng)終端進(jìn)行通信,因此在這種設(shè)備上運(yùn)行目前已經(jīng)實(shí)現(xiàn)了支持包括移動(dòng)節(jié)點(diǎn)和家鄉(xiāng)代理所有實(shí)體功能的移動(dòng)IPv6 協(xié)議,顯然是對(duì)資源的一種浪費(fèi)。
固定終端節(jié)點(diǎn)與移動(dòng)終端節(jié)點(diǎn)的通信過(guò)程主要有以下五個(gè)過(guò)程:第一,從移動(dòng)節(jié)點(diǎn)接收數(shù)據(jù)包,主要包括接收帶有家鄉(xiāng)地址選項(xiàng)的數(shù)據(jù)包的操作和對(duì)移動(dòng)頭消息的處理操作;第二,返回路徑可達(dá)過(guò)程,包括家鄉(xiāng)和轉(zhuǎn)交地址測(cè)試初始消息的接收和家鄉(xiāng)和轉(zhuǎn)交地址測(cè)試消息發(fā)送;第三,綁定的處理過(guò)程,主要包括接收處理綁定更新、請(qǐng)求注冊(cè)一個(gè)綁定、請(qǐng)求刪除一個(gè)綁定、發(fā)送綁定確認(rèn)、發(fā)送綁定刷新請(qǐng)求和發(fā)送綁定錯(cuò)誤消息操作;第四,向移動(dòng)節(jié)點(diǎn)發(fā)送數(shù)據(jù)包,主要檢驗(yàn)綁定緩存中是否包含此目的地址的綁定條目以及使用第2 類(lèi)路由頭將數(shù)據(jù)包發(fā)送到移動(dòng)節(jié)點(diǎn)的操作;第五,接收ICMPv6(第六版網(wǎng)絡(luò)控制報(bào)文協(xié)議)錯(cuò)誤消息。
針對(duì)固定終端與移動(dòng)節(jié)點(diǎn)相互通信的操作過(guò)程,固定終端節(jié)點(diǎn)除了要提供對(duì)擴(kuò)展頭處理模塊和ICMPv6 處理模塊的修改支持外,還要提供全新的移動(dòng)頭處理模塊和綁定處理模塊的支持。總體模塊圖如圖1 所示。

圖1 固定終端移動(dòng)IPv6 總體模塊圖
擴(kuò)展頭處理模塊的實(shí)現(xiàn)主要包括以下幾個(gè)內(nèi)容:
(1)家鄉(xiāng)地址選項(xiàng)(HAO)和第2 類(lèi)路由頭選項(xiàng)(RT2)的定義。
(2)接收處理家鄉(xiāng)地址選項(xiàng)(HAO)。
(3)第2 類(lèi)路由頭選項(xiàng)(RT2)的添加。
(4)對(duì)要發(fā)出去的數(shù)據(jù)包選項(xiàng)進(jìn)行修改。
3.2.1 移動(dòng)頭消息及選項(xiàng)的定義
在移動(dòng)IPv6 中新定義了移動(dòng)頭消息及選項(xiàng),主要包括移動(dòng)頭、綁定刷新請(qǐng)求信息、家鄉(xiāng)和轉(zhuǎn)交地址測(cè)試初始、家鄉(xiāng)和轉(zhuǎn)交地址測(cè)試、綁定更新、綁定確認(rèn)、綁定錯(cuò)誤和各個(gè)移動(dòng)選項(xiàng)的定義。
3.2.2 接收移動(dòng)頭消息
當(dāng)接收到移動(dòng)節(jié)點(diǎn)發(fā)來(lái)的帶有移動(dòng)頭的消息時(shí),由mh_rcv()處理函數(shù)進(jìn)行處理,首先會(huì)對(duì)檢驗(yàn)和和移動(dòng)頭長(zhǎng)度進(jìn)行檢驗(yàn),通過(guò)檢驗(yàn)后再判斷下一個(gè)報(bào)頭字段是否為59,若不是59 則發(fā)送代碼為0 的頭部錯(cuò)誤的ICMPv6 參數(shù)錯(cuò)誤報(bào)文。否則,判斷消息類(lèi)型的有效性,若不合法則發(fā)送status 為2 的未知移動(dòng)頭消息類(lèi)型的BE 報(bào)文。否則,若類(lèi)型不空則轉(zhuǎn)向相應(yīng)的綁定更新處理或者地址測(cè)試初始處理程序。
3.2.3 返回路徑可達(dá)過(guò)程的處理
當(dāng)移動(dòng)節(jié)點(diǎn)MN 接收到通過(guò)家鄉(xiāng)代理轉(zhuǎn)發(fā)來(lái)的固定終端通信節(jié)點(diǎn)發(fā)來(lái)的信息后,就會(huì)發(fā)送家鄉(xiāng)和轉(zhuǎn)交地址測(cè)試初始,而相應(yīng)的固定終端通信節(jié)點(diǎn)會(huì)立即發(fā)送家鄉(xiāng)和轉(zhuǎn)交地址測(cè)試來(lái)進(jìn)行回應(yīng),從而開(kāi)始綁定過(guò)程之前的返回路徑可達(dá)過(guò)程。
3.2.4 綁定更新消息的處理
當(dāng)進(jìn)行完返回路徑可達(dá)過(guò)程之后,移動(dòng)節(jié)點(diǎn)就會(huì)發(fā)送綁定更新消息給固定終端通信節(jié)點(diǎn),通知其現(xiàn)在的所處的位置信息,主要包括家鄉(xiāng)地址Homeaddr 和轉(zhuǎn)交地址CoA 以及用于設(shè)定這個(gè)家鄉(xiāng)地址與轉(zhuǎn)交地址對(duì)的生存期的生存時(shí)間,固定終端節(jié)點(diǎn)通過(guò)這些信息,在綁定緩存中為此移動(dòng)節(jié)點(diǎn)生成一個(gè)綁定條目,以便后繼的數(shù)據(jù)包的發(fā)送不經(jīng)過(guò)移動(dòng)節(jié)點(diǎn)的家鄉(xiāng)代理以隧道的方式發(fā)送。
3.2.5 綁定回應(yīng)消息的發(fā)送
(1)發(fā)送綁定確認(rèn)BA
當(dāng)固定終端通信節(jié)點(diǎn)接收了移動(dòng)節(jié)點(diǎn)發(fā)來(lái)的綁定更新消息,并為其生成或者修改了一個(gè)綁定緩存條目,綁定更新中的確認(rèn)位A 位被置位,那么發(fā)送綁定確認(rèn)的狀態(tài)域必須設(shè)置為小于128。若A 位沒(méi)置位,則不會(huì)發(fā)送綁定確認(rèn)消息。當(dāng)固定終端通信節(jié)點(diǎn)拒絕了這個(gè)綁定更新,沒(méi)有為移動(dòng)節(jié)點(diǎn)生成或修改一個(gè)綁定緩存條目,那么即使綁定更新中的確認(rèn)位沒(méi)有被設(shè)置,接收節(jié)點(diǎn)也必須發(fā)送綁定確認(rèn)信息,并且狀態(tài)值域要設(shè)置成大于或等于128。
(2)綁定錯(cuò)誤BE
當(dāng)固定終端通信節(jié)點(diǎn)從移動(dòng)節(jié)點(diǎn)接收到帶有家鄉(xiāng)地址目的選項(xiàng)的數(shù)據(jù)包,若它的下一個(gè)報(bào)頭不為移動(dòng)頭135 并且檢驗(yàn)綁定緩存中不存在這樣的綁定條目,或者存在這樣的綁定條目但是它的轉(zhuǎn)交地址與綁定緩存中的地址不一致,則會(huì)發(fā)送status 為1的錯(cuò)誤的使用HAO 的BE 消息。當(dāng)固定終端通信節(jié)點(diǎn)接收到的移動(dòng)頭中的移動(dòng)消息類(lèi)型不合法時(shí),則發(fā)送status 為2 的不能識(shí)別移動(dòng)頭的BE 消息。
(3)綁定刷新請(qǐng)求BRR
當(dāng)一個(gè)移動(dòng)節(jié)點(diǎn)的綁定緩存條目快到期,但此節(jié)點(diǎn)還在與這個(gè)移動(dòng)節(jié)點(diǎn)相互通信時(shí),則發(fā)送綁定刷新請(qǐng)求BRR 給移動(dòng)節(jié)點(diǎn)來(lái)延續(xù)生命時(shí)間。發(fā)送的最大數(shù)目為3,發(fā)送間隔為1s,并且一旦接收到了移動(dòng)節(jié)點(diǎn)發(fā)來(lái)的地址測(cè)試初始消息就會(huì)停止發(fā)送綁定刷新請(qǐng)求。
3.2.6 發(fā)送移動(dòng)頭消息
首先,計(jì)算移動(dòng)頭、移動(dòng)消息的長(zhǎng)度,并分配空間,設(shè)置上層來(lái)的信息,然后查看第2 類(lèi)路由頭的地址是否為空,若不空則使用第2 類(lèi)路由頭發(fā)送信息,否則按正常方式發(fā)送。然后分配所有擴(kuò)展頭選項(xiàng)的空間,將原有的選項(xiàng)添加到這個(gè)空間中,若轉(zhuǎn)交地址不空則添加第2 類(lèi)路由頭信息,下一步就是對(duì)移動(dòng)頭的各個(gè)字段進(jìn)行添加,并計(jì)算校驗(yàn)和,發(fā)送到下層的隊(duì)列,從而完成了對(duì)移動(dòng)頭及消息的發(fā)送過(guò)程。
3.3.1 綁定緩存的結(jié)構(gòu)
綁定緩存的設(shè)計(jì),采用了哈希桶加循環(huán)雙鏈表的結(jié)構(gòu)。哈希函數(shù)是通用的哈希桶標(biāo)識(shí)的函數(shù)H(key)mod N,這個(gè)N 值為哈希桶數(shù),根據(jù)移動(dòng)節(jié)點(diǎn)與固定終端節(jié)點(diǎn)同時(shí)連接數(shù)的實(shí)際情況考慮最大的值設(shè)置為16,將哈希桶數(shù)N 設(shè)置為8。所以將此綁定緩存的哈希函數(shù)設(shè)置為如下:主鍵Key 為移動(dòng)節(jié)點(diǎn)的家鄉(xiāng)地址表示為homeaddr,為了使計(jì)算時(shí)間更快,本綁定緩存設(shè)計(jì)了一個(gè)最簡(jiǎn)單的哈希函數(shù)H(homeaddr)=homeaddr,那么將這個(gè)綁定條目所存取的哈希桶數(shù)設(shè)為y,則y =homeaddr mod N。
由于綁定緩存中要對(duì)過(guò)期的綁定條目進(jìn)行刪除處理,所以還設(shè)計(jì)了一個(gè)以生存時(shí)間進(jìn)行排序的鏈表,使此列表的第一個(gè)元素總是第一個(gè)要過(guò)期的元素,從而避免了為每個(gè)綁定緩存設(shè)置一個(gè)計(jì)時(shí)器數(shù)。
3.3.2 綁定緩存的操作
(1)綁定緩存的初始化
當(dāng)一個(gè)固定終端節(jié)點(diǎn)啟動(dòng)后就會(huì)立即啟動(dòng)綁定緩存的初始化程序,考慮到小型固定終端設(shè)備的實(shí)際應(yīng)用和可擴(kuò)展性,規(guī)定綁定緩存所能允許的最大的綁定緩存條目值為16,當(dāng)緩存條目數(shù)大于這個(gè)值時(shí)就會(huì)采取相應(yīng)的刪除最近一個(gè)要過(guò)期的綁定緩存條目作為綁定緩存的替換策略。
(2)綁定緩存的查詢
首先,根據(jù)移動(dòng)節(jié)點(diǎn)的家鄉(xiāng)地址home_addr 和哈希函數(shù)計(jì)算出了此綁定緩存條目所要存儲(chǔ)的哈希桶數(shù)y 為H(home_addr)mod 8,并查找到當(dāng)前的這個(gè)哈希桶,然后在這個(gè)桶的鏈表中根據(jù)MN 的home_addr 關(guān)鍵字進(jìn)行順序查找,若找到,則返回0,否則返回-1。
(3)綁定緩存的添加
當(dāng)移動(dòng)節(jié)點(diǎn)發(fā)送來(lái)的綁定更新消息被確定為添加一個(gè)綁定緩存條目的操作后,會(huì)調(diào)用此綁定緩存的添加函數(shù)來(lái)進(jìn)行注冊(cè)一個(gè)綁定。在這個(gè)過(guò)程中又分為兩個(gè)操作,添加一個(gè)新的綁定條目的操作和更新一個(gè)綁定條目的操作。
(4)綁定緩存的刪除
當(dāng)移動(dòng)節(jié)點(diǎn)發(fā)送來(lái)的綁定更新消息被確定為刪除一個(gè)綁定緩存條目的操作,或者當(dāng)一個(gè)綁定緩存條目的生存時(shí)間到期,或者經(jīng)過(guò)對(duì)接收到的目的地不可達(dá)報(bào)文的判斷此綁定已經(jīng)不存在,則會(huì)調(diào)用綁定緩存的刪除操作進(jìn)行處理。
(5)時(shí)間處理操作
在綁定緩存中由于綁定條目有生存期限,所以當(dāng)綁定緩存條目過(guò)期后就要對(duì)過(guò)期的綁定條目進(jìn)行處理。
(6)綁定緩存的退出
當(dāng)一個(gè)固定終端節(jié)點(diǎn)退出了網(wǎng)絡(luò)或者關(guān)機(jī)時(shí),則將綁定緩存的計(jì)時(shí)器刪除,哈希鏈表結(jié)構(gòu)變量置空,并將排序鏈表和哈希鏈表刪除,釋放綁定緩存的空間,并釋放這個(gè)哈希鏈表所占用的空間。
首先判斷擴(kuò)展頭中是否有第2 類(lèi)路由頭選項(xiàng),若有則說(shuō)明是發(fā)送給移動(dòng)節(jié)點(diǎn)的信息,并將目的地址與第2 類(lèi)路由頭中的家鄉(xiāng)地址進(jìn)行互換,若沒(méi)有則說(shuō)明是一般的目的地不可達(dá)消息,從而退出此過(guò)程。然后檢驗(yàn)綁定緩存中是否存在此綁定條目,若存在,則對(duì)目的地不可達(dá)數(shù)進(jìn)行判斷,從而根據(jù)目的地不可達(dá)數(shù)對(duì)綁定緩存的條目進(jìn)行修改,若綁定條目中的目的地不可達(dá)數(shù)大于5,則說(shuō)明這個(gè)綁定條目已經(jīng)失效,然后刪除此綁定緩存條目
通過(guò)對(duì)面向固定終端與移動(dòng)節(jié)點(diǎn)的通信過(guò)程的分析,設(shè)計(jì)實(shí)現(xiàn)了對(duì)資源占有有著嚴(yán)格要求的小型固定終端設(shè)備移動(dòng)IPv6 協(xié)議,通過(guò)對(duì)返回路徑可達(dá)過(guò)程、綁定過(guò)程和綁定后的正常通信過(guò)程的測(cè)試,基本符合移動(dòng)IPv6 協(xié)議規(guī)范RFC3775 的要求。
[1] R.Hinden,Internet Protocol Version 6(IPv6) Specification,RFC2460, December 1998.
[2] D.Johnson,C.Perkins,J.Arkko,Mobility Support in IPv6,RFC3775, June 2004.
[3] A.Conta,S.Deering,Internet Control Message Protocol(ICMPv6) for the Internet Protocol Version 6(IPv6) Specification,RFC2463,December 1998.
[4] 孫利民等:移動(dòng)IP 技術(shù),電子工業(yè)出版社,2003.8,88-92。