二層轉發:當A、B或者C、D互相通信時,它們走的就是二層轉發。
第一步:
A——> B。因為報文的源IP和目的IP在同一網段,將會走二層轉發,查詢PCT表,確定出端口。因為PCT表此時是空的:
MAC |
VLAN |
接口(物理口) |
所以,交換機會把A向B發送的報文進行廣播處理,向VLAN內所有成員端口發送,B當然可以正常接收。同時,交換機會把A對應的MAC、VLAN、端口信息添加到PCT表項中,此時PCT表項變成如下形式。
MAC |
VLAN |
接口(物理口) |
MAC_A |
VLAN_1 |
1 |
第二步:
B——>A。過程和A向B第一次發送一樣,也是被當做廣播報文向VLAN內所有端口廣播,與此同時,交換機也會學習B的有關信息,添加到PCT表中。
MAC |
VLAN |
接口(物理口) |
MAC_A |
VLAN_1 |
1 |
MAC_B |
VLAN_1 |
2 |
第三步:
當A、B再次通信時,則直接查詢PCT表,找到對應接口,將報文轉發出去。上述三個步驟,就是二層轉發的全部過程。
三層轉發:當A、B和C、D互通時,它們就要走三層轉發。下面用另外一個圖來說明。
注:SW L2交換機、R 路由器、pc 普通終端,所有鏈路都支持802.1Q標簽報文。
其他條件:
pc1的啟動配置IP是192.168.0.4/24,默認網關192.168.0.1;
pc2的啟動配置IP是192.168.1.6/24,默認網關192.168.1.1;
交換機sw1端口s1是access,端口s2是trunk,均加入vlan10;
交換機sw2端口w1是access,端口w2是trunk,均加入vlan20;
路由器R端口1是三層路由接口,加入vlan10,IP為192.168.0.1/24;
路由器R端口2是三層路由接口,加入vlan20,IP為192.168.1.1/24;
第一步:
pc1——>是否同一網段(否!)——>三層轉發——>查路由表(沒有!)——>只能將報文發給自己默認網關(192.168.0.1)——>查ARP表項(沒有!)——>發送ARP廣播報文
ARP請求(pc1)
DM |
SM |
以太幀類型 |
映射協議類型 |
SI |
DI |
Data |
全f(廣播地址) |
pc1 MAC |
0x0806(ARP) |
0x0800(IP) |
pc1 IP |
r1 IP |
數據 |
第二步:
SW1——>從s1(access)收到ARP報文,報文加上VLAN10 標簽:1、更新SM+VLAN(pc1)到PCT表(MAC表)——>在VLAN10廣播,包括s2(trunk)
ARP請求(SW1)
DM |
SM |
幀Tpye |
VID |
以太幀類型 |
映射協議類型 |
SI |
DI |
Data |
全f(廣播地址) |
pc1 MAC |
0x8100(802.1q) |
VLAN 10 |
0x0806(ARP) |
0x0800(IP) |
pc1 IP |
r1 IP |
數據 |
(交換機只起到透傳左右,打個VLAN而已,並不改變報文任何字段)
第三步:
R——>路由接口r1收到SW1報文:1、更新直連路由pc1到FIB表(轉發表);2、更新pc1的MAC和IP到ARP表;3、更新SM+VLAN(pc1)到PCT表;——>目的IP是端口r1,響應ARP請求,從r1發出 (交換機只透傳,所有並不會把交換機的MAC也更新到表項里)
ARP響應(路由接口r1)
DM |
SM |
幀Tpye |
VID |
以太幀類型 |
映射協議類型 |
SI |
DI |
Data |
pc1 MAC |
r1 MAC |
0x8100(802.1q) |
VLAN 10 |
0x0806(ARP) |
0x0800(IP) |
r1 IP |
pc1 IP |
數據 |
第四步:
SW1——>從s2(trunk)收到ARP報文,s2屬於VLAN10:1、更新SM+VLAN(r1)到PCT表——>查PCT表,DM+VLAN(pc1)命中s1接口——>去掉VLAN標簽,從s1口發出
ARP響應(SW1)
DM |
SM |
以太幀類型 |
映射協議類型 |
SI |
DI |
Data |
pc1 MAC |
r1 MAC |
0x0806(ARP) |
0x0800(IP) |
r1 IP |
pc1 IP |
數據 |
第五步:
pc1——>1、更新r1的MAC和IP到ARP表;2、更新r1的MAC到MAC表——>封裝ping報文(ICMP回顯請求報文,ICMP是IP報文),發送
ICMP回顯請求(pc1)
DM |
SM |
協議類型 |
Protocol |
ICMP類型 |
SI |
DI |
Data |
r1 MAC |
pc1 MAC |
0x0800(IP) |
1(ICMP) |
8(ping request) |
pc1 IP |
pc2 IP |
數據 |
第六步:
SW1——>從s1收到報文,加上VLAN10標簽——>查PCT表,DM+VLAN(r1)命中s2接口——>從s2發出
ICMP回顯請求(SW1)
DM |
SM |
幀Tpye |
VID |
協議類型 |
Protocol |
ICMP類型 |
SI |
DI |
Data |
r1 MAC |
pc1 MAC |
0x8100(802.1q) |
VLAN 10 |
0x0800(IP) |
1(ICMP) |
8(ping request) |
pc1 IP |
pc2 IP |
數據 |
第七步:
R——>路由接口r1收到報文,DM和端口MAC是否相等(相等)——>三層轉發——>查FIB表項——>目的IP最長匹配,主機(否!),網段(192.168.1.0,匹配!),命中出接口r2——>路由接口r2和1.0網段直連,根據目的IP(pc2)查ARP表,ARP MISS! ——>封裝ARP請求報文,加上VLAN20(r2)標簽,在VLAN20廣播
ARP請求(路由接口r2)
DM |
SM |
幀Tpye |
VID |
以太幀類型 |
映射協議類型 |
SI |
DI |
Data |
全f(廣播地址) |
r2 MAC |
0x8100(802.1q) |
VLAN 20 |
0x0806(ARP) |
0x0800(IP) |
r2 IP |
pc2 IP |
數據 |
第八步:
SW2——>從w2(trunk)收到ARP報文,w2屬於VLAN20:1、更新SM+VLAN(r2)到PCT表——>在VLAN20廣播——>去掉VLAN標簽, 從w1(access)發出
ARP請求(SW2)
DM |
SM |
以太幀類型 |
映射協議類型 |
SI |
DI |
Data |
全f(廣播地址) |
r2 MAC |
0x0806(ARP) |
0x0800(IP) |
r2 IP |
pc2 IP |
數據 |
第九步:
pc2——>收到SW2報文:1、更新r2的MAC和IP到ARP表;2、更新r2的MAC到MAC表——>目的IP是自己,響應ARP請求,發送報文
ARP響應(pc1)
DM |
SM |
以太幀類型 |
映射協議類型 |
SI |
DI |
Data |
r2 MAC |
pc2 MAC |
0x0806(ARP) |
0x0800(IP) |
pc2 IP |
r2 IP |
數據 |
第十步:
SW2:——>從w1(access)收到ARP報文,加上VLAN20標簽:1、更新SM+VLAN(pc2)到PCT表——>查PCT表,DM+VLAN(r2)命中w2接口——>從w2發出
ARP響應(SW2)
DM |
SM |
幀Tpye |
VID |
以太幀類型 |
映射協議類型 |
SI |
DI |
Data |
r2 MAC |
pc2 MAC |
0x8100(802.1q) |
VLAN 20 |
0x0806(ARP) |
0x0800(IP) |
pc2 IP |
r2 IP |
數據 |
第十一步:
R——>路由接口r2收到SW2報文:1、更新直連路由pc2到FIB表;2、更新pc2的MAC和IP到ARP表;3、更新SM+VLAN(pc2)到PCT表;——>構造ICMP報文,加上VLAN20標簽,從r2口發送
ICMP回顯請求(R)
DM |
SM |
幀Tpye |
VID |
協議類型 |
Protocol |
ICMP類型 |
SI |
DI |
Data |
pc2 MAC |
r2 MAC |
0x8100(802.1q) |
VLAN 20 |
0x0800(IP) |
1(ICMP) |
8(ping request) |
pc1 IP |
pc2 IP |
數據 |
第十二步:
SW2——>從w2(trunk)收到ICMP報文,w2屬於VLAN20——>查PCT表,DM+VLAN(pc2)命中w1接口——>去掉VLAN標簽,從w1口發出
ICMP回顯請求(SW2)
DM |
SM |
協議類型 |
Protocol |
ICMP類型 |
SI |
DI |
Data |
pc2 MAC |
r2 MAC |
0x0800(IP) |
1(ICMP) |
8(ping request) |
pc1 IP |
pc2 IP |
數據 |
第十三步:
pc2——>收到ICMP回顯請求:1、更新路由pc1到路由表——>目的IP是自己,發送ICMP回顯應答報文——>查路由表,命中r2下一跳——>查ARP表,獲得r2的MAC地址——>封裝ICMP報文,發送
ICMP回顯應答(pc2)
DM |
SM |
協議類型 |
Protocol |
ICMP類型 |
SI |
DI |
Data |
r2 MAC |
pc2 MAC |
0x0800(IP) |
1(ICMP) |
0(ping reply) |
pc2 IP |
pc1 IP |
數據 |
Attention:
至此,SW1、SW2的PCT表;路由器R的FIB表、ARP表、PCT表都已經完備,直接轉發ICMP回顯應答報文。
在pc1收到ICMP報文時,會更新pc2路由到路由表。
第十四步:
pc1——>收到ICMP回顯應答:1、更新路由pc2到路由表——>讀取報文數據,處理后顯示到屏幕。
主機顯示結果
三層轉發機制:依賴IP轉發,不改變報文目的IP和源IP,改變源MAC和目的MAC。
(表項查詢步驟:1、查FIB表,找下一跳,命中出接口。2、查ARP表,命中下一跳MAC;否則ARP miss,ARP廣播。3、查PCT表,命中物理出接口。)
二層轉發機制:依賴MAC(+VLAN)轉發,只關注目的MAC。
(表項查詢步驟:查PCT表,命中物理出接口;否則在以太網(VLAN)內廣播報文。)
路由器更新:FIB表,ARP表,MAC表
主機更新:ARP表,MAC表
交換機更新:MAC表
找不到ARP表項就發ARP請求報文,誰發的ARP請求,報文中的源MAC就是誰。