1. 程式人生 > >用IP地址的用途理解Loopback介面

用IP地址的用途理解Loopback介面

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

1.問題

IP地址到底是屬於主機的還是屬於網絡卡的?這個問題有點太學院派了,現實中,只要懂得IP地址的概念以及IP路由,基本上沒有問題。IP作為一個網路層協議,它更多的意義在於定址而不是標識主機,因此你可以認為IP是屬於網絡卡的。
        然而不同的人對於IP地址有不同的看法,程式設計師看來,IP地址是屬於主機的,因為他們總是用一個套接字來表示一個服務,套接字中的IP地址表示一臺主機,協議和埠號表示了該主機上的一個特定程序;對於網路工程師而言,他們會認為IP地址是屬於一個網段的,也就是編寫於網絡卡上的,如果一臺主機有多塊網絡卡,那麼它的每塊網絡卡都可以有多個IP地址,IP地址在網路工程師看來,更多的是為了根據IP路由結果將資料包發往下一跳。

2.Local路由表

每一臺實現了TCP/IP的主機都有一張Local路由表,雖然實現方式不一定一樣。所謂的Local路由表,就是標示到達所有本機所有網絡卡的IP地址的路由,包括物理網絡卡和虛擬網絡卡,當然也包括咯opback網絡卡,這些路由的下一跳就是最後一跳,其實就是本機,也就是本地接收!後文會提到,在任意一塊網絡卡上配置一個IP地址,核心都會自動增加一個Local表的路由項。
        因此,只要是在Local表中配置一條路由,資料包就會被本地三層接收,至於能否接收成功,就看第四層以及更高層了。

3.負責定址的IP地址

IP地址在TCP/IP網路上身兼兩職,既標示主機,又負責定址。IP是無狀態無連線的,資料包是一跳一跳逐漸接近目的地的,其重要作用的是IP路由,每個中間裝置都會有一張路由表,資料包到達該中間裝置的時候,根據最長掩碼匹配原則(不考慮有類IP定址),找到下一跳的IP地址,然後進行“下一跳解析”(比如arp)將定址落實在鏈路層,然後將資料包發往下一跳。

4.標示主機本身的IP地址

IP地址在TCP/IP網路上身兼兩職,既負責定址,又標示主機。由於二元對立,標示主機的IP地址當然就不能配置在任何物理網絡卡上,也不會依賴物理網絡卡的up和down,只要主機本身沒有down掉(崩潰或者掉電等),任何一塊物理網絡卡的down掉就不妨礙該主機繼續提供服務,但是前提是資料包可以從另一塊網絡卡到達該主機。

5.配置在物理網絡卡上的IP地址標示主機

配置在物理網絡卡上IP地址都可以標示主機,因為該物理網絡卡上配置IP的時候,會對路由表產生影響,第一個影響是會生成一條直連路由,另一個影響就是會生成一條Local路由,只要生成了Local路由就能標示主機,但是物理網絡卡IP標示主機的前提是該物理網絡卡是up狀態,但是這合理嗎?物理網絡卡的up狀態保持依賴於很多的外部條件,甚至依賴該網絡卡對端裝置的up狀態,因此這種標示法是不合理的,正常情況下,不應該用物理網絡卡的IP地址來標示主機,物理網絡卡的IP地址應該只負責定址!

6.IP地址規劃

IP地址由主機位和網路位組成,主機位的位數描述了網路的規模,規劃網路的時候,網路中可容納的網絡卡地址數量為主機位容量減去2,因此只要規劃一個網路就會浪費掉兩個地址,避免廣播地址和網路地址的方式就是使用32位字首,由於32位字首的IP地址不再表示一個網路,因此也就不可能擁有所謂的同網段直連路由(即鏈路層路由),那麼使用32位字首IP地址的代價就是手工新增一條明確的路由指向32位IP地址的目標作為最後一跳。
        至此,我將IP地址分成了兩種用途,第一種用途用來標示主機,我使用32位字首的地址,第二種用途我用來定址,執行標準的IP路由。依照前文的描述,標示主機的IP地址不能配置在物理網絡卡上,那麼配置在哪裡呢?答案就是Loopback介面。

7.Loopback介面

Loopback介面是一個特殊的虛擬網絡卡,很多人都認為它的地址是127.0.0.1,用於測試協議棧是否有故障,然而事情不是大多數人想當然的這麼簡單。
        首先,我可以肯定地說,配置在Loopback介面上的IP是屬於主機的,而配置在物理網絡卡上的IP地址在不同層面可以認為屬於主機和屬於網絡卡。另外,這種Loopback不依賴任何物理鏈路狀態和鏈路層協議,永遠不會down掉,只要有一塊網絡卡是up狀態並且路由可達,該Loopback介面上配置的標示該主機的IP地址就可達。

8.配置路由指定源地址很重要

到此,我將IP地址的兩類用途徹底分離了,用於定址的不用來標示主機,用於標示主機的不負責定址,也就是說,當繫結套結字的時候,不再使用物理介面的IP地址,而是使用Loopback口的32位字首的IP地址。然而分久必合,IP地址兩類用途之間還是有關聯的,這種關鍵體現在資料包發出時的源地址選擇上,按照IP路由邏輯,在沒有bind地址的情況下,源地址選擇將和下一跳閘道器執行最長掩碼匹配演算法來選擇。我們不能指望上層都會bind源地址,因此就需要在IP層影響源地址選擇演算法,否則Loopback介面的地址將永遠不會被選中,因為它沒有鏈路層路由,和任何地址都不處在“同一網段”,故而你不能在“該網段”去尋找下一跳。
        因此,配置路由指定源地址很重要,幸運的是Linux系統使用iproute2可以實現,而Windows系統通過一種變通的方式也能做到(但是Windows系統需要安裝額外的Loopback驅動用以匯出該虛擬介面)。

9.一個實際例子

我新增一個32位掩碼的IP地址到Loopback介面:
ip addr add dev lo 33.33.33.33/32
再新增兩條路由
ip route add 0.0.0.0/0 via 1.1.1.2 metric 10 src 33.33.33.33
ip route add 0.0.0.0/0 via 2.2.2.2 metric 20 src 33.33.33.33

然後在其網絡卡1直連的機器1上配置一條路由:
route add -host 33.33.33.33 gw 1.1.1.1 (1.1.1.1是網絡卡1的IP地址)
然後在其網絡卡2直連的機器2上配置一條路由:
route add -host 33.33.33.33 gw 2.2.2.1 (2.2.2.1是網絡卡2的IP地址)
效果是什麼?效果就是網絡卡1或者網絡卡2由於某種原因down掉了,只要另一個還up,33.33.33.33這個地址就是可達的,同時33.33.33.33也是提供服務的地址。在這個例子中,網絡卡上配置的1.1.1.1,2.2.2.1這兩個IP地址完全是用於IP路由定址的,而標示主機的33.33.33.33則配置在Loopback介面上。Loopback介面的IP地址被認為只能是最後一跳,因為不能將它用於定址。

10.另一個方案

既然標示主機的IP地址可以全部配置在loopback上,那麼為何不把所有的IP地址都配置在loopback上呢?即物理網絡卡上不再配置任何IP地址,然後配置arp,使得可以回覆本應該配置在物理網絡卡的但是實際上卻配置在loopback上的IP地址的ARP請求,另外直連路由需要從loopback刪除,並重新手工新增在相應的物理網絡卡上。

11.續

Loopback實際上是個hole,但是如果它不是一個hole,它確實可以做一些事,類似Cisco的NVI那樣...           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述