关于Anycast的介绍[通俗易懂]
Anycast最初是在RFC1546中提出并定義的,它的最初語義是,在IP網絡上通過一個Anycast地址標識一組提供特定服務的主機,同時服務訪問方并不關心提供服務的具體是哪一臺主機(比如DNS或者鏡像服務),訪問該地址的報文可以被IP網絡路由到這一組目標中的任何一臺主機上,它提供的是一種無狀態的、盡力而為的服務(如圖1)。目前對于Anycast的中文譯稱主要有,“任播”、“泛潘”、“選播”等,本文一律使用“任播”一詞,或者直接使用英文單詞“Anycast”。
圖1 任播示意圖
Anycast作為一種新的網絡服務被IPv6接納,并且在最初的IPv6標準中為Anycast分配了單獨的地址空間(RFC2526),不過,新的IPv6標準(RFC 2373)已經去掉了Anycast的單獨地址空間,而是使其共享IPv6的單播地址空間。標準對anycast的定義是,當一個單播地址被分配到多于一個的接口上時,發到該接口的報文被網絡路由到由路由協議度量的“最近”的目標接口上。與Unicast和Multicast類似,Anycast也是IP網絡的一種通信模式。Unicast允許源結點向單一目標結點發送數據報,Multicast允許源結點向一組目標結點發送數據報,而Anycast則允許源結點向一組目標結點中的一個結點發送數據報,而這個結點由路由系統選擇,對源結點透明;同時,路由系統選擇“最近”的結點為源結點提供服務,從而在一定程序上為源結點提供了更好的服務也減輕了網絡負載。
正是Anycast這一通信模式的特點,使它在IP網絡中具有了一定程序的應用前景。首先,分布的服務共享相同的IP地址,同時在IP層進行透明的服務定位,這使得各種網絡服務特別是應用層服務具有更強的透明性,比如DNS,在IPv6網絡中它可以共享一個熟知的IP地址,用戶不需要特殊配置也不用關心訪問的是哪一臺DNS服務器;其次,路由系統選擇了“最近”的服務,縮短了服務響應的時間,同時減輕了網絡負載;最后,相同的服務在網絡上冗余分布,路由系統可以提供機制選擇負載相對輕的帶寬相對高的路徑來轉發報文,這樣就給用戶帶來了兩個方面的好處:1) 減弱了DOS攻擊對用戶帶來的影響。當Anycast組中某一個成員或者幾個成員受到攻擊時,負責報文轉發的路由器可以根據各個組成員的響應時間來決定報文應該轉發到哪個成員上,這樣受到攻擊的成員由于沒有響應,所以報文就不會被轉發到那里,同時,由于Anycast提供的服務訪問透明性,組成員也相對較難受到DOS攻擊。2) 減弱了網絡擁塞給用戶帶來的影響。同上面的道理,當Anycast的某些組成員處在擁塞的網段時,它的響應時間就較長,報文可以被轉發到響應較好的成員那里。
雖然Anycast在以上方面有一定的優勢,但是目前Anycast的應用并不如期待中的一樣。應用層對Anycast的使用主要有服務器自動選擇、服務自動定位,服務器自動選擇可以使用在需要對某種應用層服務提供多個鏡像服務器的情況,比如FTP服務、在線游戲服務等。服務自動定位可以使用在主機不需要特別配置而使用一種知名服務的情況,典型的如DNS。網絡層實現Anycast主要是依據Anycast路由表對報文進行透明轉發,向上層提供服務,這樣應用層就不需要專門的Anycast程序模塊。Anycast路由表記錄了一個Anycast組所有成員的Unicast地址,當路由器收到一個指向Anycast地址的報文時,首先搜索Anycast路由表找到相應的Anycast組,然后把報文轉發到這個組中的一個成員上。鑒于應用層對全球范圍內的Anycast的需求,所以促成了對網絡層全球Anycast機制的研究。本文關注的重點是基于IPv6的全球范圍網絡層的Anycast機制,在這樣的機制下,應用層只需要使用網絡層提供的服務來實現應用層的Anycast。
網絡層任播需要解決的問題
IP層實現全球范圍內的Anycast主要面臨兩個方面的問題,一方面是全球范圍內的Anycast使得路由聚合變得困難;另一方面是無狀態的服務會導致基于單播的有狀態連接中途失效。下面對這兩個問題進行詳細闡述。
路由聚合是指為縮短路由表長度提高路由效率,把具有相同地址前綴的多個IP地址合并成一個僅包含相同前綴的網絡地址的方法,在實際應用中,這些IP地址必須對應相同的下一跳端口才可以在路由表中被合并成一項。由于基于IPv6的網絡的IP地址采用128位二進制位表示網絡中一個結點(路由器或者主機)的地址,地址空間相當大,所以必須采用路由聚合的方法來縮短路由表,這樣就要求基于IPv6網絡的路由拓撲必須具有一個相對嚴格的層次結構,共享相同前綴的一個子網拓撲稱作一個路由域(Domain),在這種情況下,當Anycast的組成員分布在不同的路由域中時,Anycast路由表就不能聚合,如圖2所示,A1和A2是同一個Anycast組的兩個成員,它們分布在前綴分別是3ffe:8140::/28和2001:220::/32的兩個不同的路由域中,因為這兩個單播地址不能聚合,所以負責報文轉發的中間路由器必須為這兩個成員分別存儲一個路由項,在全球部署一個Anycast服務時,如果這樣的情況很多,那Anycast路由表就會變得很大,導致路由效率急劇下降。正是這樣的情況給全球部署Anycast服務帶來了很大困難。
圖2 IPv6網絡路由拓撲層次結構
由于Anycast是一種無狀態的服務,在一次有狀態的通信過程中,如果使用了Anycast服務,通信就有可能中途失敗。以TCP通信這例,如圖3所示,A一個Anycast組標志,M1和M2是這個組的兩個成員,Sender和A進行TCP通信,實際上TCP數據被轉發到A的一個成員上,假如TCP連接建立連接時報文轉發到了M1上,通信過程中由于某種不確定因素,在通信結束之前報文又被轉發到了M2上,這樣TCP通信便會失敗,原因是TCP通信過程中需要維護雙方的狀態信息(如滑動窗口大小等),報文被轉發到M2后,雙方的狀態就不再一致,通信失敗。再比如,當使用RTP協議進行流媒體傳輸的時候,也會出現同樣的情況。
圖3 有狀態通信示意圖
總結
以上是生活随笔為你收集整理的关于Anycast的介绍[通俗易懂]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: how to verify that L
- 下一篇: 2015-03-19 Opportuni