banner
ShuWa

ShuWa

是进亦忧,退亦忧。然则何时而乐耶?
twitter

IP/網路層

IP 基本認識#

網路層的主要作用是:實現主機與主機之間的通信,也叫點對點(end to end)通信。

網路層與數據鏈路層有什麼關係呢?#

image
MAC 的作用則是實現「直連」的兩個設備之間通信,而 IP 則負責在「沒有直連」的兩個網路之間進行通信傳輸。

image
在網路中數據包傳輸中,源 IP 地址和目標 IP 地址在傳輸過程中是不會變化的(前提:沒有使用 NAT 網路),只有源 MAC 地址和目標 MAC 一直在變化。

IP 地址的基礎知識#

在 TCP/IP 網路通信時,為了保證能正常通信,每個設備都需要配置正確的 IP 地址,否則無法實現正常的通信。
IP 地址(IPv4 地址)由 32 位正整數來表示,IP 地址在計算機是以二進制的方式處理的。
而人類為了方便記憶採用了點分十進制的標記方式,也就是將 32 位 IP 地址以每 8 位為組,共分為 4 組,每組以「.」隔開,再將每組轉換成十進制。
image

IP 地址的分類#

IP 地址分類成了 5 種類型,分別是 A 類、B 類、C 類、D 類、E 類。
image

什麼是 A、B、C 類地址?

其中對於 A、B、C 類主要分為兩個部分,分別是網路號和主機號

image

A、B、C 分類地址最大主機個數是如何計算的呢?

最大主機個數,就是要看主機號的位數,如 C 類地址的主機號占 8 位,那麼 C 類地址的最大主機個數:282=2542^8 - 2 = 254
為什麼要減 2 呢?
因為在 IP 地址中,有兩個 IP 是特殊的,分別是主機號全為 1 和全為 0 地址。
image

  • 主機號全為 1 指定某個網路下的所有主機,用於廣播
  • 主機號全為 0 指定某個網路

因此,在分配過程中,應該去掉這兩種情況。

廣播地址用於什麼?

廣播地址用於在同一個鏈路中相互連接的主機之間發送數據包。
當主機號全為 1 時,就表示該網路的廣播地址。例如把 172.20.0.0/16 用二進制表示如下:
10101100.00010100.00000000.00000000
將這個地址的主機部分全部改為 1,則形成廣播地址:
10101100.00010100.11111111.11111111
再將這個地址用十進制表示,則為 172.20.255.255。
廣播地址可以分為本地廣播和直接廣播兩種。

  • 在本網路內廣播的叫做本地廣播。例如網路地址為 192.168.0.0/24 的情況下,廣播地址是 192.168.0.255 。因為這個廣播地址的 IP 包會被路由器屏蔽,所以不會到達 192.168.0.0/24 以外的其他鏈路上。
  • 在不同網路之間的廣播叫做直接廣播。例如網路地址為 192.168.0.0/24 的主機向 192.168.1.255/24 的目標地址發送 IP 包。收到這個包的路由器,將數據轉發給 192.168.1.0/24,從而使得所有 192.168.1.1~192.168.1.254 的主機都能收到這個包(由於直接廣播有一定的安全問題,多數情況下會在路由器上設置為不轉發。)。

什麼是 D、E 類地址?

image
而 D 類和 E 類地址是沒有主機號的,所以不可用於主機 IP,D 類常被用於多播,E 類是預留的分類,暫時未使用。

多播地址用於什麼?

多播用於將包發送給特定組內的所有主機。
image
多播使用的 D 類地址,其前四位是 1110 就表示是多播地址,而剩下的 28 位是多播的組編號。
從 224.0.0.0 ~ 239.255.255.255 都是多播的可用範圍,其劃分為以下三類:

  • 224.0.0.0 ~ 224.0.0.255 為預留的組播地址,只能在局域網中,路由器是不會進行轉發的。
  • 224.0.1.0 ~ 238.255.255.255 為用戶可用的組播地址,可以用於 Internet 上。
  • 239.0.0.0 ~ 239.255.255.255 為本地管理組播地址,可供內部網在內部使用,僅在特定的本地範圍內有效。

