ARP又名地址解析協議,是連結第二層與第三層的橋樑,我們知道第二層利用MAC address去找尋封包傳遞的目標,而第三層以上則是利用IP address,我們需要一個東西去根據IP address取得MAC address,這就是ARP協議所要做的事情。
另外,當發送電腦和目的電腦不在同一個局域網中時,即便知道對方的MAC地址,兩者也不能直接通信,必須經過路由轉發才可以。所以此時,發送方通過ARP協議獲得的將不是目的主機的真實MAC地址,而是一台可以通往局域網的路由器的MAC地址。於是此後發送主機發往目的主機的所有封包,都將發往該路由器,通過它向外發送。這種情況稱為委託ARP或ARP代理(ARP Proxy)。
解析ARP的封包也很簡單,ARP的header固定長度是28bytesHTYPE, PTYPE, HLEN, PLEN, Operation, SHA, SPA, THA, TPA = struct.unpack('2s2s1s1s2s6s4s6s4s',packet[14:14+28])
其中參數如下
每台電腦或路由器都有一個紀錄ARP的表(ARP cache)
Host名稱 | IP地址 | MAC地址 |
---|---|---|
A | 192.168.38.10 | 00-AA-00-62-D2-02 |
B | 192.168.38.11 | 00-BB-00-62-C2-02 |
以主機A(192.168.38.10)向主機B(192.168.38.11)發送數據為例。
1.當發送packet時,HostA會在自己的ARP表中尋找是否有目標IP地址。如果找到就知道目標MAC地址為(00-BB-00-62-C2-02),直接把目標MAC地址寫入packet裡面發送就可。
2.如果在ARP表中沒有找到相對應的IP地址,主機A就會在網絡上發送一個廣播(ARP request),目標MAC地址是「FF-FF-FF-FF-FF-FF」,這表示向同一網段內的所有Host發出這樣的詢問:「192.168.38.11的MAC地址是什麼?」
3.網絡上其他主機並不回應ARP詢問,只有HostB接收到這個packet時,才向主HostA做出這樣的回應(ARP response):「192.168.38.11的MAC地址是00-BB-00-62-C2-02」,此回應以unicast方式。這樣,主機A就知道主機B的MAC地址,它就可以向主機B發送信息。同時它還更新自己的ARP表,下次再向主機B發送信息時,直接從ARP表裡查找就可。