PING用一生詮釋了TCP/IP(4)------二三層轉發爲PING劈荊斬棘

   作爲一個網絡使用者,你也許從來沒有思考過源及目的主機之間究竟發生了什麼,因爲網絡對用戶來說是一個黑匣子,所有的細節都被屏蔽掉了,你只能知道通還是不通,能不能上網?但是作爲一個網絡設計者,研究者,你就必須要想想?假如你要ping一臺位於美國硅谷的服務器,那麼ICMP請求報文從源主機發出之後會發生那些事呢?其實報文的所有的路徑都是由各種各樣的類似與現實生活中的法律一樣的網絡協議約束下設計的,報文在離開老巢之後會經過二層接入層交換機,在三層交換機匯聚,從邊緣路由器上發送出去,流入了茫茫的internet洪流之中。而在這個過程之中,報文會做的就是在網絡設備上從轉發處理。提到轉發就不得不提到二三層轉發的概念。其實關於二三層轉發的概念在前幾篇中都已經有一點涉及,只是並沒有很明確的提出來。

  下面就舉例來討論一下二三層轉發的詳細過程:

clip_image001

                                  port1        port2

  首先來說說二層轉發的處理流程:

  1. 假如交換機的port1和port2處於同一個vlan內,PC1想PING主機PC2,那麼PC1首先會根據目的PC2的IP地址查詢路由表,查詢下一跳地址的(ARP -a)的ARP緩存。如果存在對應的表項則直接轉發出去,如果不存在,就會進行步驟2處理。

  2. PC1向PC2廣播發送ARP REQUEST請求報文

  3. 交換機port1接口收到ARP請求報文之後會在port1接口學習PC1的mac地址建立ARP及FIB表(port<---->mac),從廣播ARP REQUEST

  4. PC2會接收到從交換機port2廣播出來的ARP請求報文,學習PC1的MAC,構建自己的ARP表項(IP<---->MAC),並向PC1返回ARP REPLAY單播報文

  5. 交換機從port2接受到ARP應答報文後,學習PC2的MAC地址構建ARP及FIB表項,根據目的PC1的MAC地址查詢FIB表項,然後從port1接口發送出去。

  6. PC1接收到了ARP REPLAY後會學習PC2的MAC地址,生成ARP緩存表。然後將學習到的PC2的MAC地址填充在ICMP請求報文之中單播發送

  7. 交換機從port1收到ICMP請求報文後會查報文的目的MAC地址是否是本機的地址,查詢結果非本機MAC地址,則可以判斷爲二層轉發,然後根據Dest MAC查詢FIB表,從交換機port2端口發送出去。

  8. PC2接收到ICMP請求報文,返回ICMP應答報文,報文格式不變,將源及目的IP及MAC地址對調發送

  9. 交換機接受到ICMP應答報文之後依然會比較目的MAC是否爲本機MAC,比較結果爲非本機MAC,判斷爲二層轉發,然後從port1接口直接發送。

  10.PC1接收到ICMP 應答報文後判斷PC1跟PC2雙向互通。

  對於三層轉發其實流程跟二層轉發流程類似:

  1. 假如交換機的port1和port2處於不同vlan內,PC1想PING主機PC2,那麼PC1首先會查路由表(根據PC2的IP),根據相關路由表項的下一跳IP地址查詢(ARP -a)自己的ARP緩存。如果存在對應的表項則直接轉發出去,如果不存在,就會進行步驟2處理。

  2. PC1向PC2廣播發送ARP REQUEST請求報文(目的IP爲PC2的地址,目的MAC爲下一跳的MAC)

  3. 交換機port1接口收到ARP請求報文之後比較目的MAC是自己的入接口的MAC地址,而IP並非port1對應vlan接口的IP,則判斷爲三層轉發。

  4. 交換機將報文上送CPU處理,根據目的IP(PC2)查路由表,查詢結果爲下一跳出接口應該從port2所在的VLAN,所以將arp請求在該vlan內廣播發送

  5. PC2收到ARP請求報文後會學習mac地址構建ARP表返回ARP應答報文。

  6. 交換機接受到ARP應答報文後會學習MAC構建ARP及FIB表項,比較目的MAC是否爲本機MAC,結果非本機MAC,則判斷爲三層轉發,將報文上送CPU,軟件查詢路由表,查詢結果顯示下一跳出接口爲port1所在的vlan接口,查詢FIB表,從port1接口發送出去。

  7. PC1接受到PC2發送的ARP應答報文後學習mac構建ARP表項。

  8. PC1根據新建的arp表向PC2發送ICMP請求報文,交換機接收到後根據已經構建的FIB表及ARP表及路由錶轉發報文。

  9. PC2收到後返回ICMP應答報文,PC1收到後判斷主機可達。

  小結:

  判斷二層轉發和三層轉發的最根本的區別在於PC1查路由表,如果SIP和DIP在同一網段則PC1的下一跳即爲PC2的地址,所以發出的報文的DMAC就是PC2的MAC地址,設備計較報文的DMAC爲非設備MAC,則判斷爲二層轉發,否則如果DMAC跟設備接收報文的端口MAC一致,這也表明SIP和DIP不在同一網段,需要走三層轉發,上送CPU處理。

  有以上分析可以看出判斷二三層轉發表面是比較SIP和DIP是否是同一網段。其實質則是轉發設備通過比較轉發報文的DMAC是否爲本機MAC來作出最終判斷的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章