原文:https://cloud.tencent.com/developer/article/1173761
轉發表(MAC表)、ARP表、路由表總結
在這篇文章中:
全文概要
計算機網絡中一個關鍵步驟在於通信路徑上不同節點對於流經本節點的數據包轉發,常見的交換設備主要是交換機(第二層、三層)和路由器(第三層),在實際運行時,它們各自維護一些表結構幫助完成數據包的正確尋址與轉發,本文詳細介紹了三張至關重要的表:轉發表、ARP表與路由表的在網絡數據包轉發功能中發揮的作用,以及它們協同工作的原理,順便也會接着之前的文章繼續談談交換機和路由器的一些事兒。
網絡分層協議
計算機網絡是將地理上隔離的計算節點從物理上相連(雙絞線、光纖、無線信號等),並采用分層方式,將計算機網絡自頂向下依次分為五層:應用層->傳輸層->網絡層->數據鏈路層->物理層,對應設計有一整套網絡協議棧,各層次分別運行有多種協議,下層向緊鄰上層提供服務並隱藏通信細節,上層調用緊鄰下層提供的服務,完成主機不同層次之間的對等通信,高層(應用層、傳輸層、網絡層)之間借此實現邏輯相連通信。之所以稱為“邏輯通信”,是因為不同主機相同的較高層次之間好像是沿水平方向傳送數據,但事實上這兩個對等層次之間並沒有一條水平方向的物理連接,舉例說明如下:
- 傳輸層協議用於實現應用進程間邏輯通信,這是因為進程本來就是便於資源分配與管理而發明的邏輯概念,並不是物理實體,無法從物理上產生關聯;
- 網絡層協議用於實現主機間邏輯通信,這是因為兩個通信主機通常位處網絡拓撲中的不同位置,大多時候並非直接從物理上相連,之間需要一條根據路由協議選路確定的通信路徑,網絡層協議負責數據包最終能夠發送給目的主機,但向上(即給運輸層)只提供盡力而為(Best-Effort)的數據包服務;
- 數據鏈路層用於實現點到點通信,由於不同節點在物理上通過真實的數據鏈路相連,不能再算是邏輯通信。
轉發表(Forwarding Table)
MAC地址
MAC地址(Media Access Control Address),即媒體訪問控制地址,通常也稱為以太網地址或物理地址,它是一個用於確認網絡設備位置的地址,每個網絡設備(如網絡適配器(Network Adapter),即網卡(Network Interface Card, NIC))都有世上唯一的MAC地址,一台設備若有多張網卡,則每個網卡都必須具有一個唯一的MAC地址,這個是在網絡設備出廠時由廠商燒制確定。
MAC地址共48位,即6個字節,通常每4位構成一個16進制數,從而可以表示成xx:xx:xx:xx:xx:xx的形式,每個x都是一個16進制數。其中ff:ff:ff:ff:ff:ff為廣播地址,以此作為目的地址的數據包會被交換機廣播至全部端口,發到與其端口相連的全部局域網;01:xx:xx:xx:xx:xx是多播地址。
工作流
轉發表,又稱MAC表,聊到它就不得不提到交換機里,因為交換機就是根據轉發表來轉發數據幀的。
交換機本質上也是一個計算機,擁有計算(CPU)、存儲(SRAM或TCAM)和網絡資源(轉發芯片和鏈路),甚至還會安裝專用操作系統,它會維護一張記錄着局域網主機端口MAC地址與交換機端口對應的表,交換機就是根據這張表負責將數據幀傳輸到指定的主機端口上的。
交換機具有“存儲轉發”功能:
- 交換機在接收到數據幀以后,首先會記錄數據幀中的源MAC地址和對應的到達端口到MAC表中,這一過程通常稱為“自學習”,不需要任何的人工干預;
- 接着,交換機檢查自己的MAC表是否有數據幀中目的MAC地址的匹配條目,如果有,則會根據MAC表中記錄的對應端口將數據幀轉發出去,這一轉發方式稱為“單播”(Unicast)。而如果沒有,則會將該數據幀從非達到端口的其它全部端口發送出去,這一轉發方式程序稱為“廣播”(Broadcast)。
下面會以圖示的方式詳細講解交換機傳輸數據幀的過程,下面先來看看單個交換機轉發的情形:

步驟如下:
- 主機A會將一個源MAC地址為本機網卡物理地址,目的MAC地址為主機B網卡物理地址的數據幀發送給交換機1;
- 交換機收到此數據幀后,首先將數據幀中的源MAC地址和對應的輸入端口0記錄到交換機維護的MAC地址表中;
- 然后交換機會檢查自己的MAC地址表中是否有數據幀中的目的MAC地址的信息,如果有,則從MAC地址表中記錄的對應端口發送出去,如果沒有,則會將此數據幀從非接收端口的所有端口發送出去,這里僅從端口1發出;
- 這時,局域網的所有主機(通過交換機相連的全部主機)都會收到此數據幀,但是只有主機B收到此數據幀時會響應這個廣播幀,並回應一個數據幀(這個回應由什么機制確定的,需要再查資料確定一下~TCP的ACK包?),此數據幀中包括主機B網絡設備的MAC地址;
- 當交換機收到主機B回應的數據幀后,也會記錄數據幀中的源MAC地址,即主機B網絡設備的MAC地址,這時,再當主機A和主機B相互通信時,交換機就根據MAC地址表中的記錄,實現單播了,一趟轉發流程實際交換機就“學習”到了兩個轉發表條目。
那么當局域網內存在多個交換機互連時,交換機的MAC地址表要如何記錄呢?下圖就展示了該種情形:

步驟如下:
- 主機A將一個源MAC地址為本機網卡物理地址,目的MAC地址為主機C網卡物理地址的數據幀發送給交換機1;
- 交換機1收到此數據幀后,會學習源MAC地址,並檢查MAC地址表,發現沒有目的MAC地址的記錄,則會將數據幀廣播出去,主機B和交換機2都會收到此數據幀;
- 交換機2收到此數據幀后也會將數據幀中的源MAC地址和對應的端口記錄到MAC地址表中,並檢查自己的MAC地址表,發現沒有目的MAC地址的記錄,則會廣播此數據幀,主機C和主機D都會收到此數據幀;
- 主機C收到數據幀后,會響應這個數據幀,並回復一個源MAC地址為本機網卡物理地址的數據幀,該幀最終會送往主機A,這時交換機1和交換機2都會將主機C的MAC地址記錄到自己的MAC地址表中,並且以單播的形式將此數據幀發送給主機A;
- 這時,主機A和主機C通信就可以以單播的形式傳輸數據幀了,A與D、B與C及B與D的通信與上述過程一樣,因此交換機2的MAC地址表中記錄着主機A和主機B的MAC地址都對應其端口3。
小結
從以上兩幅圖可以看出,交換機具有動態自學習源MAC地址與物理端口映射的功能,並且交換機的一個端口可以對應多個MAC地址,但是一個MAC地址只能對應一個端口。
注:交換機動態學習的MAC地址默認只有300s的有效期,如果300s內記錄的MAC地址沒有對應的通信過程來更新對應條目,則會自動刪除此記錄,這是由交換機中的一個計時器所維護的。
ARP表(Address Resolution Table)
ARP協議
首先明確一點,在以太網環境下,同一個網段的主機之間需要知道對方的MAC地址,才能進行通信。
上一節介紹了交換機的工作原理,了解到交換機是根據MAC尋址,查表確認輸出端口以完成本節點轉發任務的。看到這里其實應該可以拋出從一開始就被我們忽視了的問題:在初始構造數據包准備發送時,源主機究竟要如何獲得目的主機網絡設備MAC地址的呢?這時,就需要使用到ARP協議。在網絡拓撲中的每個節點或說主機上,實際都維護有一張ARP表,它記錄着主機的IP地址(網絡地址)到MAC地址(物理地址)的映射關系。
ARP協議,即地址解析協議,它是一個網絡層協議,運行在各網絡節點上,負責完成主機IP地址到MAC地址的映射。
工作流
接下來根據下圖,詳細講解一下ARP協議的工作原理:

