CCNA - Part10 資料包的通訊過程

以終為始發表於2020-07-20

這篇文章主要是對資料包在同網段和不同網段的轉發流程梳理,使用 ping 命令進行實際抓包測試。

閘道器的概念:

對於像 PC 等終端裝置來說,通過交換機可以實現同網段的通訊。但如果想要給其他網段發生資料,就不行了,因為本身沒有路由的功能,不知道該發給誰。這時就提出了一個閘道器的概念,為這些終端裝置配置上,當想要實現跨網段的通訊時,就把資料傳送到配置的閘道器地址上。一般來說,預設配置的閘道器地址都是路由的介面地址。

ARP

什麼是 ARP?

ARP - Address Resolution Protocol. 在封裝資料幀-鏈路層的資料包時,由於上層已經有了目的 IP 地址。而在鏈路層需要封裝 SMAC 和 DMAC,但目的 MAC 如何獲取呢?就是通過 ARP 協議,完成 IP 地址到實體地址的對映。但需要注意的是,ARP 不能穿越路由器,也就是跨網段傳輸。

ARP 原理

假設這裡出現的裝置均是第一次啟動。把路由器的路由功能關閉,這裡的 R1 代表的就是 PC 了,否則是 Ping 不通.

這裡 R1 想要給 PC 傳送 IP 資料包,只有按照要求封裝成 2 層資料幀的格式才可以,步驟如下:

  1. 發現目前有源 MAC 地址,卻沒有目的 MAC 地址,那麼封包不成功,暫時將包快取。

  2. 接著傳送 ARP 廣播(將 ARP 廣播新增幀頭部傳送),交換機轉發該廣播到該網路的每一個主機,

  3. 每個主機收到後開始解封裝,進而檢視到 ARP 報文中的目的 IP,如果該 IP 和自己的 IP 一致,那麼做出 ARP 響應報文(單播),否則丟棄。

  4. R1 收到 PC 的響應報文後,開始解封裝,並檢視 ARP 報文中的目的 IP,新增到缺少的目的 MAC,最後再傳送到資料到 PC。

ARP 分類

標準 ARP:用於獲取 MAC 的 ARP 協議。

代理 ARP:正常來說,如果某個介面收到的網路層 IP 不是自己的話,就會把包丟掉。但如果在路由器的上介面配置了代理 ARP,路由器在收到資料包後,會先檢視自己的路由表,看能不能到達,能到達的話。就將自己介面的 MAC 地址回覆給請求方。注意真的 MAC 可能是另一網段的裝置。其實這裡就是一種欺騙行為,欺騙傳送者自己的 IP 和 MAC.

無故(免費) ARP:用於檢測 IP 地址是否衝突,已經被其他介面使用。目的和源 IP 都是自己.(在介面第一次啟動時傳送。)

同網段的資料通訊

這裡出現的裝置均是第一次啟動,把路由器的路由功能關閉,這裡的 R1 代表的就是 PC 了,否則是 Ping 不通的

這裡 R1 想要給 PC 傳送 IP 資料包,只有按照要求封裝成 2 層資料幀的格式才可以。這時發現目前有源 MAC 地址,卻沒有目的 MAC 地址,那麼封包不成功,暫時將包擱置。接著傳送 ARP 廣播(將 ARP 廣播新增幀頭部傳送,幀結構如下圖)

交換機收到該資料包後發現目的 MAC 為 ffff:ffff:ffff, 根據交換機的轉發規則,先將 R1 的源 MAC 和自己埠號(e0/0)存入 MAC 表,然後進行泛洪操作,廣播到該網路的每一個主機。

每個主機收到後開始解封裝,進而檢視到 ARP 報文中的目的 IP,PC 發現目的 IP 和自己的 IP 一致,接著傳送 ARP 響應報文(如下圖)

交換機收到 PC 的 ARP 應答報文後,由於目的 MAC 地址在本身的 MAC 表裡已經存在,進而直接轉發給 R1。

