arp协议介绍
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的 MAC 地址。而在 TCP/IP 协议中,网络层和传输层只关心目标主机的 IP 地址。这就导致在以太网中使用 IP 协议时,数据链路层的以太网协议接到上层 IP 协议提供的数据中,只包含目的主机的 IP 地址。于是需要一种方法,根据目的主机的 IP 地址,获得其 MAC 地址。这就是 ARP 协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标 IP 地址转换成目标 MAC 地址的过程。
当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的 MAC 地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过 ARP 协议获得的将不是目的主机的真实 MAC 地址,而是一台可以通往局域网外的路由器的 MAC 地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托 ARP 或 ARP 代理(ARP Proxy)。
还有一种免费 ARP(gratuitous ARP),它是指主机发送 ARP 查询(广播)自己的 IP 地址,当 ARP 功能被开启或者是端口初始配置完成,主机向网络发送免费 ARP 来查询自己的 IP 地址确认地址唯一可用。用来确定网络中是否有其他主机使用了 IP 地址,如果有应答则产生错误消息。免费 ARP 也可以做更新 ARP 缓存用,网络中的其他主机收到该广播则在缓存中更新条目,收到该广播的主机无论是否存在与 IP 地址相关的条目都会强制更新,如果存在旧条目则会将 MAC 更新为广播包中的 MAC。
arp报文组成
- 硬件类型(hard type) 硬件类型用来指代需要什么样的物理地址,如果硬件类型为 1,表示以太网地址
- 协议类型 协议类型则是需要映射的协议地址类型,如果协议类型是 0x0800,表示 ipv4 协议。
- 硬件地址长度 表示硬件地址的长度,单位字节,一般都是以太网地址的长度为 6 字节。
- 协议地址长度: 表示协议地址的长度,单位字节,一般都是 ipv4 地址的长度为 4 字节。
- 操作码 这些值用于区分具体操作类型,因为字段都相同,所以必须指明操作码,不然连请求还是应答都分不清。 1=>ARP 请求, 2=>ARP 应答,3=>RARP 请求,4=>RARP 应答。
- 源硬件地址 源物理地址,如02:f2:02:f2:02:f2
- 源协议地址 源协议地址,如192.168.0.1
- 目标硬件地址 目标物理地址,如03:f2:03:f2:03:f2
- 目标协议地址。 目标协议地址,如 192.168.0.2
ARP 高速缓存
知道了 ARP 发送的原理后,我们不禁疑惑,如果每次发之前都要发送 ARP 请求硬件地址会不会太慢,但是实际上 ARP 的运行是非常高效的。那是因为每一个主机上都有一个 ARP 高速缓存,我们可以在命令行键入 arp -a 获取本机 ARP 高速缓存的所有内容。