步驟如下:
- 如果主機A想發送數據包給同一網段內的另一台主機B(通過交換機相連的節點處於同一網段),很明顯,A的用戶應用程序要么已經知道B的IP地址,或者說域名(Domain Name,DNS協議會完成主機名到IP地址的映射,這里不是重點),那么主機A首先會檢查自己的ARP緩存表(ARP Cache),查看是否有主機B的IP地址與其MAC地址的對應關系,如果有,則直接將主機B網絡設備的MAC地址作為目的MAC地址封裝到數據幀中,無需進一步操作即獲取到數據幀封裝所需的全部信息,此后完成封裝並發送數據幀到目的MAC地址。如果沒有,主機A則會發送一個ARP請求信息(ARP Request),請求的目的IP地址是主機B的IP地址,目的MAC地址是MAC層的廣播地址(即ff:ff:ff:ff:ff:ff),源IP地址和MAC地址是主機A的IP地址及其MAC地址;
- 當交換機接收到此數據幀之后,發現此幀是廣播幀,因此,會將此數據幀從非接收的所有端口發送出去;
- 同一網段中的所有節點都會接收到該ARP請求數據包,目的IP不匹配的節點會直接忽略該請求,而當主機B接收到此數據幀后,解析到IP地址與自己的IP地址一致,先將主機A的IP地址及其MAC地址的對應關系記錄到自己的ARP緩存表中,同時會發送一個ARP應答(ARP Response),應答數據包源MAC地址即主機B自身網絡設備的MAC地址,該應答通過交換機轉發至主機A;
- 主機A在收到這個回應的數據幀之后,在自己的ARP緩存表中記錄主機B的IP地址和MAC地址的對應關系。而此時主機A已經可以繼續封裝准備發往主機B的數據幀,而交換機也已經學習到了主機A和主機B的MAC地址與其端口的對應關系,之后主機A發送的數據幀通過交換機轉發至主機B。
這里有一點值得注意的是傳輸過程中IP地址與MAC的地址的變化問題:
- MAC地址在同一個廣播域中傳播時始終不變,但在跨越廣播域(即經過路由器)時,會由於重新封裝而改變,源MAC地址將變為路由器的輸出端口的MAC地址,目的MAC地址隨網絡拓撲實際情況而定,若路由器與目的主機所在網段直連,此時目的MAC地址就是目的主機的MAC地址;而不管是源IP地址還是目的IP地址,在數據包傳輸過程中都始終不會改變。
小結
網絡中每個節點都會通過運行ARP協議而維護節點內部的一張ARP緩存表,用於完成從IP地址到MAC地址的映射,在發送數據之前往往會先查詢本地ARP表中對應目的IP地址的MAC地址,若沒有表項則會發起ARP廣播請求直至獲取對應主機響應並發來應答,將該應答中包含的目的IP地址與MAC地址的映射關系添加到ARP緩存表之后,在數據鏈路層就可以以該MAC地址為目的MAC地址封裝數據幀並發送。
路由表(Routing Table)
IP地址
IP地址(Internet Protocol Address),即互聯網協議地址,也稱為網絡層地址或主機地址,是分配給網絡上的各個網絡設備的地址。
現在流行的IP協議有兩個版本:IPv4(Internet Protocol Version 4)和IPv6(Internet Protocol Version 6)。其中,IPv4地址為32位,即4個字節,為便於使用,常以xxx.xxx.xxx.xxx每個字節8位從二進制表示為十進制數,這種表示方法稱為點分十進制,地址可分為A、B、C、D、E五大類,32位全為1的IP地址:255.255.255.255稱為“受限廣播地址”(Limited Broadcasr Destination Address),用於將一個分組以廣播方式發送給本網絡中的所有主機,路由器則阻擋該分組通過,將其廣播功能限制在本網內部,因此可以說路由器隔離了廣播域(交換機隔離了沖突域)。
隨着網絡規模和節點數量的不斷擴展,出於32位的IPv4將很快被分配使用殆盡的擔憂,又推出了IPv6地址,128位,16個字節,通常每4位表示為一個16進制數,16個字節分為8組,每組包含2個字節即4個16進制數,組與組之間以冒號分割:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff為IPv6協議下的廣播地址。
IP VS MAC
MAC地址和IP地址本質都是網絡設備物理端口的性質,都可用於尋址網絡設備,但如果它們功能類似,僅是工作的層次不同的話,兩者之間應該可以通過某種機制實現相互替換,但為什么它們能共存至今呢?
對於MAC地址和IP地址的比較,有人曾這么比喻:一個人已經有了手機號(IP地址),為什么還要有身份證號呢(MAC地址)?身份證號是一個人的唯一標識號,只要有這個號碼就能找到該人,但是為啥他的朋友們不用身份證號來尋找該人而用手機號呢?對,因為方便。但是如果該人犯罪,警察用手機號呼叫尋找該人,傻子才會接吧…而且換了號碼怎么辦?那不就得用你的身份證號在全國發布通緝令,利用身份證號在全國各種系統范圍(消費、社交、醫療)內搜索該人的記錄,才能最終定位該人實施有效逮捕嘛。
上述例子實際就契合了兩種地址存在的意義:IP地址是邏輯地址,根據網絡協議,在不同的地理位置加入互聯網就會分配到完全不同的IP地址(DHCP動態分配IP地址),但由於屬於網絡層,相對較高的抽象層次設計的初衷就是為了簡化通信,方便使用,尤其對於用戶進程而言;MAC地址是物理地址,工作在數據鏈路層,一旦出廠時由廠商確定並燒制入網絡設備的EPROM中就具有了固定的全球唯一的地址,任何時候任何條件都不會改變,雖說使用起來不太方便,且描述的是較低層的數據鏈路通信細節,但在任何時候都可用於數據通信尋址。
更嚴謹完善的解釋如下:
問題:既然每個以太網設備在出廠時都有一個唯一的MAC地址了,那為什么還需要為每台主機再分配一個IP地址呢?或者說為什么每台主機都分配唯一的IP地址了,為什么還要在網絡設備(如網卡,集線器,路由器等)生產時內嵌一個唯一的MAC地址呢? 解答:主要原因基於以下幾點: (1)IP地址的分配是根據網絡的拓撲結構,而不是根據誰制造了網絡設置。若將高效的路由選擇方案建立在設備制造商的基礎上而不是網絡所處的拓撲位置基礎上,這種方案是不可行的; (2)當存在一個附加層的地址尋址時,設備更易於移動和維修。例如,如果一個以太網卡壞了,可以被更換,而無須取得一個新的IP地址。如果一個IP主機從一個網絡移到另一個網絡,可以給它一個新的IP地址,而無須換一個新的網卡; (3)無論是局域網,還是廣域網中的計算機之間的通信,最終都表現為將數據包從某種形式的鏈路上的初始節點出發,從一個節點傳遞到另一個節點,最終傳送到目的節點。數據包在這些節點之間的移動都是由ARP協議負責將IP地址映射到MAC地址上來完成的。
下面再通過一個例子看看IP地址和MAC地址是怎樣結合起來傳送數據包的:
假設網絡上要將一個數據包(名為PAC)由北京的一台主機(名稱為A,IP地址為IP_A,MAC地址為MAC_A)發送到紐約的一台主機(名稱為B,IP地址為IP_B,MAC地址為MAC_B)。這兩台主機之間不太可能是直連起來的,因而數據包在傳遞時必然要經過許多中間節點(如路由器,網關服務器等),假定在傳輸過程中要經過C1、C2、C3(其輸入、輸出端口的MAC地址分別為M1_In/M1_Out,M2_In/M2_Out,M3_In/M3_Out)三個節點。A在將PAC發出之前,先發送一個ARP請求,找到其要到達IP_B所必須經歷的第一個中間節點C1的到達端口MAC地址M1_In,然后在其數據包中封裝地址:IP_A、IP_B,MAC_A和M1_In。當PAC傳到C1后,再由ARP根據其目的IP地址IP_B,找到其要經歷的第二個中間節點C2的到達端口MAC地址M2_In,然后再封裝目的MAC地址為M2_Out的數據包傳送到C2。如此類推,直到最后找到IP地址為IP_B的B主機的MAC地址MAC_B,最終傳送給主機B。在傳輸過程中,數據包源IP地址IP_A、目的IP地址IP_B不變,而源MAC地址和目的MAC地址,由於中間節點重新封裝數據幀而不斷改變,直至目的地址MAC地址為MAC_B,數據包最終到達目的主機B。
綜上所述,IP地址和MAC地址相同點是它們都可以作為設備地址標識,不同則主要體現以下幾個方面:
- 對於網絡上的某一設備,如一台計算機或一台路由器,其IP地址可變(但必須唯一),而MAC地址不可變。我們可以根據需要給一台主機指定任意的IP地址,如我們可以給局域網上的某台計算機分配IP地址為192.168.0.112 ,也可以將它改成192.168.0.200。而任一網絡設備(如網卡,路由器)一旦生產出來以后,其MAC地址永遠唯一且不能由用戶改變;
- 長度不同。IP地址為32位4字節,MAC地址為48位6字節;
- 分配依據不同。IP地址的分配是基於網絡拓朴,MAC地址的分配是基於制造商;
- 尋址協議層不同。IP地址應用於OSI第三層,即網絡層,而MAC地址應用在OSI第二層,即數據鏈路層。 數據鏈路層協議可以使數據從一個節點傳遞到同一段鏈路的另一個節點上(通過MAC地址尋址),而網絡層協議使數據可以從一個網絡傳遞到另一個網絡上(ARP根據目的IP地址,找到中間節點的MAC地址,通過中間節點轉發,從而最終到達目的網絡)。
工作流
路由器負責不同網段(Subnet, 子網)之間的通信,每個與路由器端口相連的網絡被稱為一個子網或網段,也就是一個廣播域。在路由器中也有一張表,這張表叫做路由表,通過在網絡節點上運行路由協議,記錄並更新去往不同網段的路徑信息。路由表中的信息分為直連路由和非直連路由:
- 直連路由:直接連接到路由器端口的網段,該信息由路由器自動生成;
- 非直連路由:不是直接連接到路由器端口的網段,此記錄需要手動添加或使用動態路由生成。
本機Linux系統下, 雙網卡em1(114.212.84.179)與virbr0(192.168.122.1),執行命令:route -n,獲取到內核IP路由表的數值展示形式如下:
table th:nth-of-type(1) { width: 100px; } table th:nth-of-type(2) { width: 100px; } table th:nth-of-type(3) { width: 100px; }
Destination |
Gateway |
Genmask |
Flags |
Metric |
Ref |
Use |
Iface |
---|---|---|---|---|---|---|---|
114.212.80.0 |
0.0.0.0 |
255.255.248.0 |
U |
100 |
0 |
0 |
em1 |
192.168.122.0 |
0.0.0.0 |
255.255.255.0 |
U |
0 |
0 |
0 |
virbr0 |
0.0.0.0 |
114.212.80.1 |
0.0.0.0 |
UG |
100 |
0 |
0 |
em1 |
解析上述路由表:
第一項:目的網絡為114.212.80.0/21,網關地址為0.0.0.0(“...“的數值形式),這表示該網段屬於與路由器某端口直連的網段,數據包將從路由器em1接口輸出; 第二項:目的網絡為192.168.122.0/24,網關地址同樣為0.0.0.0,表示該網段屬於與路由器某端口直連的網段,數據包將從路由器virbr0接口輸出; 第三項:目的網絡為0.0.0.0(“default”的數值形式)時,即匹配任意網段,由於路由表匹配執行最先匹配策略,第三項就是當目的IP地址無法與前兩項匹配時的成功匹配項,對應的網關稱為默認網關,即路由器中沒有存儲某個目的網絡的表項時應該轉發至的下一跳地址,從em1端口輸出。
路由器中記錄的條目有的需要手動添加,稱為靜態路由;有的則是動態獲取的,稱為動態路由。表中的每個條目都有以下屬性:
- 目的網絡地址(Destination):網絡地址和網絡掩碼相與的結果用於定義本機可以達到的目的網絡范圍,通常情況下,目的網絡范圍包含以下幾種情況: (1) 主機地址:某個特定主機的網絡地址; (2) 子網地址:某個特定子網的網絡地址; (3) 默認路由:所有未在路由表中指定的網絡地址,用0.0.0.0統一匹配,用於配置默認網關;
- 網絡掩碼(Genmask):又稱為子網掩碼(Subnet Mask),是一個32位地址,作用是將一個同樣也是32位的IPv4地址划分成網絡地址(Network Address)和主機地址(Host Address)。子網掩碼不能單獨存在,它必須結合IP地址一起使用。子網掩碼是用來判斷任意兩台主機是否處於同一網段的根據,簡單來說就是兩台主機各自的IP地址與本機配置的子網掩碼做按位與操作,如果結果相同,則說明這兩台主機是處於同一網段,可以進行直接的通訊,而無需路由器的轉發;
- 網關(Gateway,又被稱為下一跳服務器(Next Hop Server)):發送IP數據包時,網關定義了針對特定的網絡目的地址,數據包將要被發送到的下一跳IP地址。如果是與路由器直接相連的網段,網關通常就是路由器對應的網絡端口的IP地址,但是此時接口必須與網關一致。如果是遠程網絡或默認路由,網關通常是與路由器相連網絡上的某個服務器或路由器。如果目標是本主機所屬網絡,不需要路由,網關顯示為”*“;
- 接口(Iface):接口定義了針對特定的網絡目的地址,路由器用於轉發數據包的網絡接口(路由器的物理端口)。網關必須位於和接口相同的子網(默認網關除外),否則造成在使用此路由項時需調用其他路由項,從而可能會導致路由死鎖;
- 跳數(Metric):跳數用於指出路由的成本,通常情況下代表到達目標地址所需要的總跳數,一個跳數代表經過一個路由器,IP數據報首部中的TTL字段就是該數據報所能存活的總跳數。跳數越少往往代表着該路由成本越低,跳數越多則說明成本越高。當具有多條達到相同目的網絡的路由選項時,路由算法會選擇具有更少跳數的路由。
- 標志(Flags):多種路由表項標記含義如下: (1) U:路由是動態的; (2) H:目標是一個主機; (3) G:路由指向網關; (4) R:恢復動態路由產生的表項; (5) D:由路由的后台程序動態安裝; (6) M:由路由的后台程序修改; (7) !:拒絕路由。
- 引用次數(Refs):Linux內核中未使用,一般是0;
- 查找次數(Use):此路由項被路由軟件查找的次數。
路由器是工作在網絡層的,在網絡層可以識別邏輯地址,即IP地址,也就是說數據包解析時最多可將數據幀拆包成IP數據包,路由器無法操作數據報的載荷字段,但是可以針對IP首部做些事情:當路由器的某個端口收到一個包時,路由器就會讀取包中的目地IP地址,然后在路由表中進行查找。如果在路由表中找到目的IP地址對應條目,則把包轉發到路由器的對應端口。如果沒找到,那么如果路由器配置默認路由(默認網關),就默認將所有無法解析的目的網段主機的數據包都先發往該默認網關做進一步轉發,如果沒有配置默認路由,則將該包丟棄,並返回源主機以不可達(Unreachable)的信息。這就是數據包路由的過程。
利用下圖詳細介紹路由器的工作原理:

