Files
netstack/tcpip/network/arp
2022-12-30 11:00:56 +08:00
..
2022-11-30 11:31:44 +08:00
2022-12-30 11:00:56 +08:00
2022-11-30 11:31:44 +08:00

arp协议介绍

在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的 MAC 地址。而在 TCP/IP 协议中,网络层和传输层只关心目标主机的 IP 地址。这就导致在以太网中使用 IP 协议时,数据链路层的以太网协议接到上层 IP 协议提供的数据中,只包含目的主机的 IP 地址。于是需要一种方法,根据目的主机的 IP 地址,获得其 MAC 地址。这就是 ARP 协议要做的事情。所谓地址解析address resolution就是主机在发送帧前将目标 IP 地址转换成目标 MAC 地址的过程。

当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的 MAC 地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过 ARP 协议获得的将不是目的主机的真实 MAC 地址,而是一台可以通往局域网外的路由器的 MAC 地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托 ARP 或 ARP 代理ARP Proxy

还有一种免费 ARPgratuitous ARP它是指主机发送 ARP 查询(广播)自己的 IP 地址,当 ARP 功能被开启或者是端口初始配置完成,主机向网络发送免费 ARP 来查询自己的 IP 地址确认地址唯一可用。用来确定网络中是否有其他主机使用了 IP 地址,如果有应答则产生错误消息。免费 ARP 也可以做更新 ARP 缓存用,网络中的其他主机收到该广播则在缓存中更新条目,收到该广播的主机无论是否存在与 IP 地址相关的条目都会强制更新,如果存在旧条目则会将 MAC 更新为广播包中的 MAC。

arp报文组成

  1. 硬件类型(hard type) 硬件类型用来指代需要什么样的物理地址,如果硬件类型为 1表示以太网地址
  2. 协议类型 协议类型则是需要映射的协议地址类型,如果协议类型是 0x0800表示 ipv4 协议。
  3. 硬件地址长度 表示硬件地址的长度,单位字节,一般都是以太网地址的长度为 6 字节。
  4. 协议地址长度: 表示协议地址的长度,单位字节,一般都是 ipv4 地址的长度为 4 字节。
  5. 操作码 这些值用于区分具体操作类型,因为字段都相同,所以必须指明操作码,不然连请求还是应答都分不清。 1=>ARP 请求, 2=>ARP 应答3=>RARP 请求4=>RARP 应答。
  6. 源硬件地址 源物理地址如02:f2:02:f2:02:f2
  7. 源协议地址 源协议地址如192.168.0.1
  8. 目标硬件地址 目标物理地址如03:f2:03:f2:03:f2
  9. 目标协议地址。 目标协议地址,如 192.168.0.2

ARP 高速缓存

知道了 ARP 发送的原理后,我们不禁疑惑,如果每次发之前都要发送 ARP 请求硬件地址会不会太慢,但是实际上 ARP 的运行是非常高效的。那是因为每一个主机上都有一个 ARP 高速缓存,我们可以在命令行键入 arp -a 获取本机 ARP 高速缓存的所有内容。