冲突域:在同一个冲突域中的每一个节点都能收到所有被发送的帧。通常来说一个局域网就是一个广播域。
广播域:网络中能接收任一设备发出的广播帧的所有设备的集合
冲突域是基于第一层(物理层)
广播域是基于第二层(链路层)
网桥、交换机可以隔离冲突域,交换机所有端口各单独有一个冲突域,默认都在同一个广播域里,通过划分vlan可以划分不同广播域
路由器可以隔离广播域
ARP协议位于TCP/IP的网络层,与IP协议都位于网络层
ARP报文和IP协议等网络层协议都被封装在以太网的帧中,帧的协议类型字段指出此帧所携带的数据是ARP报文还是IP报文
ARP报文是由以太网帧进行封装传输的,没有封装进IP报文,
所以ARP报文中携带的目的IP、源IP、目的MAC、源MAC不是封装此ARP报文的帧的MAC头的地址,更不是IP报文头的源IP和目的IP
ARP请求/应答报文中的目的IP、源IP、目的MAC、源MAC始终是请求/应答双方的地址(请求时暂无目的MAC时填全0的MAC)
查看ARP报文的报文格式
[同网段]
局域网net_A中的主机host_A第一次与同一局域网中刚上线的主机host_E通信
net_A(192.168.111.0/24),host_A(192.168.111.11/24),host_E(192.168.111.33/24)
要与对方通信,至少要知道对方的IP地址,即目的IP。主机host_E的IP地址作为已知的目的IP
(1)主机host_A先判断自己与主机host_E是否在同一个网段。
host_A将本机IP地址192.168.111.11与本机子网掩码255.255.255.0按位与,得到网段(192.168.111.0);
host_E将本机IP地址192.168.111.33与本机子网掩码255.255.255.0按位与,得到网段(192.168.111.0);
host_A与host_E位于同一局域网中
(2)主机host_A根据主机host_E的IP地址,查找本机的ARP表,(添加ARP表截图)
由于主机host_E刚上线,从未与主机host_A通信过,
所以主机host_A的ARP表中没有主机host_E的IP地址对应的MAC地址,即没有找到主机host_E的MAC地址
(3)主机host_A构造ARP请求报文并封装在广播帧中,向局域网net_A中的所有主机发送广播帧
[广播帧]:
“帧类型”字段指出此帧所携带的数据是ARP报文
源MAC为host_A的MAC地址
目的MAC为广播帧特定MAC地址FF:FF:FF:FF:FF:FF
注:ARP是独立的三层协议,封装以太帧时直接在ARP报文外封装MAC源/目的地址即可,不需要经过IP协议封装
[广播帧中的ARP报文]:
ARP报文类型字段op指出此ARP报文类型为:请求
本端host_A的源IP是192.168.111.11,源MAC地址是11:22:33:44:55:66
对端host_E的目的IP是192.168.111.33,它的MAC地址是多少。请求时暂无目的MAC时填00:00:00:00:00:00
(4)广播帧送达目的主机host_E,host_E构造单播帧向请求方host_A应答本机MAC地址
局域网net_A中的所有主机均收到此广播帧,剥掉广播帧头,解析其中的ARP请求报文,目的IP与自身IP不匹配,将此帧丢弃。
主机host_E解析出此广播帧中ARP请求报文的目的IP地址与本机IP地址一致,更新自身的ARP表:
将host_A的IP地址与host_A的MAC地址作为一条ARP表项,添加到本机的ARP表中
(ARP条目192.168.111.11---11:22:33:44:55:66)
主机host_E构造ARP应答报文,封装在单播帧中,以单播的方式将帧发送给host_A
[单播帧]:
“帧类型”字段指出此帧所携带的数据是ARP报文
源MAC为host_E的MAC地址
目的MAC为host_A的MAC地址
注:封装以太帧时直接在ARP报文外封装MAC源/目的地址即可,不需要经过IP协议封装
[单播帧中的ARP报文]:
ARP报文类型字段op指出此ARP报文类型为:应答
本端host_E的源IP是192.168.111.33,告知本机的MAC地址为aa:bb:cc:dd:ee:ff
对端host_A的目的IP是192.168.111.11,目的MAC地址是11:22:33:44:55:66
(5)host_A收到此单播帧后,解析出ARP报文的内容,更新自身的ARP表
增加ARP条目192.168.111.33--aa:bb:cc:dd:ee:ff
至此,host_A与host_E可以通信
[不同网段]
局域网net_A中的主机host_A第一次与局域网net_B中的主机host_E通信
net_A(192.168.111.0/24),host_A(192.168.111.11/24),
net_B(192.168.44.0/24),host_E(192.168.44.77/24)
要与对方通信,至少要知道对方的IP地址,即目的IP。主机host_E的IP地址作为已知的目的IP
(1)主机host_A先判断自己与主机host_E是否在同一个网段
host_A将本机IP地址192.168.111.11与本机子网掩码255.255.255.0按位与,得到网段(192.168.111.0);
host_E将本机IP地址192.168.44.77与本机子网掩码255.255.255.0按位与,得到网段(192.168.44.0);
host_A与host_E位于不同的局域网中
host_A查找自己的路由表,没有找到目的IP的条目
(2)主机host_A需要借助默认网关Gateway_1与不同局域网的主机host_E通信
主机host_A查找本机ARP表,找出默认网关Gateway_1的IP地址(192.168.111.1/24)对应的MAC地址,
查到结果为网关Gateway_1的MAC地址为1a:1b:1c:1d:1e:1f
(若没有此ARP条目,则按照上述[同网段]情景发送ARP请求)
网关是位于主机所在网络边界的具有路由功能的设备,可以是路由器、启用了路由协议的服务器
主机host_A将对host_E的ARP请求封装在以太帧中,发给默认网关Gateway_1
帧的MAC地址为网关Gateway_1的MAC地址为1a:1b:1c:1d:1e:1f
网关解出ARP请求的目的IP属于另一个网段,查找路由表,查找通往目的IP的下一跳IP
若网关是路由器Router_1
由连接在局域网net_A中的路由器Router_1接口interface_1接收,然后路由器Router_1查找其路由表(转发面),
找到此ARP请求的目的IP与interface_2所连接的局域网net_B同网段,
则由路由器Router_1查找interface_2接口所在局域网net_B的ARP表,若无对应ARP条目,
则由路由器Router_1(代替host_A)在局域网net_B构造封装了此ARP请求的广播帧
[广播帧]:
帧的类型字段指出此帧所携带的数据是ARP报文(不是IP报文)
源MAC为Router_1上interface_2接口的MAC地址
目的MAC为广播帧特定MAC地址FF:FF:FF:FF:FF:FF
[广播帧中的ARP报文]:
请求的目的IP是192.168.44.77(host_E),它的MAC地址是多少,请求时暂无目的MAC时填00:00:00:00:00:00
请求的源IP是192.168.111.11(host_A),源MAC地址是host_A的MAC地址11:22:33:44:55:66
由interface_2接口向局域网net_B发送封装了ARP请求的广播帧,查找host_E的MAC地址
(3)主机host_E发送封装了ARP应答的单播帧
主机host_E收到封装了此ARP的广播帧后,剥掉帧的MAC头,取出ARP报文,从ARP报文取出目的IP,匹配自己的IP,
然后发送封装了ARP应答的单播帧
[单播帧]:
“帧类型”字段指出此帧所携带的数据是ARP报文
源MAC为主机host_E的MAC地址
目的MAC是interface_2接口的MAC
注:封装以太帧时直接在ARP报文外封装MAC源/目的地址即可,不需要经过IP协议封装
[单播帧中的ARP报文]:
本端host_E的源IP是192.168.111.33,告知本机的MAC地址为aa:bb:cc:dd:ee:ff
对端host_A的目的IP是192.168.111.11,目的MAC地址是11:22:33:44:55:66
注:ARP请求/应答报文中的目的IP、源IP、目的MAC、源MAC始终是请求/应答双方的地址(请求时暂无目的MAC时填全0的MAC)
(4)路由器Router_1解析局域网net_B的单播帧,识别ARP应答,将此ARP应答封装二层MAC头,构造局域网net_A的单播帧并发送
路由器Router_1收到后,解包识别帧中携带ARP应答报文的目的IP,发现此IP在interface_1接口的局域网net_A中,
再在局域网net_A中构造封装了此ARP应答报文单播帧
[单播帧]:
“帧类型”字段指出此帧所携带的数据是ARP报文
源MAC地址是路由器Router_1接口interface_1的MAC地址
目的MAC是主机host_A的MAC地址
[单播帧中的ARP报文]:
本端host_E的源IP是192.168.111.33,告知本机的MAC地址为aa:bb:cc:dd:ee:ff
对端host_A的目的IP是192.168.111.11,目的MAC地址是11:22:33:44:55:66
主机host_A此ARP的单播帧后,剥掉帧的MAC头,解析ARP应答报文,从ARP报文取出目的IP,匹配自己的IP,更新本机ARP表
至此,host_A与host_E可以通信