这是目录
1 ARP
1.1 抓包过程
- 打开Wireshark,左键两下“以太网”(有线就选以太网,无线就选择WLAN)
- 在过滤器中输入“arp”来实现报文过滤
- 如果没看到ARP报文,可以先以管理员身份打开 Power Shell
- 然后输入arp -d 删除原有arp缓存,再查看wireshark即可发现arp报文
1.2 原理理解
ARP——Address Resolution Protocol,地址解析协议;正如其英文名,是用于地址解析的协议;具体是利用该协议通过目的IP地址解析出下一跳的MAC地址,来帮助报文的二层封装实现报文的下一跳传递;ARP可以理解为是IP和MAC之间转换的桥梁;
1.3 字段分析
-
RFC 826文档内的帧格式
-
抓包软件内的帧格式
-
主要字段对照分析
Ethernet II
Destination
- 对于ARP的request报文,正常目的MAC为全f的广播MAC,因为下一跳的位置未知需要使用广播的方式来扩散该报文;
- 对于ARP的reply报文,由于可以从ARP request报文得知要回复的对象的目的MAC,所以此时reply报文的目的MAC就为其配对的request报文的source MAC;
- 特例分析
在Windows 网卡抓包时,发现ARP Request报文的目的MAC不一定是全f的广播,也有可能是单播(请求目的MAC的单播)
本人认为这应该是一种优化的策略,目的是为了减少ARP请求报文对广播域内其他链路和终端设备的影响;
因为windows本地有一张ARP表,表内缓存了我们通过ARP请求获取到的IP对应的MAC映射表项,而每一条表项都有老化时间(默认为2分钟),对于老化的表项,我们本地在需要使用它时又要重新发送ARP请求来重新缓存表项;
而如果目的MAC还是使用全f的广播,这种方式会使得ARP请求报文扩散到整个广播域,占用不必要的带宽,而且收到广播报文的终端设备无论这个ARP请求报文是不是发给自己都要上送CPU拆开二层头部,这一过程也很浪费其他终端设备的CPU资源;
所以Windows 采用这种优化方式,在ARP映射表项的老化时间还没到但是快到的时候,直接通过这种单播的ARP请求报文来获取数据更新即将老化的ARP映射表项,由于目的MAC是单播的形式,所以可以尽量减少对其他链路和终端的影响;
如果你抓包没有发现目的MAC为全f的ARP请求报文,我们可以以管理员身份运行“Windows PowerShell”,输入arp -d(清空本地ARP表),再输入arp -a(显示本地ARP表),然后随便访问一个网址,你就可以发现目的MAC为全f的ARP请求报文了,而且不出意外的话请求的是网关IP对应的MAC地址,至于为啥后面会说;