2013-10-07 39 views
0

假設我們有一個純粹的IPv6網絡。 套接字應用程序使用getaddrinfo通過其主機名查找HOST1,並獲取HOST1的一個IP地址作爲第一個響應。 爲什麼它應該在返回的地址上循環? HOST1的TCP/IP堆棧或本地TCP/IP堆棧是否負責路由器或HOST1的另一個網絡接口,以查找到HOST1的備用路由?爲什麼addrinfo循環需要?

你會認爲找到名字爲主機的路由是計算機網絡基礎設施的最基本功能,而不是套接字應用。

回答

3

getaddrinfo()可以爲您提供一個真正屬於不同主機的名稱的地址,因此如果某個主機關閉,您仍然可以訪問該服務。

但是互聯網非常笨拙,它不像他們在舊電信網絡中嘗試的那樣是一個智能網絡。互聯網將功能推向邊緣,路由器只是查看數據包中的IP地址併發送出最佳管道。這確實會處理一個IP地址的路徑被破壞的問題,路由器將在另一條路徑上發送數據包。

但是,您的套接字應用程序的邊緣負責決定要將數據包發送到哪個IP地址,以及是否通過查詢DNS,LDAP,靜態配置來確定要將數據包發送到哪個IP地址,配置文件還是什麼不是,不關心網絡。

您希望循環getaddrinfo()結果,因爲解析名稱可以爲您提供不同的IP地址,屬於世界各地提供相同服務的不同主機,並且可以通過IPv4或IPv6訪問。

0

不,最基本的功能是將數據包轉發到目標主機。互聯網設計旨在讓路由器專注於最基本的功能,並使端點儘可能地完成其餘的工作。

那麼,可以和應該這個位被留給端點?我認爲是的,因爲對於端點來說沒有額外的工作,並且對於路由器來說是相當多的額外工作。

無論如何,端點需要代碼才能嘗試多個地址,以支持v4和v6。路由器必須跟蹤哪些地址組成主機(無論「主機」的含義)。

0

名稱解析屬於與路由不同的層。用技術術語來說,你的問題是假設路由器是應用層網關,效率不高。您最好從一些文獻開始,介紹TCP/IP網絡。