知识背景:
任何一个主机(或三层网卡)跟目的IP通信的时候,网络层的IP已定,那就是目的IP地址。
但是二层(数据链路层)的地址是未知的,如果没有二层地址是无法封装成一个完整的数据包的。
获取二层mac地址就是ARP协议的一个重要功能。
通常情况下二层的地址有两种可能性:
1.目的IP对应的真实mac
2.自己网关的mac
那么具体的依据是什么呢?且看误区……
常见误区:
同一网段则封装真实IP对应的MAC,不同网段则封装网关的mac。
主机 192.168.1.1 255.255.255.0 gateway 192.168.1.254 跟 192.168.1.2通信时:
1. 根据自己的子网掩码 判断 192.168.1.2 跟自己同一网段
2. ARP 请求 192.168.1.2 的mac地址。
3. 三层封装192.168.1.2 二层封装 192.168.1.2的mac,发送相关数据。
主机 192.168.1.1 255.255.255.0 gateway 192.168.1.254跟 192.168.2.2 通信时:
1. 根据自己的子网掩码 判断 192.168.2.2 跟自己不在同一网段
2. ARP 请求 192.168.1.254(自己的网关) 的mac地址。
3. 三层封装192.168.1.2 二层封装 192.168.1.254(自己网关)的mac,发送相关数据。
分析:
主机 192.168.1.1 255.255.255.0 gateway192.168.1.254
跟 192.168.1.2 通信的时候二层的mac地址封装的是192.168.1.2 对应的mac(真实mac);
跟 192.168.2.2 通信的时候二层的mac地址封装的是192.168.1.254 对应的mac(网关mac);
这个结论是没有错误的,但是原因是错误的
正解:
任何一个主机(或三层网卡)跟目的IP通信的时候,网络层的IP已定,那就是目的IP地址。
但是二层(数据链路层)的地址是未知的,需要用ARP协议去获取。通常情况下二层的地址有两种可能性:
1.目的IP对应的真实mac
2.自己网关的mac
最终选用哪个mac地址,并不是靠判断目的IP是否跟自己同一网段,而是靠查看路由表:
1.如果目的IP对应的路由的下一跳是出接口(仅有出接口),则ARP请求目的IP的mac。
2.如果目的IP对应的路由的下一跳是一个IP地址,则ARP请求下一跳IP的mac。
歪打正着原因:
直连路由的下一跳是都物理接口,跟自己同一网段的目的IP地址通常被直连路由匹配上。
实验反驳:
1. 同一网段,也可以ARP请求网关的mac,用来封装二层。
在如下拓扑以及配置下:192.168.1.1 跟192.168.1.2 通信的时候会请求 192.168.1.254 的mac
原因:
192.168.1.2这个目的ip被标红的路由条目优先匹配,而该路由条目的下一跳是192.168.1.254
Gateway of lastresort is 192.168.1.254 to network 0.0.0.0
192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.1.0/24 is directly connected, Ethernet0/0
S 192.168.1.2/32 [1/0] via192.168.1.254
S* 0.0.0.0/0 [1/0] via 192.168.1.254
2. 不同网段,也可以直接ARP请求真实IP的mac,用来封装二层。
在如下拓扑以及配置环境下:
192.168.1.1 跟 192.168.2.2通信的时候会直接请求 192.168.2.2 的mac
原因:
192.168.2.2这个IP地址被如下标红路由条目优先匹配,而该条目的下一跳仅有出接口。
Gateway of last resort is192.168.1.254 to network 0.0.0.0
C 192.168.1.0/24 is directly connected, Ethernet0/0
S 192.168.2.0/24 is directly connected,Ethernet0/0
S* 0.0.0.0/0 [1/0] via 192.168.1.254
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。