步驟如下:
- 主機A在網絡層將來自上層的報文封裝成IP數據報,IP首部中的源IP地址為自己的IP地址,目的IP地址為主機B的IP地址。主機A會用本機配置的24位子網掩碼與目的地址進行“與”運算,得出目的地址與本機不在同一個網段(主機A位於192.168.1.0/24網段,主機B位於192.168.2.0/24網段,或稱屬於不同子網),因此發送給主機B的數據包需要經過網關路由器1的轉發;
- 主機A通過ARP請求獲得網關路由器1的E0端口的MAC地址,並在數據鏈路層將路由器E0端口的MAC地址封裝成以太網幀首部中的目的MAC地址,源MAC地址是自己的MAC地址,隨后發送數據幀給路由器1;
- 路由器1從端口E0接收到該數據幀,隨后執行解析,將數據鏈路層的首部剝落去掉,並在路由表中檢查是否有目的IP地址的網段對應表項(即192.168.2.2/24和其所在192.168.2.0/24網段),根據路由表中記錄,發往192.168.2.0/24網段(中主機)的數據包的下一跳(Next Hop)或稱網關地址為10.1.1.2/8(實際是路由器2的E1端口的IP地址),而路由器發現下一跳地址正好位處與自己E1端口直連的網段(10.0.0.0/8),於是數據在路由器1的E1端口重新封裝,此時,以太網幀的源MAC地址是路由器1的E1端口的MAC地址,目的MAC地址則是路由器2的E1端口的MAC地址,通過ARP廣播得到,封裝完畢發送數據幀給路由器2;
- 路由器2從端口E1接收到該數據幀,隨后執行解析,將數據鏈路層的首部剝落去掉,對目的IP地址進行檢測,並與路由表進行匹配,此時發現目的主機IP地址所在網段正好是自己E0端口的直連網段,路由器2於是通過ARP廣播,獲知主機B的MAC地址,此時數據包在路由器2的E0端口再次封裝,源MAC地址是路由器2的E0端口的MAC地址,目的MAC地址是主機B的MAC地址,隨后發送數據幀給主機B;
- 完成以上1~4,主機B終於接收到來自主機A的數據包。
綜上,看似較為“簡單”的跨網段主機通信,真也不是太容易的一件事兒。
小結
路由表負責記錄一個網絡到另一個網絡的路徑,路由器依賴路由協議及其確定的路由表完成三層,即網絡層的數據轉發工作。路由表項中最重要的信息在於目的網段和網關,即下一跳IP地址的對應關系,網關通常是專門的網關服務器或者路由器,而網關會負責將該數據包最終轉發至目的網段。