CCNA - Part10 數據包的通訊過程

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

網關的概念:網絡

對於像 PC 等終端設備來講,經過交換機能夠實現同網段的通訊。但若是想要給其餘網段發生數據,就不行了,由於自己沒有路由的功能,不知道該發給誰。這時就提出了一個網關的概念,爲這些終端設備配置上,當想要實現跨網段的通訊時,就把數據發送到配置的網關地址上。通常來講,默認配置的網關地址都是路由的接口地址。測試

ARP

什麼是 ARP?3d

ARP - Address Resolution Protocol. 在封裝數據幀-鏈路層的數據包時,因爲上層已經有了目的 IP 地址。而在鏈路層須要封裝 SMAC 和 DMAC,但目的 MAC 如何獲取呢?就是經過 ARP 協議,完成 IP 地址到物理地址的映射。但須要注意的是,ARP 不能穿越路由器,也就是跨網段傳輸。代理

ARP 原理

假設這裏出現的設備均是第一次啓動。把路由器的路由功能關閉,這裏的 R1 表明的就是 PC 了,不然是 Ping 不通.code

這裏 R1 想要給 PC 發送 IP 數據包,只有按照要求封裝成 2 層數據幀的格式才能夠,步驟以下:blog

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

  2. 接着發送 ARP 廣播(將 ARP 廣播添加幀頭部發送),交換機轉發該廣播到該網絡的每個主機,路由

  3. 每一個主機收到後開始解封裝,進而查看到 ARP 報文中的目的 IP,若是該 IP 和本身的 IP 一致,那麼作出 ARP 響應報文(單播),不然丟棄。io

  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 地址是在不斷髮生變化的。

相關文章
相關標籤/搜索