iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
2
Software Development

那些年還給老師的TCP/IP五層結構 - 用Python進行網路封包分析系列 第 10

Day10 聊聊ARP

ARP又名地址解析協議,是連結第二層與第三層的橋樑,我們知道第二層利用MAC address去找尋封包傳遞的目標,而第三層以上則是利用IP address,我們需要一個東西去根據IP address取得MAC address,這就是ARP協議所要做的事情。
另外,當發送電腦和目的電腦不在同一個局域網中時,即便知道對方的MAC地址,兩者也不能直接通信,必須經過路由轉發才可以。所以此時,發送方通過ARP協議獲得的將不是目的主機的真實MAC地址,而是一台可以通往局域網的路由器的MAC地址。於是此後發送主機發往目的主機的所有封包,都將發往該路由器,通過它向外發送。這種情況稱為委託ARP或ARP代理(ARP Proxy)。

解析ARP的封包也很簡單,ARP的header固定長度是28bytes
HTYPE, PTYPE, HLEN, PLEN, Operation, SHA, SPA, THA, TPA = struct.unpack('2s2s1s1s2s6s4s6s4s',packet[14:14+28])
其中參數如下

  • Hardware type (HTYPE) 規範網路鏈接協議類型,例如乙太網=1
  • Protocol type (PTYPE) 同第三層IP層的protocol
  • Hardware length (HLEN) Mac address的長度,一般是6bytes
  • Protocol length (PLEN) IP的長度,如果是IPv4就是4bytes
  • Operation 1是request,2是response
  • Sender hardware address (SHA) 發送方的mac address
  • Sender protocol address (SPA) 發送方的ip
  • Target hardware address (THA) 接受方的mac address
  • Target protocol address (TPA) 接受方的ip

每台電腦或路由器都有一個紀錄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表裡查找就可。


上一篇
Day09 聊聊ICMP的應用 - traceroute
下一篇
Day11 題外話 - 如何利用ARP發起中間人攻擊(Man-in-the-Middle)
系列文
那些年還給老師的TCP/IP五層結構 - 用Python進行網路封包分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言