ARP协议工作原理

187 阅读4分钟
  • ARP协议工作原理

    • ARP协议能实现任意网络层地址到任意物理地址的转换。(只讨论IP到以太网地址(MAC)的转换)
    • 工作原理:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址,此网络上的所有机器都将收到这个请求,但只有目标机器会回应一个ARP应答,其中包含自己的物理地址。
    • 以太网ARP报文格式(28字节)

      • 硬件类型字段定义物理地址的类型,它的值为1表示MAC地址。
      • 协议类型字段表示要映射的协议地址类型,它的值为0x800表示IP地址。
      • 硬件地址长度字段和协议地址长度字段,顾名思义,其单位是字节。对MAC地址来说,其长度为6;对IP(v4)地址来说,其长度为4。
      • 操作字段指出4种操作类型:ARP请求(值为1)、ARP应答(值为2);RARP请求(值为3)和RARP应答(值为4)。
      • 最后4个字段指定通信双方的以太网地址和IP地址。发送端填充除目的端以太网地址外的其他3个字段,以构建ARP请求并发送之。接收端发现该请求的目的端IP地址是自己,就把自己的以太网地址填进去,然后交换两个目的端地址和两个发送端地址,以构建ARP应答并返回之(当然,如前所述,操作字段需要设置为2)。
      • ARP请求/应答报文的长度为28字节。如果再加上以太网帧头部和尾部的18字节,则一个携带ARP请求/应答报文的以太网帧长度为46字节。不过有的实现要求以太网帧数据部分长度至少为46字节(看上面46~1500),此时ARP请求/应答报文会增加一些填充字节来满足这个要求。在这种情况下一个携带ARP请求/应答报文的以太网帧长度为64字节。
      • tcpdump观察ARP通信过程

          1. 使用arp -a查看ARP高速缓存(ARP高速缓存缓存了经常访问或最近访问的IP到MAC的映射),如果目标已有缓存,使用arp -d ip清理掉,否则看不到ARP请求。(arp -s ip mac可添加缓存)
          1. 开一终端,输入下面指令,抓109到108、108到109的包(统一用他的ip、mac、网口,自己测过知道怎么回事就行)
          1. 再开一终端,输入telnet 192.168.1.109 echo。ARP通信再TCP连接建立之前就完成,因此可以观察 2 的终端中抓到的arp数据包(本质上是以太网帧)

          • 对第一个数据包

            • 其中,第一个mac是源端物理地址;第二个目的端物理地址ff:ff:ff:ff:ff:ff是以太网的广播地址,表示整个LAN(该LAN上所有机器都会收到)
            • 0x0806是以太网帧头部的类型字段的值,表示分用的目标是ARP模块。
            • 该以太网帧长度为42字节(其实是46字节,tcpdump未统计以太网帧尾部4字节的CRC字段),数据部分长度为28字节。
            • Request 表示这是一个ARP请求。
          • 对第二个数据包

            • 第一个mac是源端(也就是Request的目标的mac),第二个是目的端(也就是Request的源端)
            • 以太网帧长60字节(60+4字节),数据部分长46字节。
            • Reply表示这是一个ARP应答,告诉你你要查的IP的物理地址是xxx
          • 则有:以太网帧内容如下。其中ARP的请求和应答是从以太网驱动程序发出的,用虚线画到ARP头上是为了体现它携带ARP数据,与其他以太网帧的不同。

            • 路由器必然也接受到以太网帧1,因为该帧的目的段是广播地址。不过路由器没回应其中的ARP请求。