TCP協議與ARP協議位於不同的層,不能用“並列”的思維來考慮。TCP位於傳輸層,而ARP工作在網絡層(也有說法是數據鏈路層,主要看怎么理解),但實際上掌管網絡層的大boss是IP協議,ARP協議用於實現IP地址向MAC地址的轉換,不過是個跑龍套的。
除此之外,網絡層想要把數據發出去還要依靠數據鏈路層,在局域網中,數據鏈路層和之下的物理層最常見的莫過於802.3協議棧了,也就是大名鼎鼎的以太網。
注:802.3/以太網並不是一個協議,也不是一個分層。它是對局域網內部通信的一個實現標准,囊括了從物理層到鏈路層的一坨協議。以下簡單使用“802.3”來代表802.3中鏈路層及以下負責數據傳送的協議集。
在網絡分層模型中,下層要為上層提供服務,而上層的一切行動都要靠下層們為它跑腿。打個簡單的比方,TCP就好比是老板,而IP是項目主管,ARP和802.3則是為以上二位跑腿的小員工。現在老板TCP想要向外發送一個SYN請柬。以下是大致劇情……
-----------------------------------------------------------------------------------------------------------------------------------------
TCP:IP你過來,我現在要給“destinationIP”發送一個SYN請柬,請柬我已經寫好了,剩下的就交給你了,限你n秒之內給我回話!(老板任性地走了……)。
IP拿到請柬后用信封封好,寫上自己的IP地址和接收方的IP地址。然后將自己的網絡號與destinationIP對比:
1. 剛好在同一個網段,心想目標就在我們小區內(局域網),這就好辦了(跳至 --- #1 --- 處)。
2. IP一看不在同一個網段,心想不妙,只能求助收發室了(網關/路由器)(跳至 --- #2 --- 處)。
--- #1 ---
IP:ARP你過來,給我查查這個“destinationIP”的詳細地址在哪(MAC地址)。
ARP:(翻了翻自己的筆記本(ARP緩存)沒找到,他搖了搖頭,接着打開了小區廣播) “destinationIP”聽到請回答,我需要你的詳細地址。
過了一會ARP收到了一個回電,不出所料,destinationIP匯報了自己的MAC地址。ARP把MAC地址交給了IP。
跳至 --- #3 --- 處
--- #2 ---
IP:(把默認網關的IP地址指給ARP)這是收發室的IP,你給我查查它的詳細地址(MAC地址)。
ARP翻開了自己的筆記本,很快找到了收發室的詳細地址,並把MAC地址交給了IP,他慶幸這次不需要再打開小區廣播擾民了~
跳至 --- #3 --- 處
--- #3 ---
IP:802.3你過來,我這里有一封寫好的信你幫我送出去,MAC地址我已經幫你查好了。
最終,802.3按照得到的MAC屁顛屁顛地將信件送到收發室,並登記了自己的MAC地址。
此處省略n萬字…… 結束~
-----------------------------------------------------------------------------------------------------------------------------------------
注意:
ARP協議是和以太網配套使用的,如果你的局域網的底層實現並不是以太網(比如令牌環網、HDDI等),那么你可能壓根就不需要ARP請求!
從始至終,IP協議只處理與IP地址有關的部分;
ARP協議只處理查詢MAC地址;
802.3鏈路層協議只負責MAC-MAC之間的實際傳送;
這就是網絡分層,各司其職。
===================================
最后,你問我TCP發出SYN請求和ARP廣播誰先,當然是SYN請求在先了!但是如果沒有ARP廣播SYN請求還不是紙上談兵?所以問誰先誰后是沒有意義的,分清楚誰是boss、誰是小弟就好了。