IP 分類的優點

不管是路由器還是主機解析到一個 IP 地址時,我們判斷其 IP 地址的首位是否為 0,為 0 則為 A 類地址,那麼就能很快的找出網路地址和主機地址。
image

IP 分類的缺點

缺點一:
同一網路下沒有地址層次,比如一個公司裡用了 B 類地址,但是可能需要根據生產環境、測試環境、開發環境來劃分地址層次,而這種 IP 分類是沒有地址層次劃分的功能,所以這就缺少地址的靈活性。
缺點二:
A、B、C 類有個尷尬處境,就是不能很好的與現實網路匹配。

  • C 類地址能包含的最大主機數量實在太少了,只有 254 個,估計一個網吧都不夠用。
  • 而 B 類地址能包含的最大主機數量又太多了,6 萬多台機器放在一個網路下面,一般的企業基本達不到這個規模,閒著的地址就是浪費。

這兩個缺點,都可以在 CIDR 無分類地址解決。

無分類地址 CIDR#

IP 分類存在許多缺點,所以後面提出了無分類地址的方案,即 CIDR。
這種方式不再有分類地址的概念,32 比特的 IP 地址被劃分為兩部分,前面是網路號,後面是主機號。

怎麼劃分網路號和主機號的呢?

表示形式 a.b.c.d/x,其中 /x 表示前 x 位屬於網路號, x 的範圍是 0 ~ 32,這就使得 IP 地址更加具有靈活性。
image
還有另一種劃分網路號與主機號形式,那就是子網掩碼,掩碼的意思就是掩蓋掉主機號,剩餘的就是網路號。
將子網掩碼和 IP 地址按位計算 AND,就可得到網路號。
image

為什麼要分離網路號和主機號?

因為兩台計算機要通信,首先要判斷是否處於同一個廣播域內,即網路地址是否相同。如果網路地址相同,表明接受方在本網路上,那麼可以把數據包直接發送到目標主機。
路由器尋址工作中,也就是通過這樣的方式來找到對應的網路號的,進而把數據包轉發給對應的網路內。

image

怎麼進行子網劃分?

在上面我們知道可以通過子網掩碼劃分出網路號和主機號,那實際上子網掩碼還有一個作用,那就是劃分子網。
子網劃分實際上是將主機地址分為兩部分:子網網路地址和子網主機地址。形式如下:

  • 未做子網劃分的 ip 地址:網路地址+主機地址
  • 做子網劃分後的 ip 地址:網路地址+(子網網路地址+子網主機地址)

假設對 C 類地址進行子網劃分,網路地址 192.168.1.0,使用子網掩碼 255.255.255.192 對其進行子網劃分。
C 類地址中前 24 位是網路號,最後 8 位是主機號,根據子網掩碼可知從 8 位主機號中借用 2 位作為子網號。

公有 IP 地址與私有 IP 地址#

在 A、B、C 分類地址,實際上有分公有 IP 地址和私有 IP 地址。
image

公有 IP 地址由誰管理呢?
私有 IP 地址通常是內部的 IT 人員管理,公有 IP 地址是由 ICANN 組織管理,中文叫「互聯網名稱與數字地址分配機構」。

IP 地址與路由控制#

IP 地址的網路地址這一部分是用於進行路由控制。
路由控制表中記錄著網路地址與下一步應該發送至路由器的地址。在主機和路由器上都會有各自的路由器控制表。
在發送 IP 包時,首先要確定 IP 包首部中的目標地址,再從路由控制表中找到與該地址具有相同網路地址的記錄,根據該記錄將 IP 包轉發給相應的下一個路由器。如果路由控制表中存在多條相同網路地址的記錄,就選擇相同位數最多的網路地址,也就是最長匹配。
image

  1. 主機 A 要發送一個 IP 包,其源地址是 10.1.1.30 和目標地址是 10.1.2.10,由於沒有在主機 A 的路由表找到與目標地址 10.1.2.10 相同的網路地址,於是包被轉發到默認路由(路由器 1 )
  2. 路由器 1 收到 IP 包後,也在路由器 1 的路由表匹配與目標地址相同的網路地址記錄,發現匹配到了,於是就把 IP 數據包轉發到了 10.1.0.2 這台路由器 2
  3. 路由器 2 收到後,同樣對比自身的路由表,發現匹配到了,於是把 IP 包從路由器 2 的 10.1.2.1 這個接口出去,最終經過交換機把 IP 數據包轉發到了目標主機

