先看看arp的定義吧linux
如今linux運行這條命令tcp
tcpdump -i eth0:1 -ent '(dst 192.168.5.190 and src 192.168.5.109)or( dst 192.168.5.109 and src 192.168.5.190)' -xblog
bc:ee:7b:9d:ee:02 > Broadcast, ethertype ARP (0x0806), length 60: Request who-has 192.168.5.190 tell 192.168.5.109, length 46
0x0000: 0001 0800 0604 0001 bcee 7b9d ee02 c0a8
0x0010: 056d 0000 0000 0000 c0a8 05be 0000 0000
0x0020: 0000 0000 0000 0000 0000 0000 0000
40:16:7e:79:c7:36 > bc:ee:7b:9d:ee:02, ethertype ARP (0x0806), length 42: Reply 192.168.5.190 is-at 40:16:7e:79:c7:36, length 28
0x0000: 0001 0800 0604 0002 4016 7e79 c736 c0a8
0x0010: 05be bcee 7b9d ee02 c0a8 056dip
咱們同時把 數據16進制打印出來了get
先 分析 請求arp的包it
0001 ---表示硬件類型爲mac地址ast
0800 ---表示要映射的協議類型,這裏爲ip地址硬件
06 ---表示mac地址長度請求
04 ---表示ip地址長度程序
0001 ---表示 arp請求
bcee 7b9d ee02 ---發送方mac地址啦 也就是本機啦
c0a8 056d ---發送方ip 192.168.5.109
0000 0000 0000 --- 目標mac,這裏是全網啦,未知
c0a8 05be --- 目標端ip地址,也就是 192.168.5.190
再分析 arp響應的包
0001 ---表示硬件類型爲mac地址
0800 ---表示要映射的協議類型,這裏爲ip地址
06 ---表示mac地址長度
04 ---表示ip地址長度
0002 ---表示 arp響應
4016 7e79 c736 --- 發送方mac地址
c0a8 05be ---發送方ip地址
bcee 7b9d ee02 ---接收mac地址
c0a8 056d ---接收方ip地址
arp的數據長度不足46,因此要補0啦 啦,這是一個規定爲何能看到迴應是42字節而請求是60字節。由於迴應這層數據還沒經過太網設備驅動程序,若是是2臺PC通信的話,再另一臺上看,必定是60字節的哦!剛開始我也很迷惘謝謝這位大哥 http://blog.163.com/cailing_07@126/blog/static/339150872011112693647977/ 解惑