以太網環境下,同一個網段的主機之間需要互相知道對方的MAC地址,才能訪問。
TCP/IP協議棧從上層到下層的封裝過程中,第三層封裝需要知道目的IP,第二層封裝需要知道目的MAC。
目的IP一般由用戶手工輸入,或者由應用程序填充,也可以通過名稱解析系統解析得到,而目的MAC就需要使用ARP來解析。
ARP解析MAC地址的過程:
第一步:
上層應用產生數據,這里用FTP協議為例,在FTP協議中定位了目的IP。
第二步:
那么,封裝的過程如下:
-
應用層:需要FTP的控制信息,包括用戶名、密碼等;
-
傳輸層:目的端口號為21,源為隨機端口號;
-
網絡層:目的IP為172.16.1.200,源IP為172.16.1.1;
-
數據鏈路層:因為不知道目的IP 172.16.1.200對應的MAC,所以目的IP到目的MAC的封裝映射失敗;
三層到二層的封裝失敗,由於二層是以太網,ARP的工作機制便會產生ARP Request去解析目的MAC,此時,源MAC為數據發起者的MAC,目的MAC地址為 ff-ff-ff-ff-ff-ff(代表所有MAC)
第三步:
ARP Request到達本網段中的所有設備上,因為目的為ff-ff-ff-ff-ff-ff,所以所有設備都可以拆掉二層的封裝,然后解讀ARP數據包中需要解析的目的IP。
第四步:
目的IP不正確的設備直接忽略這個ARP請求包,目的IP正確的設備,會產生一個ARP Reply去回應這個ARP Request。
此時,二層的源MAC為被解析設備的MAC,目的為ARP解析發起者的MAC。
第五步:
數據的發起者接到ARP Reply后,將目的IP與目的MAC的對應關系添加到自己的ARP表中。
第六步:
之前未完成二層封裝的FTP數據,這時重新開始封裝二層頭部,此時,正確的目的MAC就被封裝到了整個數據幀中。
只有完成了整個TCP/IP協議棧封裝的數據幀,才能正常的從主機上發出去。
這就是ARP解析MAC地址的整個過程。
本文轉自: https://blog.51cto.com/tenderrain/1983572