1. 程式人生 > >沒有IP地址的主機如何保持IP層聯通

沒有IP地址的主機如何保持IP層聯通

協議 .net sdn 最短路 排版 ner 不可達 報文 兩臺

在《兩臺不同網段的PC直連是否可以相互ping通》一文中,我有點像在玩旁門左道,本文中,我繼續走火入魔。兩臺機器,M1和M2,各自有一個網卡eth0,配置如下:
M1的配置:
eth0上不配置任何IP地址。
M2的配置:
eth0上不配置任何IP地址。
....
爆炸,機器上都沒有IP地址,通個毛線球啊!!
我只是想在7年後進一步闡述一個常識,即能否互通,路由是根本。在7年前的2010年,我寫了一篇文章《關於IP網段間互訪的問題—路由是根本》,在前段時間,我寫了一篇類似的《兩臺不同網段的PC直連是否可以相互ping通》,7年了,好似沒有任何進步,除了文章排版好看了些,唉,也是沈醉,但不妨礙我更進一步。
我依然想用M1的1.1.1.1來ping M2的2.2.2.2,但卻不把這兩個地址配置在M1和M2上,怎麽辦?很簡單,配置路由即可。配置如下:
M1的配置:

ip route add local 1.1.1.1/32 dev eth0
ip route add 2.2.2.2/32 dev eth0 scope link 或者 ip route add 2.2.2.2/32 via 2.2.2.2 dev eth0 onlink

M2的配置:
ip route add local 2.2.2.2/32 dev eth0
ip route add 1.1.1.1/32 dev eth0 scope link 或者 ip route add 1.1.1.1/32 via 2.2.2.2 dev eth0 onlink

試試看,在M1上來ping 2.2.2.2,盡情互通吧。
看到了吧,沒有配置任何IP地址,只配置了路由即可互通,以上配置中,local路由指示了本機接收哪些數據包,而onlink路由則可以直接arp目標。兩條路由非常好理解。
如果是轉發設備,需不需要local路由呢?答案是需要的。也許你會問,作為轉發設備,沒有任何數據包要到本地啊,為什麽還要local路由呢?這麽理解是對的,然而你忽略了arp。
不過如果你的鏈路層不是以太網,而是點到點的noarp鏈路的話,那麽作為轉發設備而言,local路由則不再需要。
--------------------
看了這個例子之後,也許你會問,那麽IP地址的意義何在?說實話,IP地址的意義僅兩點:
1.標識節點。
2.幫配置該IP的節點生成幾條路由項:
2.1.標識自身的local路由;
2.2.標識子網的廣播路由;
2.3.標識鏈路的鏈路層路由,即scope link路由;

看到了嗎?如果說你不需要標識主機,只是為了通信,那麽當你可以手工配置上述三種路由之後,也就根本不需要IP地址了。
--------------------
其實,IP路由這東西,沒什麽太多的知識在裏面,關鍵看玩法。高端的玩法,可以搞搞算法,搞搞最短路徑,生成樹啥的,中端點的可以玩玩協議,BGP,IS-IS,OSPF啥的精通了也夠裝逼了,屌絲一點的,就像我這種,折騰下邊緣點的東西,幫看到我文章的出點變態點的面試題,就很滿足了。哈哈。
說了這麽多,路由是根本!沒有顯示bind的TCP listener怎麽知道bind哪個地址?靠路由。UDP報文怎麽填充源地址?靠路由。ARP怎麽處理?靠路由...

溫州皮鞋,下雨進水不會胖!奧康,意爾康,紅蜻蜓,日泰,吉爾達,惠特,蜘蛛王,康奈,報喜鳥,這些溫州皮鞋牌子,你們都懂嗎?你們穿過嗎?會穿嗎?

補充:
在M1上,如果你如下敲入配置:
ip route add 20.2.2.2/32 via 4.4.4.4 dev eth0
將會怎樣?很顯然,會提示網絡不可達。如何解決?首先你要知道為何網絡不可達?很顯然系統不知道4.4.4.4在哪裏,而你既然想讓4.4.4.4成為到達20.2.2.2的下一跳,那它一定在M1的鏈路上,那麽好辦,配一條到達4.4.4.4的link路由即可:
ip route add 4.4.4.4/32 dev eth0 scope link
接下來,繼續配置ip route add 20.2.2.2/32 via 4.4.4.4 dev eth0,你將看到自己的微笑。
想互通,路由是根本!

--------------------
7年前的《關於IP網段間互訪的問題—路由是根本》有個評論,問了個問題:
arp不是直接調用鏈路層嗎?對M1來說,就算不設置到M2的路由,也應該回答M2發出來的arp解析請求啊。但通過抓包看到M1的確沒有回答,這是為什麽呢?
直到幾天前我才看到並給了回答,估計問問題的不會再看到了,所以我把我的回答貼出來:
將M1收到M2的arp請求的那個網卡的rp_filter配置成0就可以回復M2的arp請求了。

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow

沒有IP地址的主機如何保持IP層聯通