R1 收到 PC 的響應報文後,開始解封裝,並檢視 ARP 報文中的目的 MAC,新增到擱置的缺少目的 MAC 的資料包,接著將封裝好的資料幀傳送到 PC (ping 命令 在傳輸層是 ICMP 協議)

不同網段之間的通訊

這裡注意一下,兩臺 PC 機要配置閘道器,否則 ARP 包內的內容可能不一樣
不管終端的目的是哪裡,首先都要將資料包傳送到閘道器

PC1 要給 PC2 傳送 ICMP 包,首先要傳送到閘道器,我們先模擬下封包過程:

封裝 4 層 ICMP 頭
封裝 3 層 IPV4 頭,源 IP 為 12.1.1.1 目的 IP 為 23.1.1.2
封裝 2 層 頭,源 MAC 為 aabb.cc00.1000 目的 MAC(也就是閘道器的 MAC) 不清楚
封裝暫停。

PC1 開始傳送 ARP 報文,獲取閘道器 MAC,報文如下:

路由器 R2 收到 ARP 請求報文,開始解封裝,發現報文中的 Sender IP 是自己,那麼進行 ARP 報文回覆,並將 PC1 的源 MAC 和源 IP 記錄在自己 ARP 快取表中,報文如下:

PC1 收到 ARP 應答報文,進行解封裝,取出報文中缺少的 MAC 地址,新增到擱置的 ICMP 的包中,PC1 順利的將資料包傳送至閘道器

R2 收到發來的 ICMP 包後,進行解封裝,進行到第三層時,傳送目的 IP 是自己可達網段中的 IP。因此進行轉發,開始封裝新的 ICMP 資料包

封包過程如下:

  1. 三層不變
  2. 封裝二層,封裝源 MAC:aabb.cc00.2010 ,目的 MAC (PC2 終端 MAC)不清楚
  3. 封包暫停

R2 開始傳送 ARP 報文,請求 PC2 的 MAC 地址,報文如下:

交換機收到 ARP 請求報文,將 R2 的 e0/1 的 MAC 地址和自己的埠號(e0/0) 記錄在 MAC 地址表內,然後根據規則進行泛洪.

PC2 收到 ARP 解析包後,傳送 ARP 包中的目的 IP 是自己,因此進行 ARP 應答,並將 ARP 請求中的源 MAC (aa:bb:cc:00:20:10) 和 源 IP(23.1.1.1) 記錄在自己的 ARP 快取表中,應答報文如下:

交換機收到 PC 的 ARP 應答報文後,先將 PC2 的 e0/0 MAC 地址和自己的埠號(e0/1) 記錄字 MAC 地址表內,接著發現要去資料包要去的 MAC 地址在自己的 MAC 表內,因此直接轉發。

R2 收到 ARP 應答報文,取出 PC2 的 MAC 地址,並新增到擱置的 ICMP 包中,封包成功。接著將 ICMP 包發給 PC2,同時也將 PC2 的 MAC 地址和 IP 記錄在自己的 ARP 快取表中。

PC2 收到 ICMP 包發現,三層包中目的 IP 是自己,接著進行 ICMP 應答,我們再來模擬一下封包的過程:
封裝 4 層 ICMP 頭
封裝 3 層,源 IP:23.1.11 目的 IP:12.1.1.1
封裝 2 層,源 MAC:aabb.cc00.4000 目的MAC:閘道器 MAC(aabb.cc00.2010)(在 ARP 快取表中取得)
然後進行發包。

交換機收到資料包後,傳送目的 MAC 在自己的 MAC 表中有,直接轉發給 R2,R2 收到資料包後,解 封 2 層,發現 3 層中要去的網段自己能到達,因此開始封裝包:
3 層不變
2 層的源 MAC 為自己的 MAC 地址(e 0/0),目的 MAC 為 aabb.cc00.1000 (從 ARP 快取表中取得),

報文如下:

最後我們可以發現,資料包在跨網段傳輸時,網路層的 IP 是固定不變的,但是 MAC 地址是在不斷髮生變化的。

相關文章