潘 艷,陳 姝
(1.渤海大學(xué),遼寧錦州,121000;2.遼寧省基礎(chǔ)測繪院,遼寧錦州,121000)
隨著下一代互聯(lián)網(wǎng)協(xié)議IPv6 以及嵌入式技術(shù)的成熟,對功能、成本及執(zhí)行速度等都有嚴(yán)格要求的小型固定終端嵌入式設(shè)備也得到了廣泛應(yīng)用,它們對網(wǎng)絡(luò)互聯(lián)的需求日益增長,如智能家電,醫(yī)療儀器的遠(yuǎn)程監(jiān)控等,人們可以利用智能手機等移動終端設(shè)備對其進行遠(yuǎn)程控制。而它們不需要支持移動節(jié)點和家鄉(xiāng)代理的功能,只是需要與移動終端進行通信,因此在這種設(shè)備上運行目前已經(jīng)實現(xiàn)了支持包括移動節(jié)點和家鄉(xiāng)代理所有實體功能的移動IPv6 協(xié)議,顯然是對資源的一種浪費。
固定終端節(jié)點與移動終端節(jié)點的通信過程主要有以下五個過程:第一,從移動節(jié)點接收數(shù)據(jù)包,主要包括接收帶有家鄉(xiāng)地址選項的數(shù)據(jù)包的操作和對移動頭消息的處理操作;第二,返回路徑可達過程,包括家鄉(xiāng)和轉(zhuǎn)交地址測試初始消息的接收和家鄉(xiāng)和轉(zhuǎn)交地址測試消息發(fā)送;第三,綁定的處理過程,主要包括接收處理綁定更新、請求注冊一個綁定、請求刪除一個綁定、發(fā)送綁定確認(rèn)、發(fā)送綁定刷新請求和發(fā)送綁定錯誤消息操作;第四,向移動節(jié)點發(fā)送數(shù)據(jù)包,主要檢驗綁定緩存中是否包含此目的地址的綁定條目以及使用第2 類路由頭將數(shù)據(jù)包發(fā)送到移動節(jié)點的操作;第五,接收ICMPv6(第六版網(wǎng)絡(luò)控制報文協(xié)議)錯誤消息。
針對固定終端與移動節(jié)點相互通信的操作過程,固定終端節(jié)點除了要提供對擴展頭處理模塊和ICMPv6 處理模塊的修改支持外,還要提供全新的移動頭處理模塊和綁定處理模塊的支持??傮w模塊圖如圖1 所示。
圖1 固定終端移動IPv6 總體模塊圖
擴展頭處理模塊的實現(xiàn)主要包括以下幾個內(nèi)容:
(1)家鄉(xiāng)地址選項(HAO)和第2 類路由頭選項(RT2)的定義。
(2)接收處理家鄉(xiāng)地址選項(HAO)。
(3)第2 類路由頭選項(RT2)的添加。
(4)對要發(fā)出去的數(shù)據(jù)包選項進行修改。
3.2.1 移動頭消息及選項的定義
在移動IPv6 中新定義了移動頭消息及選項,主要包括移動頭、綁定刷新請求信息、家鄉(xiāng)和轉(zhuǎn)交地址測試初始、家鄉(xiāng)和轉(zhuǎn)交地址測試、綁定更新、綁定確認(rèn)、綁定錯誤和各個移動選項的定義。
3.2.2 接收移動頭消息
當(dāng)接收到移動節(jié)點發(fā)來的帶有移動頭的消息時,由mh_rcv()處理函數(shù)進行處理,首先會對檢驗和和移動頭長度進行檢驗,通過檢驗后再判斷下一個報頭字段是否為59,若不是59 則發(fā)送代碼為0 的頭部錯誤的ICMPv6 參數(shù)錯誤報文。否則,判斷消息類型的有效性,若不合法則發(fā)送status 為2 的未知移動頭消息類型的BE 報文。否則,若類型不空則轉(zhuǎn)向相應(yīng)的綁定更新處理或者地址測試初始處理程序。
3.2.3 返回路徑可達過程的處理
當(dāng)移動節(jié)點MN 接收到通過家鄉(xiāng)代理轉(zhuǎn)發(fā)來的固定終端通信節(jié)點發(fā)來的信息后,就會發(fā)送家鄉(xiāng)和轉(zhuǎn)交地址測試初始,而相應(yīng)的固定終端通信節(jié)點會立即發(fā)送家鄉(xiāng)和轉(zhuǎn)交地址測試來進行回應(yīng),從而開始綁定過程之前的返回路徑可達過程。
3.2.4 綁定更新消息的處理
當(dāng)進行完返回路徑可達過程之后,移動節(jié)點就會發(fā)送綁定更新消息給固定終端通信節(jié)點,通知其現(xiàn)在的所處的位置信息,主要包括家鄉(xiāng)地址Homeaddr 和轉(zhuǎn)交地址CoA 以及用于設(shè)定這個家鄉(xiāng)地址與轉(zhuǎn)交地址對的生存期的生存時間,固定終端節(jié)點通過這些信息,在綁定緩存中為此移動節(jié)點生成一個綁定條目,以便后繼的數(shù)據(jù)包的發(fā)送不經(jīng)過移動節(jié)點的家鄉(xiāng)代理以隧道的方式發(fā)送。
3.2.5 綁定回應(yīng)消息的發(fā)送
(1)發(fā)送綁定確認(rèn)BA
當(dāng)固定終端通信節(jié)點接收了移動節(jié)點發(fā)來的綁定更新消息,并為其生成或者修改了一個綁定緩存條目,綁定更新中的確認(rèn)位A 位被置位,那么發(fā)送綁定確認(rèn)的狀態(tài)域必須設(shè)置為小于128。若A 位沒置位,則不會發(fā)送綁定確認(rèn)消息。當(dāng)固定終端通信節(jié)點拒絕了這個綁定更新,沒有為移動節(jié)點生成或修改一個綁定緩存條目,那么即使綁定更新中的確認(rèn)位沒有被設(shè)置,接收節(jié)點也必須發(fā)送綁定確認(rèn)信息,并且狀態(tài)值域要設(shè)置成大于或等于128。
(2)綁定錯誤BE
當(dāng)固定終端通信節(jié)點從移動節(jié)點接收到帶有家鄉(xiāng)地址目的選項的數(shù)據(jù)包,若它的下一個報頭不為移動頭135 并且檢驗綁定緩存中不存在這樣的綁定條目,或者存在這樣的綁定條目但是它的轉(zhuǎn)交地址與綁定緩存中的地址不一致,則會發(fā)送status 為1的錯誤的使用HAO 的BE 消息。當(dāng)固定終端通信節(jié)點接收到的移動頭中的移動消息類型不合法時,則發(fā)送status 為2 的不能識別移動頭的BE 消息。
(3)綁定刷新請求BRR
當(dāng)一個移動節(jié)點的綁定緩存條目快到期,但此節(jié)點還在與這個移動節(jié)點相互通信時,則發(fā)送綁定刷新請求BRR 給移動節(jié)點來延續(xù)生命時間。發(fā)送的最大數(shù)目為3,發(fā)送間隔為1s,并且一旦接收到了移動節(jié)點發(fā)來的地址測試初始消息就會停止發(fā)送綁定刷新請求。
3.2.6 發(fā)送移動頭消息
首先,計算移動頭、移動消息的長度,并分配空間,設(shè)置上層來的信息,然后查看第2 類路由頭的地址是否為空,若不空則使用第2 類路由頭發(fā)送信息,否則按正常方式發(fā)送。然后分配所有擴展頭選項的空間,將原有的選項添加到這個空間中,若轉(zhuǎn)交地址不空則添加第2 類路由頭信息,下一步就是對移動頭的各個字段進行添加,并計算校驗和,發(fā)送到下層的隊列,從而完成了對移動頭及消息的發(fā)送過程。
3.3.1 綁定緩存的結(jié)構(gòu)
綁定緩存的設(shè)計,采用了哈希桶加循環(huán)雙鏈表的結(jié)構(gòu)。哈希函數(shù)是通用的哈希桶標(biāo)識的函數(shù)H(key)mod N,這個N 值為哈希桶數(shù),根據(jù)移動節(jié)點與固定終端節(jié)點同時連接數(shù)的實際情況考慮最大的值設(shè)置為16,將哈希桶數(shù)N 設(shè)置為8。所以將此綁定緩存的哈希函數(shù)設(shè)置為如下:主鍵Key 為移動節(jié)點的家鄉(xiāng)地址表示為homeaddr,為了使計算時間更快,本綁定緩存設(shè)計了一個最簡單的哈希函數(shù)H(homeaddr)=homeaddr,那么將這個綁定條目所存取的哈希桶數(shù)設(shè)為y,則y =homeaddr mod N。
由于綁定緩存中要對過期的綁定條目進行刪除處理,所以還設(shè)計了一個以生存時間進行排序的鏈表,使此列表的第一個元素總是第一個要過期的元素,從而避免了為每個綁定緩存設(shè)置一個計時器數(shù)。
3.3.2 綁定緩存的操作
(1)綁定緩存的初始化
當(dāng)一個固定終端節(jié)點啟動后就會立即啟動綁定緩存的初始化程序,考慮到小型固定終端設(shè)備的實際應(yīng)用和可擴展性,規(guī)定綁定緩存所能允許的最大的綁定緩存條目值為16,當(dāng)緩存條目數(shù)大于這個值時就會采取相應(yīng)的刪除最近一個要過期的綁定緩存條目作為綁定緩存的替換策略。
(2)綁定緩存的查詢
首先,根據(jù)移動節(jié)點的家鄉(xiāng)地址home_addr 和哈希函數(shù)計算出了此綁定緩存條目所要存儲的哈希桶數(shù)y 為H(home_addr)mod 8,并查找到當(dāng)前的這個哈希桶,然后在這個桶的鏈表中根據(jù)MN 的home_addr 關(guān)鍵字進行順序查找,若找到,則返回0,否則返回-1。
(3)綁定緩存的添加
當(dāng)移動節(jié)點發(fā)送來的綁定更新消息被確定為添加一個綁定緩存條目的操作后,會調(diào)用此綁定緩存的添加函數(shù)來進行注冊一個綁定。在這個過程中又分為兩個操作,添加一個新的綁定條目的操作和更新一個綁定條目的操作。
(4)綁定緩存的刪除
當(dāng)移動節(jié)點發(fā)送來的綁定更新消息被確定為刪除一個綁定緩存條目的操作,或者當(dāng)一個綁定緩存條目的生存時間到期,或者經(jīng)過對接收到的目的地不可達報文的判斷此綁定已經(jīng)不存在,則會調(diào)用綁定緩存的刪除操作進行處理。
(5)時間處理操作
在綁定緩存中由于綁定條目有生存期限,所以當(dāng)綁定緩存條目過期后就要對過期的綁定條目進行處理。
(6)綁定緩存的退出
當(dāng)一個固定終端節(jié)點退出了網(wǎng)絡(luò)或者關(guān)機時,則將綁定緩存的計時器刪除,哈希鏈表結(jié)構(gòu)變量置空,并將排序鏈表和哈希鏈表刪除,釋放綁定緩存的空間,并釋放這個哈希鏈表所占用的空間。
首先判斷擴展頭中是否有第2 類路由頭選項,若有則說明是發(fā)送給移動節(jié)點的信息,并將目的地址與第2 類路由頭中的家鄉(xiāng)地址進行互換,若沒有則說明是一般的目的地不可達消息,從而退出此過程。然后檢驗綁定緩存中是否存在此綁定條目,若存在,則對目的地不可達數(shù)進行判斷,從而根據(jù)目的地不可達數(shù)對綁定緩存的條目進行修改,若綁定條目中的目的地不可達數(shù)大于5,則說明這個綁定條目已經(jīng)失效,然后刪除此綁定緩存條目
通過對面向固定終端與移動節(jié)點的通信過程的分析,設(shè)計實現(xiàn)了對資源占有有著嚴(yán)格要求的小型固定終端設(shè)備移動IPv6 協(xié)議,通過對返回路徑可達過程、綁定過程和綁定后的正常通信過程的測試,基本符合移動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] 孫利民等:移動IP 技術(shù),電子工業(yè)出版社,2003.8,88-92。