直連的不同網段的兩臺主機要如何ping通

今天我們來看一下,如何讓兩臺直連的主機,配置不同網段的ip地址後,還可以ping通。同時從中可以瞭解些什麼?

環境配置

準備兩臺電腦,系統是Ubuntu的,用一根網線把它們的網路介面連起來

在Ubuntu的終端下配置它們的ip地址:

A主機的本地網絡卡eth0配置192。168。1。100/24

B主機的本地網絡卡eth0配置192。168。3。100/24

開啟B主機的wireshark抓包工具,在本地網絡卡eth0上抓包

執行步驟

我把所有的步驟和現象畫成了上面的流程圖,這麼貼心的作者不應該給個三連嗎?

首先在終端下用ifconfig配置好兩臺主機的ip地址後,在A主機的終端視窗下直接ping B主機的ip地址192。168。3。100,發現並沒有ping通,A主機的終端下顯示:connect:Network is unreachable

我們知道:

A想要發icmp請求,首先icmp請求報文必須是一條完整的報文

一般發出的報文缺的是什麼?

目的MAC地址

所以A必須先發廣播ARP請求,但是B並沒有收到ARP請求

A和B是直連的,它們也沒有路由器隔絕廣播報文,為什麼B沒有收到廣播ARP請求呢?

AB直連,應該不存在在中途丟失的可能,B又沒收到,那麼也就是說只有一種可能,A的ARP根本沒有發出去,為什麼沒有發出去?

因為它根本沒有找到發出去的路徑,它不知道發給目的ip為192。168。3。100的報文應該從哪個網路介面發出

為什麼不知道?是因為它在路由表裡沒有找到匹配的路由規則。這也就是為什麼A主機會顯示:connect:Network is unreachable的原因

所以第二步

在A的路由表裡新增一條路由規則,發給192。168。3。0/24網段的所有報文都要從網絡卡eth0發出去,這樣就能讓一條完整的報文從指定的網路介面發出去

此時再次執行ping操作,A由於不知道B的MAC地址,會先發廣播ARP請求

廣播ARP請求是完整的嗎?是的

為什麼?

因為目的MAC地址是有的,廣播MAC地址

完整的報文如果想發出去,要去路由表裡找匹配的規則,發給目的ip 192。168。3。100的報文能匹配到嗎?

可以的,因為在上一步加了一條規則,所有發給192。168。3。0/24網段的報文從網絡卡eth0發出去,所以廣播ARP報文就可以發出去了

發是發出去了,那能到達B主機嗎?

由於是直連,當然可以

試想一下,如果A和B是用路由器連線,能到達B嗎?肯定到不了,為什麼?因為路由器隔絕廣播報文

主機B收到了A的廣播ARP請求報文,但是卻沒有回覆ARP響應,為什麼?

和之前的A主機發不出去ARP請求一樣,B想發ARP響應,但是在路由表裡沒有找到路由規則,去往192。168。1。0/24網段的路由規則

所以第四步

B主機也要新增一條路由規則,發給192。168。1。0/24網段的所有報文都要從網絡卡eth0發出去,這樣就能讓一條完整的報文從指定的網路介面發出去

此時A主機再次ping B主機,發現能ping通了,B主機上抓包可以看到,首先A主機發來了ARP請求,B主機ARP協議層自動回覆了ARP響應,接著A又發來了icmp請求,B主機的icmp協議層又自動回覆了icmp響應

由此,A和B的ip地址雖然不同網段,但是直連的它們還是可以通訊的

那再思考一個問題:

直連的兩臺主機如果ip地址同網段,可以ping通,這是毫無疑問的,但是也沒有手動新增路由規則啊,為什麼就可以ping通?

那是因為當你的主機網絡卡在配置ip地址時,系統就自動地把“這個ip的網段和這個網絡卡”作為規則新增到路由表裡了

總結

一條報文如果想發出去,必須確保是完整的報文,這也就是說它的源ip、源mac、目的ip、目的mac必須是有的,然後還要根據它的目的ip匹配路由表,確定要從哪個網絡卡發出,有了這些,報文就會從網絡卡發出去

發出去的報文,如何準確發到目的主機,由網路上的交換機和路由器等決定

廣播報文的廣播域,並不是指源主機同網段的所有主機,而是隻要沒有路由器隔絕,就能發給所有連線的其他主機的區域,廣播域和ip地址無關