认识ARP协议

目录

一、为什么需要ARP协议?

二、ARP报文的格式

三、主机X发送ARP请求的过程

1、填充ARP报文

2、链路层封装ARP报文

3、发送ARP请求

四、IP地址和Mac地址的映射表


ARP协议并不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。简单来说,ARP协议能够获取到局域网内指定一台主机的MAC地址。

认识ARP协议_第1张图片

一、为什么需要ARP协议?

假设主机X通过查询路由表知道自己要给路由器A发送报文,经过IP层封装传递到数据链路层,现在数据链路层准备加上自己的报头,但是发现自己并不知道路由器A的Mac地址,仅仅知道路由器A的IP地址。

因此,在将报文转发给路由器A之前,需要先通过ARP协议获取到路由器A的Mac地址。

认识ARP协议_第2张图片

 

二、ARP报文的格式

我们在认识MAC帧格式的时候,有一个“类型”字段,当该字段填入 0800 的时候,“数据”字段填入的是 网络层传递下来的IP数据包;当该字段填入 0806 的时候,“数据”字段填入的是 ARP报文(长度为28个字节,PAD是填充字段,因为“数据”字段至少需要46个字节)

认识ARP协议_第3张图片

字段名 字段解析
硬件类型 指的是链路层网络类型。1为以太网
协议类型 指的是要用于交换的地址类型,0x0800代表IP地址,也就说我们想要用IP地址来换MAC地址
硬件地址长度 如果硬件类型填的是以太网,这里填的就是 6,即以太网的地址长度(MAC地址的长度)
协议地址长度 如果协议类型填的是0x0800(IP地址),这里填的就是 4
op 字段为1代表ARP请求,字段为2代表ARP应答
发送端以太网地址
发送端IP地址
目的以太网地址 发送ARP请求的时候,因为不知道对方的MAC地址,这个地方填 FFFFFF
目的IP地址

 

三、主机X发送ARP请求的过程

1、填充ARP报文

按照上述表格里所提示的,依次填充对应的字段

  • 硬件协议我们填的是 1(以太网);
  • 协议类型填的是 0x0800(IP地址);
  • 硬件地址长度是 6;
  • 协议地址长度是 4;
  • op是 1(ARP请求);
  • 发送端以太网地址假设是MacX;
  • 发送端IP地址是 IPX;
  • 目的以太网地址因为不知道,填全F(FF:FF:FF:FF:FF:FF);
  • 的IP地址根据路由表查询得到,假设是IPB。

认识ARP协议_第4张图片

2、链路层封装ARP报文

从最开始的图来看,ARP在到达物理层之前,还需要经过链路层封装一层报头。

  • 目的地址填的是目标设备的Mac地址,但是不知道对方的Mac地址,填入FF:FF:FF:FF:FF:FF表示广播。
  • 源地址填的是当前主机X的Mac地址,假设是MacX
  • 类型当然是 0806(表示ARP请求)

 

 3、发送ARP请求

因为Mac帧的目的地址填的是 FF:FF:FF:FF:FF:FF,代表在当前局域网内广播,此时当前局域网的每台主机都会收到这个ARP请求,此时就会将ARP请求解包向上交付给ARP协议。如果收到ARP请求的主机发现目的IP地址不匹配,就会直接丢弃这个报文。

那么会继续处理这个请求的只有路由器A了,由于每台主机都有可能收到ARP请求或者ARP响应,因此,路由器A要做的第一件事是先看op字段,发现收到的是ARP请求,此时就会构建ARP响应返回给主机X。

认识ARP协议_第5张图片

 

四、IP地址和Mac地址的映射表

主机X通过ARP协议获取到目标设备的Mac地址以后,主机X会维护路由器A的IP地址和Mac地址的映射关系,方便下一次使用。

在命令行中输入 arp -a,展示的就是IP地址和Mac地址的映射表。新增的映射关系是有时间限制的,间到了就会将保存的映射关系清除,下次需要MAC地址的时候重新请求MAC地址。

认识ARP协议_第6张图片

你可能感兴趣的:(Linux,基础,网络,服务器,网络协议)