二、三層轉發原理(多例詳解,圖文相結合說明ping過程)

※ 首先要了解

① 源主機在發起通信之前,會將自己的IP與目的主機的IP進行比較,如果兩者位於同一網段(用網絡掩碼計算後具有相同的網絡號),那麼源主機發送arp請求廣播報,請求目的主機的mac地址,在收到目的主機的ARP應答後獲得對方的物理層(MAC)地址,然後用對方MAC作爲報文的目的MAC進行報文發送。位於同一VLAN(網段)中的主機互訪時屬於這種情況,這時用於互連的交換機作二層交換轉發;

② 當源主機判斷目的主機與自己位於不同網段時,它會通過網關(Gateway)來遞交報文,即發送ARP請求來獲取網關IP地址對應的MAC,在得到網關的ARP應答後,用網關MAC作爲報文的目的MAC進行報文發送。

                                              

注:

對位於同一子網,即同一網段(不需要經過路由,所以是二層轉發);

而對於位於不同子網,即不同的網段(必須經過路由器,所以該數據報文先經過三層路由轉發)

 

那三層轉發和二層轉發有什麼區別呢?
1.數據轉發依靠的關鍵字不同,二層轉發主要依靠MAC地址,而三層轉發主要依靠IP地址。
2.數據交換的範圍不同,二層交換指在同一網段內的通信,三層交換指跨網段的通信。
3.在三層轉發的過程中,還要進行二層的封裝。也就是說,在三層轉發過程中二層幀頭中的(源、目的)MAC地址是要改變的。但是IP數據報中的源IP和目的IP地址是不會改變的

 

下面主要以三層轉發爲例,做一個詳細的說明和梳理。

1. 概述

如圖1所示,交換機Router,SW1,SW2的所有表項爲空,Host 1要ping Host 2,即Host 1要給Host 2發送ICMP echo請求,Host 2收到請求之後,發現是請求自己的IP地址,會回覆ICMP echo應答報文。

                                wKiom1XmvyayH__sAAB6l_Oiga4610.jpg

                                                                                     圖1 網絡拓撲圖

Host 1的IP地址爲1.1.1.1/24,默認網關爲1.1.1.254,MAC地址爲ca02.1a14.0000;

Host 2的IP地址爲2.2.2.2/24,默認網關爲2.2.2.254,MAC地址爲ca03.1a14.0000;

Router的fa0/0口的IP地址爲1.1.1.254/24,MAC地址爲ca06.1b2c.0008;

Router的fa0/1口的IP地址爲2.2.2.254/24,MAC地址爲ca06.1b2c.0006。

注:由此可以看出路由器可以具有多個ip地址;

       並且主機的網關一般來說就是路由器的ip;

 

2. 三層轉發的整個過程

2.1 Host 1的ARP請求

Host 1將ICMP echo請求報文,封裝到源IP地址爲1.1.1.1,目的IP地址爲2.2.2.1的IP報文中。然後查詢Host1的路由表,準備將報文發送給Host 1的默認網關1.1.1.254。由於Host 1沒有其默認網關的MAC地址,因此Host 1會將該報文存到內存,先發送ARP請求來獲取MAC地址。

Host 1將源物理地址爲ca02.1a14.0000,源協議地址爲1.1.1.1,目的物理地址填充00:00:00:00:00:00,目的協議地址爲1.1.1.254的ARP請求,封裝在源MAC地址爲ca02.1a14.0000,目的MAC地址爲ffff.ffff.ffff的以太網幀發出,如圖2所示。

                         wKioL1XmwL-y3r1-AANE7G6p4fI201.jpg

                                                                                           圖2 ARP請求

2.2 SW1學習MAC地址

Sw1收到該幀廣播,同時將ca02.1a14.0000與自身的1端口關聯起來,加入到交換機的MAC地址表中

2.3 Router的ARP應答

Router收到這個幀之後,去掉二層封裝,查看到ARP請求中的目的協議地址爲fa0/0口地址,會發送  響應物理地址爲ca06.1b2c.0008,響應  協議地址爲1.1.1.254,目的MAC地址ca02.1a14.0000,目的IP地址1.1.1.1的ARP應答,封裝在源MAC地址爲ca06.1b2c.0008,目的MAC地址爲ca02.1a14.0000的以太網幀中發出,如圖3所示。

                        wKiom1Xmvu3zqKvUAANaoPBd3pI906.jpg

                                                                                              圖3 ARP應答

同時Router也會將物理地址ca02.1a14.0000與IP地址1.1.1.1存入到自己的ARP表中,如圖4所示。

                               wKioL1XmwVywnYA-AABwbbC-g18049.jpg

                                                                                圖4 Router的ARP表

2.4 SW1學習MAC地址