環回地址是無法流向網路

環回地址是在同一台計算機上的程序之間進行網路通信時所使用的一個默認地址。
計算機使用一個特殊的 IP 地址 127.0.0.1 作為環回地址。與該地址具有相同意義的是一個叫做 localhost 的主機名。使用這個 IP 或主機名時,數據包不會流向網路。

IP 分片與重組#

當 IP 數據包大小大於 MTU 時, IP 數據包就會被分片。
經過分片之後的 IP 數據報在被重組的時候,只能由目標主機進行,路由器是無法進行重組的。

IPv6 基本認識#

IPv6 的地址是 128 位的,這可分配的地址數量是大的驚人,說個段子 IPv6 可以保證地球上的每粒沙子都能被分配到一個 IP 地址。
但 IPv6 除了有更多的地址之外,還有更好的安全性和擴展性,說簡單點就是 IPv6 相比於 IPv4 能帶來更好的網路體驗。
但是因為 IPv4 和 IPv6 不能相互兼容,所以不但要我們電腦、手機之類的設備支持,還需要網路運營商對現有的設備進行升級,所以這可能是 IPv6 普及率比較慢的一個原因。

IPv6 的亮點

IPv6 不僅僅只是可分配的地址變多了,它還有非常多的亮點。

  • IPv6 可自動配置,即使沒有 DHCP 服務器也可以實現自動分配 IP 地址,真是便捷到即插即用啊。
  • IPv6 包頭包首部長度採用固定的值 40 字節,去掉了包頭校驗和,簡化了首部結構,減輕了路由器負荷,大大提高了傳輸的性能。
  • IPv6 有應對偽造 IP 地址的網路安全功能以及防止線路竊聽的功能,大大提升了安全性。

IPv6 地址的標識方法

IPv4 地址長度共 32 位,是以每 8 位作為一組,並用點分十進制的表示方式。
IPv6 地址長度是 128 位,是以每 16 位作為一組,每組用冒號 「:」 隔開。
如果出現連續的 0 時還可以將這些 0 省略,並用兩個冒號 「::」隔開。但是,一個 IP 地址中只允許出現一次兩個連續的冒號。
image

IPv6 地址的結構

IPv6 的地址主要有以下類型地址:

  • 單播地址,用於一對一的通信
  • 組播地址,用於一對多的通信
  • 任播地址,用於通信最近的節點,最近的節點是由路由協議決定
  • 沒有廣播地址
    image

IPv6 單播地址類型

對於一對一通信的 IPv6 地址,主要劃分了三類單播地址,每類地址的有效範圍都不同。

  • 在同一鏈路單播通信,不經過路由器,可以使用鏈路本地單播地址,IPv4 沒有此類型
  • 在內網裡單播通信,可以使用唯一本地地址,相當於 IPv4 的私有 IP
  • 在互聯網通信,可以使用全局單播地址,相當於 IPv4 的公有 IP

image

IPv4 首部與 IPv6 首部#

IPv6 相比 IPv4 的首部改進:

  • 取消了首部校驗和字段。 因為在數據鏈路層和傳輸層都會校驗,因此 IPv6 直接取消了 IP 的校驗。
  • 取消了分片 / 重新組裝相關字段。 分片與重組是耗時的過程,IPv6 不允許在中間路由器進行分片與重組,這種操作只能在源與目標主機,這將大大提高了路由器轉發的速度。
  • 取消選項字段。 選項字段不再是標準 IP 首部的一部分了,但它並沒有消失,而是可能出現在 IPv6 首部中的「下一個首部」指出的位置上。刪除該選項字段使的 IPv6 的首部成為固定長度的 40 字節

