ARP协议(同一网段)
一:查看arp表
当主机A要与主机B通信时,需要主机B的MAC地址,以便在数据链路层进行数据封装,此时会查询自己主机内的arp表中有没有和主机B的IP:10.1.1.2/24相对应的MAC地址,如果没有,此时需要用arp协议来获取目标主机的MAC地址。
二:发送ARP请求包(是否执行看第一步骤)
此时主机A发送一个帧(arp请求包同时也是一个广播包):
帧头中目的MAC地址为全F的广播地址,源MAC为主机A的MAC。
ARP部分(为一个请求包 ):目的IP为主机B的IP地址
源IP为主机A的IP地址
由于目的MAC不知道所以为全0的MAC地址
源MAC为主机A的MAC地址
三:发送过程(交换机)
交换机接收到ARP请求包,解封装看到帧头的目的MAC为全F的广播MAC,中所以向所有与之相连的网络设备转发该包(主机B和主机C)并且将主机A的MAC记录到交换机的ARP缓存表,主机B解封装发现目的IP不是主机B的IP,所以将该包丢弃。主机C比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
四:ARP响应
主机C接收到来自主机A的ARP请求包后,将请求包中主机A的IP和对应的MAC记录到主机C的ARP缓存表中,然后发送一个ARP响应包,此时在ARP缓存表中已经有了主机A的MAC信息,所以响应包不再是广播包而是以单播包的形式发送
响应包帧头中:主机C的MAC是源MAC地址
主机:主机A的MAC地址是目的MAC地址
ARP部分:目的IP是主机A的IP地址
源IP是主机C的目的地址
目的MAC和源MAC与帧头一致
响应包的转发过程和请求包的几乎一致,都有解封装,记录MAC,再转发(不再是广播而是单播)主机A收到后,解封装看到目的IP是自己的IP收下,把主机C的MAC记录到ARP缓存表。
不同网段
当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。
当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。
如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。
ARP报文格式
ARP是一个独立的三层协议,所以ARP报文在向数据链路层传输时不需要经过IP协议的封装,而是直接生成自己的报文,其中包括ARP报头,到数据链路层后再由对应的数据链路层协议(如以太网协议)进行封装。ARP报文分为ARP请求和ARP应答报文两种,它们的报文格式可以统一为下图所示。
1>硬件类型:占两字节,表示ARP报文可以在哪种类型的网络上传输,值为1时表示为以太网地址。
2>上层协议类型:占两字节,表示硬件地址要映射的协议地址类型,映射IP地址时的值为0x0800。
3>MAC地址长度:占一字节,标识MAC地址长度,以字节为单位,此处为6。
4>IP协议地址长度:占一字节,标识IP得知长度,以字节为单位,此处为4。
5>操作类型:占2字节,指定本次ARP报文类型。1标识ARP请求报文,2标识ARP应答报文。
6>源MAC地址:占6字节,标识发送设备的硬件地址。
7>源IP地址:占4字节,标识发送方设备的IP地址。
8>目的MAC地址:占6字节,表示接收方设备的硬件地址,在请求报文中该字段值全为0,即00-00-00-00-00-00,表示任意地址,因为现在不知道这个MAC地址。
9>目的IP地址:占4字节,表示接受方的IP地址。
ARP报文不是直接在网络层上发送的,它还是需要向下传输到数据链路层,所以当ARP报文传输到数据链路层之后,需要再次进行封装。以以太网为例,ARP报文传输到以太网数据链路层后会形成ARP帧。ARP帧如下图所示,他就是在ARP报文前面加了一个以太网帧头。
以太网帧头的三个字段说明
1>目的MAC地址:占6字节,如果是ARP请求帧,因为它是一个广播帧,所以要填上广播MAC地址(FF-FF-FF-FF-FF-FF),其目标主机是网络上的所有主机。
2>源MAC地址:占6字节,这是发送ARP帧的节点MAC地址。
3>帧类型:占两字节,这里用来标识帧封装的上层协议,因为本帧的数据部分是ARP报文,所以直接用ARP的协议号0x0806表示就可以了。
ARP映射表
无论是主机,还是交换机都会有一个用来缓存同一网段设备IP地址和MAC地址的ARP映射表,用于数据帧的转发。设备通过ARP解析到目的MAC之后,将会在自己的ARP映射表中增加IP地址到MAC地址的映射表,以用于后续到同一目的地数据帧的转发。ARP表项分为动态ARP表项和静态ARP表项。
动态ARP表项
动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,也可以被静态ARP表项所覆盖。当到达老化时间或接口关闭时会删除相应的动态ARP表项。
静态ARP表项
静态ARP表项通过手工配置(通过对应设备的IP地址与MAC地址绑定命定进行)和维护。不会被老化,也不会被动态ARP表项覆盖。配置静态ARP表项可以增加通信的安全性,因为静态ARP可以限定和指定IP地址的设备通信时只使用指定的MAC地址(也就是我们通常所说的IP地址和MAC地址的绑定),此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间正常通信。静态ARP表项又分为短静态ARP表项和长静态ARP表项
短静态ARP表项
在配置短静态ARP表项时,只需要配置IP地址和MAC地址项。如果出接口是三层以太网接口,短静态ARP表项可以直接用于报文转发;如果出接口是VLAN虚接口,短静态ARP表项不能直接用于报文转发,当要发送IP数据包时,先发送ARP请求报文,如果收到的相应报文中的源IP地址和源MAC地址与所配置的IP地址和MAC地址相同,则将接受ARP响应报文的接口加入该静态表项中,之后就可以用于IP数据包的转发了。
长静态ARP表项
在配置长静态ARP表项时,除了配置IP地址和MAC地址项外,还必须配置该ARP表所对应的VLAN(虚拟局域网)和出接口。也就是长静态ARP表项同事绑定了IP地址、MAC地址、VLAN和端口,可以直接用于报文转发。
来源:CSDN
作者:piterous
链接:https://blog.csdn.net/piterous/article/details/104557120