ARP(Address Resolution Protocol)即地址解析協議, 用於實現從IP地址到MAC地址的映射,即實現通過目標IP找到對應的MAC地址。
在網絡通信中,主機和主機通信的數據包需要依據OSI模型從上到下進行數據封裝,當數據封裝完整后,再向外發出。所以在局域網的通信中,不僅需要源目IP地址的封裝,也需要源/目MAC的封裝。
上層應用程序更多關心IP地址而不關心MAC地址,所以需要通過ARP協議來獲知目的主機的MAC地址,完成數據封裝。
問題:內網中當 主機A 發送消息給 主機B 之間的通信是怎么樣的?
ARP請求過程:
1、主機A先在ARP緩存表中查找主機B的MAC地址
2、如果在A的ARP緩存表中找到了,那么就繼續數據封裝通信。如果沒有找到主機A會先發送ARP的廣播包(里面包括了A的IP地址和MAC地址、主機B的IP地址)
3、既然是廣播幀那么內網中的所有存活主機都會收到該ARP的廣播包
4、存活主機會進行檢查自身IP地址是否與廣播包中的目的IP地址一致,如果不一致的話進行丟棄。如果一致那么就會將主機A的IP和MAC地址添加到自己的ARP緩存表里面,然后再將自己的MAC地址和ARP響應包通過單播方式發送給主機A
5、然后主機A就可以給主機B發送消息
ARP數據包分析:
**win10: **192.168.1.104
win2008: 192.168.1.101
1、ARP請求包:
以太網目的地址: 目的主機的硬件地址,目的地址為ff:ff:ff:ff:ff:ff
,則是一個廣播地址
以太網源地址:源主機的硬件地址
幀類型:ARP:0x0806、 RARP:0x8035
Hardware type
:硬件類型,標識鏈路層協議
Protocol type
: 協議類型,標識網絡層協議
Hardware size
:硬件地址大小,標識MAC地址長度,這里是6個字節(48bti)
Protocol size
: 協議地址大小,標識IP地址長度,這里是4個字節(32bit)
Opcode:
操作代碼,標識ARP數據包類型,1表示請求,2表示回應
Sender MAC address
:發送者MAC
Sender IP address
:發送者IP
Target MAC address
:`目標MAC,此處全0表示在請求
Target IP address
: 目標IP
2、ARP響應包:
響應包與請求包大致相同,不同地方為Opcode為2,源/目IP和MAC地址相反,Target MAC address
被補充
小知識:關於ARP協議屬於哪層協議?
協議到底所屬哪一層,可以從應用/功能來考慮,也可以從層次/包封裝來考慮。
從功能來看,它的功能最終是獲取到MAC信息,服務於鏈路層,從這點考慮,ARP是鏈路層協議;
但是從層次來看,ARP基於Ethernet協議,IP協議基於Ethernet協議,它們在Ethernet協議里面有獨立的Type類型,前者是0x0806,后者是0x0800,那么同樣屬於網絡層協議