IP 協議相關技術#

DNS 域名解析#

DNS 域名解析,DNS 可以將域名網址自動轉換為具體的 IP 地址。

域名的層級關係

DNS 中的域名都是用句點來分隔的,比如 www.server.com,這裡的句點代表了不同層次之間的界限。
在域名中,越靠右的位置表示其層級越高。
根域是在最頂層,它的下一層就是 com 頂級域,再下面是 server.com。
所以域名的層級關係類似一個樹狀結構:

  • 根 DNS 伺服器
  • 頂級域 DNS 伺服器(com)
  • 權威 DNS 伺服器(server.com)

域名解析的工作流程

image

ARP 與 RARP 協議#

在傳輸一個 IP 數據報的時候,確定了源 IP 地址和目標 IP 地址後,就會通過主機「路由表」確定 IP 數據包下一跳。然而,網路層的下一層是數據鏈路層,所以我們還要知道「下一跳」的 MAC 地址。
由於主機的路由表中可以找到下一跳的 IP 地址,所以可以通過 ARP 協議,求得下一跳的 MAC 地址。

那麼 ARP 又是如何知道對方 MAC 地址的呢?

ARP 是借助 ARP 請求與 ARP 響應兩種類型的包確定 MAC 地址的。

  • 主機會通過廣播發送 ARP 請求,這個包中包含了想要知道的 MAC 地址的主機 IP 地址。
  • 當同個鏈路中的所有設備收到 ARP 請求時,會去拆開 ARP 請求包裡的內容,如果 ARP 請求包中的目標 IP 地址與自己的 IP 地址一致,那麼這個設備就將自己的 MAC 地址塞入 ARP 響應包返回給主機。

操作系統通常會把第一次通過 ARP 獲取的 MAC 地址緩存起來,以便下次直接從緩存中找到對應 IP 地址的 MAC 地址。
不過,MAC 地址的緩存是有一定期限的,超過這個期限,緩存的內容將被清除。

RARP 協議你知道是什麼嗎?

RARP 協議是已知 MAC 地址求 IP 地址。例如將打印機伺服器等小型嵌入式設備接入到網路時就經常會用得到。
通常這需要架設一台 RARP 伺服器,在這個伺服器上註冊設備的 MAC 地址及其 IP 地址。然後再將這個設備接入到網路,接著:

  • 該設備會發送一條「我的 MAC 地址是 XXXX,請告訴我,我的 IP 地址應該是什麼」的請求信息。
  • RARP 伺服器接到這個消息後返回「MAC 地址為 XXXX 的設備,IP 地址為 XXXX」的信息給這個設備。

最後,設備就根據從 RARP 伺服器所收到的應答信息設置自己的 IP 地址。

DHCP 動態獲取 IP 地址#