Sw1收到幀之後,查詢MAC地址表,將幀從1口發出,同時將ca06.1b2c.0008地址與2口關聯,加入到MAC地址表中。

2.5 ICMP echo請求

Host 1收到Router發送的ARP應答之後,會將物理地址ca06.1b2c.0008與IP地址1.1.1.254存入到自己的ARP表中,如圖5所示。

                              wKiom1Xmv2ChUxx-AABwDzSdKBU230.jpg

                                                                                 圖5 Host 1的ARP表

Host 1會調出ICMP echo請求,封裝成源MAC地址爲ca02.1a14.0000,目的MAC地址爲ca06.1b2c.0008的數據幀(注意此處的目的MAC設成了路由器的 fa0/0口的MAC),發送給Router,如圖6所示。

                         wKiom1Xmv3miBWZGAANviGDtYfM386.jpg

                                                                                   圖6 ICMP echo請求

Router的fa0/0收到該報文,查找本地路由表,判斷目的IP是否和自己IP處於同一網絡,發現Host 2的IP和自己接口fa0/1的IP爲同一網段,則Router會將該報文從fa0/1發送給Host 2。但由於Router的fa0/1口沒有2.2.2.2的MAC地址,只能先進行ARP請求。

2.6 Router的ARP請求

Router會將源物理地址爲ca06.1b2c.0006,源協議地址爲2.2.2.254,目的物理地址填充全0,目的IP地址爲2.2.2.2的ARP請求,封裝在源MAC地址爲ca06.1b2c.0006,目的MAC地址爲ffff.ffff.ffff的以太網幀從fa0/1口廣播出去。

2.7 SW2學習MAC地址

Sw2收到該幀之後會將該幀廣播,同時將ca06.1b2c.0006與1口關聯,加入到MAC地址表。

2.8 Host 2的ARP應答

Host 2收到ARP請求之後,會將響應MAC地址ca03.1a14.0000,響應IP地址2.2.2.2,目的MAC地址ca06.1b2c.0006,目的IP地址2.2.2.254的ARP應答,封裝在源MAC地址爲ca03.1a14.0000,目的MAC地址爲ca06.1b2c.0006的以太網幀中發出。同時也將物理地址ca06.1b2c.0006與IP地址2.2.2.254關聯起來,存入到自己ARP表中。

2.9 SW2學習MAC地址

Sw2收到幀之後,查詢MAC地址表,將幀從2發出,同時將ca03.1a14.0000地址與1口關聯,加入到MAC地址表中。

Router獲到Host 2給他的ARP響應之後,會將物理地址ca03.1a14.0000與IP地址2.2.2.2關聯,並且加入到ARP表中。這時,Router將剛纔的ICMP echo報文轉發給Host 2。

2.10 ICMP echo應答

Host 2收到由Host 1發送的ICMP echo請求之後,會將ICMPecho應答封裝在源IP地爲2.2.2.1,目的IP地址爲1.1.1.1的IP報文中,發送給Host 1。

Host 1收到Host 2發送的ICMP echo應答,此次ping的過程結束,如圖7所示。

                     wKioL1XmwcSgxeZwAAO3E4XEsUg245.jpg

                                                                              圖7 ICMP echo應答

 

 

再上一個簡潔點的例子

三層轉發舉例

 

PC1準備向PC2發送數據包

(1) PC1檢查報文的目的IP地址,發現和自己不在同一網段,則需要進行三層轉發,通過網關轉發報文信息;

(2) PC1檢查自己的ARP表,發現網關的MAC地址不在自己的ARP表裏;

PC1向Router發起arp請求

(3) PC1——>Router(網關)發出ARP請求報文;

(4) Router將PC1的MAC地址學習到自己的ARP表,
(5) Router(網關)——>PC1發出ARP應答報文;

(6) PC1學習到Router(網關)的mac地址,發出報文,此時源ip、目的ip不變,目的mac爲Router(網關)的mac

(7) PC1——> Router(網關)發出報文。

(8) Router(網關)收到報文,發現是三層報文(原因是報文的目的mac是自己的mac)
(9) Router(網關)檢查自己的路由表(FIB),發現目的ip在自己的直連網段

(10)Router檢查自己的arp表,如果發現有與目的ip對應的mac地址則直接封裝報文(目的ip、源ip不變,目的mac爲查arp表所得mac)發送給PC2

(11) 如果查ARP表沒有得到與目的ip對應MAC,則重複(3)發arp請求

(12) PC2收到ARP廣播報文,發現目的IP是自己的IP,於是給Router發送ARP應答報文。報文中會附上自己的mac地址。

(13) Router收到應答報文後,目的mac改爲PC2的mac,然後向PC2發送數據幀。

(14) PC2向Router發送報文

(15) Router收到報文後,向PC1轉發報文

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