《Linux高性能服务器编程》笔记2--tcpdump观察ARP通信实验
tcpdump观察arp
ARP协议工作原理
ARP协议能实现任意网络层地址到任意物理地址的转换。
工作原理:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址。此网络上的其他机器都将接收到这个请求,但只要被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址。
以太网ARP请求/应答报文详解
- 硬件类型:物理地址类型,为1时表示MAC地址
- 协议类型:要映射的协议地址类型,为0x800时,表示IP地址
- 硬件地址长度和协议地址长度,单位是字节。MAC地址长度是6,IPv4长度是4
- 操作:四种操作类型,ARP请求(值为1),ARP应答(2),RARP请求(3),RARP应答(4)
- 后面四个是通信双方的以太网地址和IP地址。发送方填充除目的端以太网地址外的其他3个字段,以构建ARP请求并发送之。接收端发现该请求的目的端IP地址是自己时,把自己的以太网地址填入,然后交换两个目的端地址和两个发送端地址,以构建ARP应答并返回之(此时,操作数为2)。
ARP高速缓存的查看和修改
ARP维护一个高速缓存,其中包含经常访问或最近访问的机器的IP地址到物理地址的映射。避免重复的ARP请求,提高了发生数据包的速度。
Linux使用arp命令查看和修改ARP高速缓存。
tcpdump观察arp通信过程
在虚拟机新建两个Ubuntu系统,主机1的IP地址为:192.168.157.137,主机2的IP地址为192.168.157.131.
在主机1上输入arp
命令,查看其高速缓存,如图:
没有看到主机2地址,说明没有将其加入高速缓存。
使用ping 主机2IP
命令后,再次使用arp
命令,可以观察到主机2的IP地址。如图
在Ubuntu1804上开启echo服务,请见:
ubuntu开启echo
在主机1上先清除主机2对应的项,命令:sudo arp -d 主机2IP
。
然后使用tcpdump抓取这个过程中两个机器交换的以太网帧,命令:tcpdump -i 网卡 -ent '(dst ip1 and src ip2) or (dst ip1 and src ip2)'
,监听网卡,从ip1发往ip2或从ip2发往ip1的数据。
然后再在主机1上另外开一个终端,使用telnet与主机2建立连接后关闭.
查看数据包:
第一个数据包中,00:0c:29:7e:9e:b0
是源端物理地址,ff:ff:ff:ff:ff:ff
是目的端物理地址,此时未填充,0x0806
表示ARP类型,Request
表示一个ARP请求,192.168.157.131
即目的端IP地址,192.168.157.137
为源端IP地址。帧的长度为42字节(实际为46字节,未提及以太网帧尾部4字节的CRC字段),数据长度为28字节。
第二个数据包中,00:0c:29:04:04:6d
是目的端物理地址,Reply
表示ARP应答。帧的长度为60字节(实际为64字节)。