我們的電腦通常都是通過 DHCP 動態獲取 IP 地址,大大省去了配 IP 信息繁瑣的過程。
image
先說明一點,DHCP 客戶端進程監聽的是 68 端口號,DHCP 服務端進程監聽的是 67 端口號。
這 4 個步驟:

  • 客戶端首先發起 DHCP 發現報文(DHCP DISCOVER) 的 IP 數據報,由於客戶端沒有 IP 地址,也不知道 DHCP 伺服器的地址,所以使用的是 UDP 廣播通信,其使用的廣播目的地址是 255.255.255.255(端口 67) 並且使用 0.0.0.0(端口 68) 作為源 IP 地址。DHCP 客戶端將該 IP 數據報傳遞給鏈路層,鏈路層然後將幀廣播到所有的網路中設備。
  • DHCP 伺服器收到 DHCP 發現報文時,用 DHCP 提供報文(DHCP OFFER) 向客戶端做出響應。該報文仍然使用 IP 廣播地址 255.255.255.255,該報文信息攜帶伺服器提供可租約的 IP 地址、子網掩碼、默認網關、DNS 伺服器以及 IP 地址租用期。
  • 客戶端收到一個或多個伺服器的 DHCP 提供報文後,從中選擇一個伺服器,並向選中的伺服器發送 DHCP 請求報文(DHCP REQUEST 進行響應,回顯配置的參數。
  • 最後,服務端用 DHCP ACK 報文對 DHCP 請求報文進行響應,應答所要求的參數。

一旦客戶端收到 DHCP ACK 後,交互便完成了,並且客戶端能夠在租用期內使用 DHCP 伺服器分配的 IP 地址。
如果租約的 DHCP IP 地址快期後,客戶端會向伺服器發送 DHCP 請求報文:
伺服器如果同意繼續租用,則用 DHCP ACK 報文進行應答,客戶端就會延長租期。
伺服器如果不同意繼續租用,則用 DHCP NACK 報文,客戶端就要停止使用租約的 IP 地址。
可以發現,DHCP 交互中,全程都是使用 UDP 廣播通信。

用的是廣播,那如果 DHCP 伺服器和客戶端不是在同一個局域網內,路由器又不會轉發廣播包,那不是每個網路都要配一個 DHCP 伺服器?

所以,為了解決這一問題,就出現了 DHCP 中繼代理。有了 DHCP 中繼代理以後,對不同網段的 IP 地址分配也可以由一個 DHCP 伺服器統一進行管理。
image

  • DHCP 客戶端會向 DHCP 中繼代理發送 DHCP 請求包,而 DHCP 中繼代理在收到這個廣播包以後,再以單播的形式發給 DHCP 伺服器。
  • 伺服器端收到該包以後再向 DHCP 中繼代理返回應答,並由 DHCP 中繼代理將此包廣播給 DHCP 客戶端 。

因此,DHCP 伺服器即使不在同一個鏈路上也可以實現統一分配和管理 IP 地址。

NAT 網路地址轉換#

IPv4 的地址是非常緊缺的,於是,提出了一種網路地址轉換 NAT 的方法,再次緩解了 IPv4 地址耗盡的問題。
把 IP 地址 + 端口號一起進行轉換。
這樣,就用一個全球 IP 地址就可以了,這種轉換技術就叫網路地址與端口轉換 NAPT。
image
圖中有兩個客戶端 192.168.1.10 和 192.168.1.11 同時與伺服器 183.232.231.172 進行通信,並且這兩個客戶端的本地端口都是 1025。
此時,兩個私有 IP 地址都轉換 IP 地址為公有地址 120.229.175.121,但是以不同的端口號作為區分。
於是,生成一個 NAPT 路由器的轉換表,就可以正確地轉換地址跟端口的組合,令客戶端 A、B 能同時與伺服器之間進行通信。
這種轉換表在 NAT 路由器上自動生成。例如,在 TCP 的情況下,建立 TCP 連接首次握手時的 SYN 包一經發出,就會生成這個表。而後又隨著收到關閉連接時發出 FIN 包的確認應答從表中被刪除。

NAT 的缺點?

由於 NAT/NAPT 都依賴於自己的轉換表,因此會有以下的問題:

  1. 外部無法主動與 NAT 內部伺服器建立連接,因為 NAPT 轉換表沒有轉換記錄。
  2. 轉換表的生成與轉換操作都會產生性能開銷。
  3. 通信過程中,如果 NAT 路由器重啟了,所有的 TCP 連接都將被重置。

如何解決 NAT 潛在的問題呢?

  1. 改用 IPv6
  2. NAT 穿透技術
    能夠讓網路應用程序主動發現自己位於 NAT 設備之後,並且會主動獲得 NAT 設備的公有 IP,並為自己建立端口映射條目,注意這些都是 NAT 設備後的應用程序自動完成的。

ICMP 互聯網控制報文協議#

ICMP 全稱是 Internet Control Message Protocol,也就是互聯網控制報文協議。
網路包在複雜的網路傳輸環境裡,常常會遇到各種問題。所以需要傳出消息,報告遇到了什麼問題,這樣才可以調整傳輸策略,以此來控制整個局面。

ICMP 功能都有啥?

ICMP 主要的功能包括:確認 IP 包是否成功送達目標地址、報告發送過程中 IP 包被廢棄的原因和改善網路設置等。
在 IP 通信中如果某個 IP 包因為某種原因未能達到目標地址,那麼這個具體的原因將由 ICMP 負責通知。
image
如上圖例子,主機 A 向主機 B 發送了數據包,由於某種原因,途中的路由器 2 未能發現主機 B 的存在,這時,路由器 2 就會向主機 A 發送一個 ICMP 目標不可達數據包,說明發往主機 B 的包未能成功。
ICMP 的這種通知消息會使用 IP 進行發送 。
因此,從路由器 2 返回的 ICMP 包會按照往常的路由控制先經過路由器 1 再轉發給主機 A 。收到該 ICMP 包的主機 A 則分解 ICMP 的首部和數據域以後得知具體發生問題的原因。

ICMP 類型

ICMP 大致可以分為兩大類:

  • 一類是用於診斷的查詢消息,也就是「查詢報文類型」
  • 另一類是通知出錯原因的錯誤消息,也就是「差錯報文類型」
    image

查詢報文類型#

回送消息 —— 類型 0 和 8

回送消息用於進行通信的主機或路由器之間,判斷所發送的數據包是否已經成功到達對端的一種消息,ping 命令就是利用這個消息實現的。

ping#

來看 ping 的發送和接收過程
image

  • ping 命令執行的時候,源主機首先會構建一個 ICMP 回送請求消息數據包。
  • 然後,由 ICMP 協議將這個數據包連同地址 192.168.1.2 一起交給 IP 層。IP 層將以 192.168.1.2 作為目的地址,本機 IP 地址作為源地址,協議字段設置為 1 表示是 ICMP 協議,再加上一些其他控制信息,構建一個 IP 數據包。
  • 接下來,需要加入 MAC 頭。- ARP
  • 主機 B 收到這個數據幀後,先檢查它的目的 MAC 地址,並和本機的 MAC 地址對比,如符合,則接收,否則就丟棄。
    接收後檢查該數據幀,將 IP 數據包從幀中提取出來,交給本機的 IP 層。同樣,IP 層檢查後,將有用的信息提取後交給 ICMP 協議。
    主機 B 會構建一個 ICMP 回送響應消息數據包,回送響應數據包的類型字段為 0,序號為接收到的請求數據包中的序號,然後再發送出去給主機 A。
  • 在規定的時候間內,源主機如果沒有接到 ICMP 的應答包,則說明目標主機不可達;如果接收到了 ICMP 回送響應消息,則說明目標主機可達。
    此時,源主機會檢查,用當前時刻減去該數據包最初從源主機上發出的時刻,就是 ICMP 數據包的時間延遲。

差錯報文類型#

  • 目標不可達消息 —— 類型 為 3
    IP 路由器無法將 IP 數據包發送給目標地址時,會給發送端主機返回一個目標不可達的 ICMP 消息,並在這個消息中顯示不可達的具體原因,原因記錄在 ICMP 包頭的代碼字段。
    image
  • 原點抑制消息 —— 類型 4
    在使用低速廣域線路的情況下,連接 WAN 的路由器可能會遇到網路擁堵的問題。
    ICMP 原點抑制消息的目的就是為了緩和這種擁堵情況。
    當路由器向低速線路發送數據時,其發送隊列的緩存變為零而無法發送出去時,可以向 IP 包的源地址發送一個 ICMP 原點抑制消息。
    收到這個消息的主機借此了解在整個線路的某一處發生了擁堵的情況,從而增大 IP 包的傳輸間隔,減少網路擁堵的情況。
    然而,由於這種 ICMP 可能會引起不公平的網路通信,一般不被使用。
  • 重定向消息 —— 類型 5
    如果路由器發現發送端主機使用了「不是最優」的路徑發送數據,那麼它會返回一個 ICMP 重定向消息給這個主機。
    在這個消息中包含了最合適的路由信息和源數據。這主要發生在路由器持有更好的路由信息的情況下。路由器會通過這樣的 ICMP 消息告知發送端,讓它下次發給另外一個路由器。
  • 超時消息 —— 類型 11
    IP 包中有一個字段叫做 TTL (Time To Live,生存周期),它的值隨著每經過一次路由器就會減 1,直到減到 0 時該 IP 包會被丟棄。
    此時,路由器將會發送一個 ICMP 超時消息給發送端主機,並通知該包已被丟棄。
    設置 IP 包生存周期的主要目的,是為了在路由控制遇到問題發生循環狀況時,避免 IP 包無休止地在網路上被轉發。
traceroute#

作用一:故意設置特殊的 TTL,來追蹤去往目的地時沿途經過的路由器。

這個作用是如何工作的呢?

它的原理就是利用 IP 包的生存期限 從 1 開始按照順序遞增的同時發送 UDP 包,強制接收 ICMP 超時消息的一種方法。
比如,將 TTL 設置 為 1,則遇到第一個路由器,就犧牲了,接著返回 ICMP 差錯報文網路包,類型是時間超時。
接下來將 TTL 設置為 2,第一个路由器過了,遇到第二個路由器也犧牲了,也同時返回了 ICMP 差錯報文數據包,如此往復,直到到達目的主機。
這樣的過程,traceroute 就可以拿到了所有的路由器 IP。
當然有的路由器根本就不會返回這個 ICMP,所以對於有的公網地址,是看不到中間經過的路由的。

發送方如何知道發出的 UDP 包是否到達了目的主機呢?

traceroute 在發送 UDP 包時,會填入一個不可能的端口號值作為 UDP 目標端口號:33434。然後對於每個下一个探針,它都會增加一個,這些端口都是通常認為不會被使用,不過,沒有人知道當某些應用程序監聽此類端口時會發生什麼。
當目的主機,收到 UDP 包後,會返回 ICMP 差錯報文消息,但這個差錯報文消息的類型是「端口不可達」。
所以,當差錯報文類型是端口不可達時,說明發送方發出的 UDP 包到達了目的主機。
作用二:故意設置不分片,從而確定路徑的 MTU。

這麼做是為了什麼?

目的是為了路徑 MTU 發現。
因為有的時候我們並不知道路由器的 MTU 大小,以太網的數據鏈路上的 MTU 通常是 1500 字節,但是非以太網的 MTU 值就不一樣了,所以我們要知道 MTU 的大小,從而控制發送的包大小。
image
它的工作原理如下:
首先在發送端主機發送 IP 數據報時,將 IP 包首部的分片禁止標志位設置為 1。根據這個標志位,途中的路由器不會對大數據包進行分片,而是將包丟棄。
隨後,通過一個 ICMP 的不可達消息將數據鏈路上 MTU 的值一起給發送主機,不可達消息的類型為「需要進行分片但設置了不分片位」。
發送主機端每次收到 ICMP 差錯報文時就減少包的大小,以此來定位一個合適的 MTU 值,以便能到達目標主機。

IGMP 因特網組管理協議#

在前面我們知道了組播地址,也就是 D 類地址,既然是組播,那就說明是只有一組的主機能收到數據包,不在一組的主機不能收到數組包,怎麼管理是否是在一組呢?那麼,就需要 IGMP 協議了。
image
GMP 是因特網組管理協議,工作在主機(組播成員)和最後一跳路由之間,如上圖中的藍色部分。

  • IGMP 報文向路由器申請加入和退出組播組,默認情況下路由器是不會轉發組播包到連接中的主機,除非主機通過 IGMP 加入到組播組,主機申請加入到組播組時,路由器就會記錄 IGMP 路由器表,路由器後續就會轉發組播包到對應的主機了。
  • IGMP 報文採用 IP 封裝,IP 頭部的協議號為 2,而且 TTL 字段值通常為 1,因為 IGMP 是工作在主機與連接的路由器之間。

IGMP 工作機制

IGMP 分為了三個版本分別是,IGMPv1、IGMPv2、IGMPv3。
接下來,以 IGMPv2 作為例子,說說常規查詢與響應和離開組播組這兩個工作機制。

  1. 常規查詢與響應工作機制
    image
  2. 離開組播組工作機制
    情況一,網段中仍有該組播組:
    image
    情況二,網段中沒有該組播組:
    image
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。