ARP協議簡介:
ARP協議能實現任意網絡層地址到任意物理地址的轉換,此次討論從IP地址到以太網地址(MAC地址)的轉換。其工作原理是:主機向自己所在的網絡廣播一個ARP請求,該請求包含目標機器的網絡地址。此網絡上的其他機器都將收到這個請求,但只有被請求的目標機器會回應一個ARP應答,其中包含自己的物理地址。
1.搭建網絡環境,見下圖

在主機192.168.0.141下面輸入:ping 192.168.0.125進行測試
2.分別用ifconfig命令輸出兩個主機的IP和MAC地址信息,見下圖
3.兩個主機都打開echo服務
打開echo服務的具體步驟見博客:http://blog.csdn.net/linux_ever/article/details/50515632
4.用arp命令查看arp緩存,並用arp -d 192.168.0.125刪除緩存
在主機192.168.0.141用arp -d 192.168.0.125刪除緩存
5.在主機192.168.0.141登陸主機192.168.0.125的echo服務並監聽幀
首先:在主機192.168.0.141下監聽收到的幀root@linux_ever:~# tcpdump -i eth0 -ent '(dst 192.168.0.125 and src 192.168.0.141) or (dst 192.168.0.141 and src 192.168.0.125)'
其次:在主機192.168.0.141下另外一個終端中輸入telnet 192.168.0.125 echo, 登陸主機192.168.0.125的echo服務,登陸成功之后輸入quit退出。此時我們可以看到tcpdump監聽到的幀。
監聽命令:
由tcpdump抓取的數據包本質上是以太網幀,我們通過該命令的眾多選項來控制幀的過濾(比如用dst和src指定通信的目的端IP地址和源端IP地址)和顯示(比如用-e選項開啟以太網幀頭部信息的顯示)。
登陸命令:
6.分析arp數據包
第一個數據包中,ARP通信的源端的物理地址是08:00:27:23:9c:b4(主機1:192.168.0.141),目的端的物理地址是ff:ff:ff:ff:ff:ff,這是以太網的廣播地址幀。數值0x806是以太網幀頭部的類型字段的值,它表示分用的目標是ARP模塊。
“Request”表示這是一個ARP請求,“who-has 192.168.1.125 tell 192.168.1.141”則表示是主機1:192.168.0.141要查詢主機2:192.168.0.125的MAC地址。
該以太網幀的長度為42字節(實際上是46字節,tcpdump未統計以太網幀尾部4字節的CRC字段),其中數據部分長度為28字節。
第二個數據包中,ARP通信的源端的物理地址是08:00:27:5e:44:7e(主機2:192.168.0.125),目的端的物理地址是08:00:27:23:9c:b4(主機1:192.168.0.141)。
“Reply表示這是一個應答,“192.168.0.125 is-at 08:00:27:5e:44:7e”則表示目標機器主機2:192.168.0.125報告其物理地址。
該以太網幀的長度為60字節(實際上是64字節,tcpdump未統計以太網幀尾部4字節的CRC字段),可見它使用了填充字節來滿足最小幀長度。
7.以太網ARP請求/應答報文詳解
1、硬件類型字段定義物理地址的類型,它的值為1表示MAC地址。
2、協議類型字段表示要映射的協議地址類型,它的值為0x800,表示IP地址。
3、硬件地址長度字段和協議地址長度字段,顧名思義,其單位是字節。對MAC地址來說,其長度為6;對IP(v4)地址來說,其長度為4。
4、操作字段指出4種操作類型:ARP請求(值為1)、ARP應答(值為2)、RARP請求(值為3)和RARP應答(值為4)。
5、最后4個字段指定通信雙方的以太網地址和IP地址。發送端填充除目的端以太網地址外的其他3個字段,以構建ARP請求並發送之。接收端發現該請求的目的端IP地址是自己,就把自己的以太網地址填進去,然后交換兩個目的端地址和兩個發送端地址,以構建ARP應答並返回之(當然,如前所述,操作字段需要設置為2)。
6、ARP請求/應答報文的長度為28字節。如果再加上以太網幀頭部和尾部的18字節,則一個攜帶ARP請求/應答報文的以太網幀長度為46字節。不過有的實現要求以太網幀數據部分長度至少為46字節,此時ARP請求/應答報文將增加一些填充字節,以滿足這個要求。在這種情況下,一個攜帶ARP請求/應答報文的以太網幀長度為64字節。