当主机配置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,所以这个包也就发不出去了。
写在最后,小弟才疏学浅,好多东西怕是还没掌握,就担心有理解错误的地方,如有问题,请及时指正,不要让我一直错下去。好人一生平安。