當主機配置IP及網關地址不在當前網段,報文會發到哪?
哪都去不了,報文應該發不出去。
測試
如下:我當前主機所在網段的網關是172.18.65.1,我本機配置的ip是172.18.65.61。這是沒有問題的,可以正常上網。
現在修改我本機的ip地址172.18.63.61,網關是172.18.63.1,注意:配置的IP與網關兩個地址需要在同一網段,儘管手動配置的靜態ip地址與我當前實際網關(172.18.65.1)不在同一網段。
然後,重啓網卡,使配置生效。
這個時候是上不了網的。
原因
會不會有朋友猜測,報文發出去了,但是到路由器這裏丟了?
實際上應該沒發出去。
接下來我解釋下原因(其實是我自己的一些推測及驗證,如果有解釋不正確的地方,請在評論中及時指正,謝謝)
簡單解釋下請求報文如何尋址。
- 在IP路由表,根據目的ip,可以知道下一跳路由器,或者直達目的網絡接口。
- 基於arp協議,可以找到目的ip映射的mac地址,也就是說這個IP對應的是哪塊網卡(網絡接口),然後從這個網卡發出去。
現在實際情況是修改了IP不在當前網段後,報文發不出去了。
原因我接着往下說:
首先,沒改IP前,看下arp表和路由表:
看標紅框的地方,是網關,比如我打開瀏覽器,訪問百度,這個比喻不合適,因爲報文發不出去,還怎麼解析域名。
但是,現在打個比方,比方我現在向百度的實際IP發一個請求報文,百度的實際IP肯定和上面路由表中的幾個網段不在同一個網段
所以最終會選擇從接口enp3s0發向網關。
好了,現在我把本機IP及本機網關地址配置與當前不在一個網段:
172.18.65.1 -> 172.18.63.1
172.18.65.61 -> 172.18.63.61
這時候看下arp表和路由表:
首先,從路由表中,知道要要到達目的IP(39.156.66.18),當前要先發到網關172.18.63.1,因爲不是直達麼。但是在arp表中,可以看到:172.18.63.1的mac地址呢???
雖然接口是enp3s0,但是現在誰能告訴它,mac地址是多少,要發給誰???因爲沒有目的mac地址,所以這個包最終應當是不會交到物理層的,也就是網卡這裏不會發到物理層。
抓個包可以看到:
我本機(戴爾的一款筆記本)一直在發arp請求,想知道192.18.63.1的mac地址是多少,但是永遠不會收到arp應答。因爲當前網段上根本就不存在這個ip,所以這個包也就發不出去了。
寫在最後,小弟才疏學淺,好多東西怕是還沒掌握,就擔心有理解錯誤的地方,如有問題,請及時指正,不要讓我一直錯下去。好人一生平安。