萬盛學電腦網

 萬盛學電腦網 >> 網絡應用技術 >> 應用教程 >> IPv6 de鄰居發現技術分析與比較

IPv6 de鄰居發現技術分析與比較

  Q:IPv6 de鄰居發現技術分析與比較
  A:1、引言

    隨著IP網絡規模和業務的迅速發展,IP網絡的用戶數急劇增加,正因為如此,IP網絡也暴露出越來越多的問題,如地址空間不足、QoS、安全問題等。為了解決Internet的這些問題,尤其是解決地址空間不足的問題,IETF於1992年在IPv4的基礎上定義了下一代的Internet協議,被稱之為“Ipng”或“IPv6”。

    IPv6解決的最大問題是擴大了地址空間,另外,它與IPv4相比在其它許多方面都具有優勢,例如安全性、服務質量、移動性等。IPv6的一個顯著特點就是它具有“即插即用”功能。即插即用使節點直接連接到網絡後,不需要經過任何人工配置就能夠使用,即插即用使網絡的管理和控制變得更加簡單;其次,節點只需要知道自己的鏈路層地址及本地網絡的子網前綴,就能夠通過IPv6的無狀態或者全狀態自動配置得到惟一的IPv6地址,從而成為網絡的一部分;另外,IPv6還實現了更好的對節點移動性的支持。這些功能都是通過鄰居發現協議來實現的,同一個子網內的所有主機和路由器之間的交互也都是通過鄰居發現協議來實現的。

    2、工作原理

    鄰居發現協議是IPv6協議的一個基本的組成部分,它實現了在IPv4中的地址解析協議(ARP)、控制報文協議(ICMP)中的路由器發現部分、重定向協議的所有功能,並具有鄰居不可達檢測機制。

    鄰居發現協議實現了路由器和前綴發現、地址解析、下一跳地址確定、重定向、鄰居不可達檢測、重復地址檢測等功能,可選實現鏈路層地址變化、輸入負載均衡、泛播地址和代理通告等功能。

    鄰居發現協議采用5種類型的IPv6控制信息報文(ICMPv6)來實現鄰居發現協議的各種功能。這5種類型消息如下。

    (1)路由器請求(Router Solicitation):當接口工作時,主機發送路由器請求消息,要求路由器立即產生路由器通告消息,而不必等待下一個預定時間。

    (2)路由器通告(Router Advertisement):路由器周期性地通告它的存在以及配置的鏈路和網絡參數,或者對路由器請求消息作出響應。路由器通告消息包含在連接(on-link)確定、地址配置的前綴和跳數限制值等。

    (3)鄰居請求(Neighbor Solicitation):節點發送鄰居請求消息來請求鄰居的鏈路層地址,以驗證它先前所獲得並保存在緩存中的鄰居鏈路層地址的可達性,或者驗證它自己的地址在本地鏈路上是否是惟一的。

    (4)鄰居通告(Neighbor Advertisement):鄰居請求消息的響應。節點也可以發送非請求鄰居通告來指示鏈路層地址的變化。

    (5)重定向(Redirect):路由器通過重定向消息通知主機。對於特定的目的地址,如果不是最佳的路由,則通知主機到達目的地的最佳下一跳。

    3、主機的數據結構

    IPv6的一個設計要求是:即使在一個有限的網絡內,主機也必須正確工作,而不像路由器不能儲存路由表,不能有永久的配置,因此主機必須能自動配置,必須能學到交換數據的有關目的地的最小信息。這些信息儲存的存儲器叫做緩存,這些數據結構是一系列記錄的排列,稱作表項。每個表項儲存的信息有一定的有效期,需要周期性地清除緩存中的表項,以保證緩存的空間大小。

    主機需要為每一接口維護以下信息。

    ·鄰居緩存:一組有關單個鄰居的表項,這些鄰居接收到了最新的數據流。表項是連接單播地址的關鍵,它包括的信息有:其鏈路層地址、指示鄰居是路由器還是主機的標志、指向任何排隊等待完成地址解析數據包的指針等。鄰居緩存表項還包括由鄰居不達檢測算法所使用的信息,如可達狀態、探測無應答的次數以及下一次鄰居不達檢測發生的時間。

    ·目的地緩存:一組有關最近收到數據流的目的地節點表項。目的地緩存包括“在連接(on-link)”和“非連接(off-link)”目的地,並在其中提供一定程度的間接尋址。目的地緩存能把目的地IP地址映射成下一跳鄰居的IP地址,該緩存通過重定向消息進行信息更新。如果在目的地緩存表項中存儲與鄰居發現沒有直接關系的附加信息,例如路徑MTU(PMTU)以及由傳輸協議設定的往返時間,則執行時會更加方便。

    ·前綴列表:規定一組“在連接(on-link)”地址的前綴組成的列表。前綴列表表項產生於路由器通告接收到的信息。每一個表項都有一個相關的失效計時器值(由通告信息確定),它用於在前綴失效時廢棄這些前綴。除非在後續通告中收到了一個新的(有限)值,否則特殊的“無限”計時器值規定前綴永久有效。本地鏈路(1ink-local)前綴位於帶有無限失效計時器的前綴列表,而不管路由器是否正在向其通告前綴。接收的路由器通告不應該修改本地鏈路前綴的失效計時器。

    ·缺省路由器列表:接收數據包的路由器列表。路由器列表的表項指向鄰居緩存中的相應的表項。缺省路由器的選擇算法是:選擇那些已知可達的路由器,而不選擇可達性還不確定的路由器。每一個表項還有一個相關的失效計時器值(從路由器通告信息中得到),它的作用是刪除不再通告的表項。

    上述數據結構可以用不同的方法實現。其中一種實現方法是對所有數據結構使用單個最長匹配路由表。不管采用哪種特定的實現方法,為了防止重復性的鄰居不可達檢測,路由器的鄰居緩存表項可以由使用該路由器的所有目的地緩存表項共享。

    鄰居緩存包含有鄰居不可達檢測算法維護的信息。鄰居可達性狀態是最關鍵的信息,它的取值是下列的5個值之一。

    ·不完整性(INCOMPLETE):正在進行地址解析,鄰居的鏈路層地址還沒確定。

    ·可達性(REACHABLE):鄰居在最近處於可達狀態(在小於10s以前)。

    ·失效性(STALE):在數據流發送給該鄰居以前鄰居是不可達的,並無法驗證其可達性。

    ·延遲(DELAY):鄰居不再是可達的,同時數據流在最近已經發送給鄰居,但不立即對該鄰居進行探測,而在一個短時延後發送探測信息,這樣就可以為上層協議提供可達性確認。

    ·探測(PROBE):鄰居不再是可達的,同時發送單播鄰居請求探測以驗證可達性。

    [page]

    4、數據包的發送算法

    節點向目的地發送數據包時,使用目的地緩存、前綴列表、默認路由器列表確定合適的下一跳的IP地址,然後路由器查詢鄰居緩存確定鄰居的鏈路層地址。

    IPv6單播地址的下一跳確定操作如下:發送者使用前綴列表中的前綴進行最長前綴匹配,確定包的目的地是在連接的還是非連接的。如果下一跳是在連接的,下一跳地址就和目的地地址相同,否則發送者從默認路由器列表中選擇下一跳。如果默認路由器列表為空,則發送者認為目的地是在連接的。

    下一跳確定的信息存儲在目的地緩存中,下一個包可以使用這些信息。當路由器發送包時,首先檢查目的地緩存,如果目的地緩存沒有相關信息存在,就激活下一跳確定過程。

    在學習到下一跳路由器的IPv6地址後,發送者檢查鄰居緩存以決定鏈路層地址。如果沒有下一跳IPv6地址的表項存在,路由器的工作如下:

    ·創建一個新表項,並設置其狀態為不完全。

    ·開始進行地址解析。

    ·對傳送的包進行排隊。

    當地址解析結束時,獲得鏈路層地址,存儲在鄰居緩存中。此時表項到達新的可達狀態,排隊的包能夠傳送。

    對於組播包,下一跳總是認為在連接,確定組播IPv6地址的鏈路層地址取決於鏈路類型。當鄰居緩存開始傳送單播包時,發送者根據鄰居不可達檢測算法檢測相關的可達性信息,驗證鄰居的可達性。當鄰居不可達時,再次執行下一跳確定,驗證到達目的地的另一條路徑是否是可達的。

    如果知道了下一跳節點的IP地址,發送方就檢查鄰居緩存中有關鄰居的鏈路層信息。如果沒有表項存在,發送方就創建一條,並設置其狀態為“不完整性”,同時啟動地址解析,然後對沒有完成地址解析的數據包進行排隊。對具有組播功能的接口來說,地址解析的過程是發送一個鄰居請求信息,以及等待一個鄰居通告。當收到一個鄰居通告應答時,鏈路層地址被表項在鄰居緩存中,同時發送排隊的數據包。

    在傳輸單播數據包期間每次讀取鄰居發現緩存的表項,發送方根據鄰居不可達性檢測的算法檢查鄰居不可達性檢測的相關信息,但不可達性檢測會使發送方發出單播鄰居請求,以驗證該鄰居還是可達的。

  

copyright © 萬盛學電腦網 all rights reserved