一、ARP协议
ARP:地址解析协议。在IP以太网中,当一个上层协议要发包时,有了目的主机的IP地址,ARP协议该目的主机的MAC地址。
在发包时,首先要封装第三层(网络层)和第二层(数据链路层)的报头,但是协议只知道目的主机的IP地址,不知道其MAC地址。
在网络通讯中,源主机只知道目的主机的IP地址和端口号,不知道其MAC地址。而数据包首先是被网卡接收到再去处理上层协议。如果接收到的数据包的MAC地址与本机不符,则直接丢掉。因此,在通讯前,必须知道目的主机的MAC地址,ARP协议就起到了这个作用。
对于以太网,数据链路层是根据48bit的以太网地址来确定目的接口,设备驱动程序从不检查IP数据报中的目的IP地址,ARP为IP地址到MAC地址之间提供映射。ARP只限于局域网。
1.原理:ARP协议只适用于局域网
1)在局域网中,网络中传输的实际是”帧“,帧里面带有目的主机的MAC地址
2)在局域网中,一台主机要和另一台主机通信时,必须要知道目的主机的MAC地址。而目的主机的MAC就是通过ARP协议获得的。所谓”地址解析“就是源主机在发送帧之前将目的主机的IP地址转换为其MAC地址的过程。
3)ARP协议的功能就是通过目的主机的IP地址查询目的主机的MAC地址。
2.工作过程
1)当主机A向本局域网内的主机B发送IP数据包时,主机A先在ARP缓存表中查看是否有B的IP地址。
2)如果有,就得到主机B的MAC地址,将B的MAC地址写入到数据帧中,通过以太网将数据包发送到目的主机上。
3)若查不到B的IP地址。主机A自动运行ARP协议
a)ARP在本地局域网中广播一个ARP请求协议。意思是:我的IP是192.168.1.1,我的MAC是....,我想知道IP为192.168.1.2的MAC地址
b)在本局域网内所有的主机都运行ARP协议。
c)主机B在ARP请求包中见到了自己的IP,就向A发送一个ARP应答包,并写入自己的MAC地址。其余的所有的主机都不理睬这个ARP请求包。 ARP请求包是广播 的,但是ARP应答包是单播的。
d)主机A收到ARP应答包后,将主机B的IP和MAC地址写入到ARP缓存表中。
3.帧格式
以太网地址:目的主机的MAC地址。全为1的MAC地址是广播地址
以太网源地址:源主机的MAC地址
帧类型:对于ARP协议,该字段为0x0806,。对于RARP协议,该字段为0x8035
硬件类型:表示MAC的类型,值为1表示以太网地址。也就是说ARP还支持别的链路层协议
协议类型:表示要映射的协议类型。值为0x0800表示IP协议
硬件地址长度:与硬件类型对应的硬件地址长度,以字节为单位,若是以太网,则为6字节,MAC地址
协议地址长度:与协议类型对应的协议地址长度。以字节为单位,若是IP协议,则为4字节。
op:操作类型。1:ARP请求,2:ARP应答,3:RARP请求,4:RARP应答
发送端以太网地址:如果是以太网,则是源主机的以太网源地址
发送端IP地址:若是IP协议,则为源主机的IP地址
目的以太网地址:若是以太网,则为目的端的以太网地址
目的IP地址:目的端的IP地址
ARP请求包是广播的,但是ARP应答包是单薄的。
4.ARP命令
用 arp -a 可查看arp的缓存表
用 arp -d 可删除
用 arp -s ip mac 可向arp表中添加
5.特殊情况
ARP是解决同一个局域网中的主机或者路由器的IP与MAC的映射问题。若目标设备和源主机不在同一个局域网中
1)主机A无法解析出主机B的MAC地址
2)此时主机A需要将路由器R1的地址解析出来,将IP数据包发送给R1
3)路由器R1找出下一跳R2,同时使用ARP协议解析出R2的MAC地址。于是将数据包按照R2的MAC地址转发给R2。
4)路由器R2使用同样的方法,获取B的MAC地址,最终将数据包转发给B。
6.ARP其它方面
a)ARP欺骗
b)IP冲突