【轉】交換機開發(二)—— 三層交換機報文轉發過程

小宇飛刀發表於2018-10-07

如圖所示,假如主機A想訪問主機B,首先主機A會將自己的IP地址和子網掩碼做與操作,得出網路地址(如:Host-A的IP地址100.1.1.2與自身掩碼255.255.255.0做與操作後,得到的網路號是100.1.1.0).然後判斷目的IP地址(即Host-B的IP地址)與自己的網路地址是不是在同一個子網.因為圖中主機A和主機B不在同一子網內,所以需要進行三層轉發.

 

1、主機A傳送ARP廣播獲取閘道器MAC地址

主機A想訪問主機B首先要有主機B的MAC地址,由於主機A和主機B不在同一子網,所以主機A首先會向預設閘道器傳送ARP廣播報文來獲取閘道器的MAC地址。ARP報文格式如下:

Ethernet頭

ARP頭

D-MAC

S-MAC

S-MAC

S-IP

D-MAC

D-IP

ff:ff:ff:ff:ff:ff

00e0-d26b-8121

00e0-d26b-8121

100.1.1.2

00:00:00:00:00:00

100.1.1.1

 

 

2、交換機形成主機A的MAC表項,並用閘道器MAC地址回應主機A的ARP請求

交換機收到ARP廣播報文後,首先學習ARP報文Ethernet頭部的源MAC地址,交換機晶片將自動記錄主機A的MAC地址(00e0-d26b-8121)、接收該ARP報文的交換機介面號(E1/0/0)及此介面所屬的VLAN(VLAN 10)等資訊,並形成一條MAC表項放入交換機MAC表中.同時,交換機也會通過軟體把主機A的IP、MAC、上連到交換機的介面等資訊儲存到交換機的硬體轉發表裡(三層硬體表項,MAC表是沒有IP的)。

由於主機A傳送的ARP廣播報文中的目的IP地址(100.1.1.1)就是交換機上接收該ARP廣播報文的介面(E1/0/0)所屬VLAN(VLAN 10)的IP地址,所以交換機將使用vlan10的MAC地址回覆主機A的ARP請求。ARP回覆報文如下:

Ethernet頭

ARP頭

D-MAC

S-MAC

S-MAC

S-IP

D-MAC

D-IP

00e0-d26b-8121

00e0-d26b-8111

00e0-d26b-8111

100.1.1.1

00e0-d26b-8121

100.1.1.2

 

 

3、主機A把閘道器MAC當作主機B的MAC訪問主機B

主機A收到閘道器的ARP回應報文後,會把閘道器的MAC地址當成是主機B的MAC地址,這樣主機A傳送資料給主機B時就會使用閘道器MAC作為目的MAC來封裝資料偵,偵格式如下:

Ethernet頭

IP頭

資料

D-MAC

S-MAC

S-IP

D-IP

DATA

00e0-d26b-8111

00e0-d26b-8121

100.1.1.2

200.1.1.2

……

 

 

4、交換機查詢硬體轉發表/路由表進行三層轉發

交換機收到主機A發來的資料包文後,仍然會首先學習資料包文Ethernet頭部的源MAC地址,然後根據Ethernet頭部的目的MAC查詢交換機的MAC表,此時發現目的MAC地址就是本地VLAN的MAC地址,這種情況下交換機會把該報文上送到交換晶片的三層引擎處理。三層引擎將首先查詢硬體轉發表。

⑴ 如果硬體轉發表中有匹配項,則根據報文目的IP地址作相應處理:

①、目的IP地址就是本地的IP地址,則交相應模組處理。

②、目的IP是其他裝置IP地址,本地只是轉發,則根據硬體轉發表項使用出介面MAC替換報文的源MAC地址,用下一跳MAC替換報文的目的MAC地址,同時TTL值減1,繼續轉發。(此處與二層的區別在於需要對報文進行源、目的MAC進行替換)

⑵  如果不匹配則查詢路由表,有匹配項則按照上面(2)中的操作進行,同時把相應的目的IP、下一跳MAC、出介面等資訊儲存到硬體轉發表項中,下次就不需要查路由表了,這就是所謂的一次路由多次交換。

⑶  如果路由表也沒有匹配項,則丟棄報文。

此處,由於主機A資料包文的目的IP是主機B的地址,並且主機B和交換機直連,交換機的硬體轉發表/路由表已經有主機B的路由表項,所以交換機將主機A發來的報文中的源、目的MAC地址作替換,同時TTL值減1,然後發給主機B。經過MAC替換後的報文格式如下:

Ethernet頭

IP頭

資料

D-MAC

S-MAC

S-IP

D-IP

DATA

00e0-d26b-8212

00e0-d26b-8222

100.1.1.2

200.1.1.2

……

這樣主機A就把資料包文發到了不同網段的主機B。同時交換機上也儲存了關於主機A和主機B的硬體轉發表項,以後主機A和主機B互訪,以及其他網段主機訪問主機A或主機B交換機就可以根據硬體轉發表項直接轉發,而不需要查詢路由表。

--------------------- 本文來自 zqixiao_09 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/zqixiao_09/article/details/51169849?utm_source=copy

相關文章