网络基础:ARP协议

ARP 协议

ARP 协议是一个介于数据链路层与网络层之间的协议。其作用是建立了主机 IP 地址和 MAC地址的映射关系。在进行网络通讯的时候,源主机只能够知道目的主机的 IP 地址和端口号,却并不知道目的主机的 MAC 地址。而数据包是由网卡接收到,再去向上传输给上层协议处理的,如果接收的数据包的MAC地址与本机的不同,那么直接丢弃掉该数据包。所以在这之前,必须要知道目的主机的 MAC 地址,而根据 IP 地址得到对应的 MAC 地址就是由 ARP 协议完成的。

ARP 数据包的格式

这里写图片描述

  • 以太网目的地址与以太网源地址:这两个字段分别是这个网段的广播的MAC地址即(ff:ff:ff:ff:ff:ff)与发送ARP请求的主机的MAC地址。
  • 帧类型:代表着后面数据的类型,ARP帧的值为 0806
  • 硬件类型:指的是链路层网络类型, 1 为以太网
  • 协议类型:指要转换的地址类型。IP地址为 0800
  • 硬件地址长度与协议地址长度:硬件地址长度对于以太网来说就是 MAC地址,为 6 个字节,协议地址长度对于 IPv 4 为 4 个字节
  • op:这个字段表示该 ARP 协议是请求还是应答,如果是请求 op 为 01,如果是应答 op 为 10
  • 发送端以太网地址与发送端 IP 地址:这里的发送端以太网地址就是发送请求的主机的 MAC地址,IP就是其 IP 地址
  • 目的以太网地址与目的 IP 地址:目的以太网地址在 ARP 请求时不填,目的 IP 地址是已知的,就是目的主机的 IP 地址

过程

ARP请求与响应

一台主机 A 要想给主机 B 发送数据,发送前是知道主机 B 的 IP 地址,并不知道其 MAC 地址,所以在通信之前,要先对主机 B 发送 ARP 请求,来得到主机 B 的 MAC 地址。发送 ARP 请求的过程与发送一个正常数据是一样的,不过发送正常数据是直接发送至目的主机,而发送 ARP 请求是发送至目的网段的广播(因为一个网段的广播地址都是 ff:ff:ff:ff:ff:ff),经过广播进行发送给网段内全部主机,接着网段内的所有主机都会收到这条消息。网段内的每个主机都会取走这个数据,并向上交付,当这些主机解析这个数据的时候,首先看目的 IP 地址是否与自己的一致,如果不一致那么直接丢弃。如果一致,证明该数据是发送给自己的,所以接收,然后再看 op 字段,观察这个字段是什么,如果是 1 ,代表 ARP 请求。

如果发现是 ARP 请求,那么此时该主机向发起 ARP 请求的主机发送 ARP 响应,此时在 ARP 的响应中,已经有了目的主机的 IP 地址,以及 MAC 地址,所以在 ARP 响应的时候,该数据包能够直接发送到达目的主机。一次 ARP 响应后,两个主机都互相知道了对方的 MAC 地址,并且将这个 MAC 地址保存至 ARP 缓存表,在 Linux 下可以用 arp -a来进行查看。
这里写图片描述

在这个缓存表内部,保存着对应主机的 IP 地址与 MAC 地址。但是,这个表中的数据是有过期时间的,过期时间为 20 分钟,如果在 20 分钟内,没有再次使用该表中的某个内容, 那么该内容就失效。


欢迎大家共同讨论,如有错误及时联系作者指出,并改正。谢谢大家!

猜你喜欢

转载自blog.csdn.net/liuchenxia8/article/details/80652780