天天看點

IP 基礎知識全家桶,45 張圖一套帶走

IP 基礎知識全家桶,45 張圖一套帶走

前言

前段時間,有讀者希望我寫一篇關于 IP 分類位址、子網劃分等的文章,他回報常常混淆,摸不着頭腦。

那麼,說來就來!而且要盤就盤全一點,順便挑戰下小林的圖解功力,是以就來個 IP 基礎知識全家桶。

吃完這個 IP 基礎知識全家桶,包你撐着肚子喊出:“真香!”

不多說,直接上菜,共分為三道菜:

  • 首先是前菜 「 IP 基本認識 」
  • 其次是主菜 「IP 位址的基礎知識」
  • 最後是點心 「IP 協定相關技術」
IP 基礎知識全家桶,45 張圖一套帶走

IP 基礎知識全家桶

為啥要比喻成菜?因為小林是菜狗(押韻不?)

正文

前菜 —— IP 基本認識

IP 在 TCP/IP 參考模型中處于第三層,也就是網絡層。

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

IP 的作用

網絡層與資料鍊路層有什麼關系呢?

有的小夥伴分不清 IP(網絡層) 和 MAC (資料鍊路層)之間的差別和關系。

其實很容易區分,在上面我們知道 IP 的作用是主機之間通信用的,而 MAC 的作用則是實作「直連」的兩個裝置之間通信,而 IP 則負責在「沒有直連」的兩個網絡之間進行通信傳輸。

舉個生活的栗子,小林要去一個很遠的地方旅行,制定了一個行程表,其間需先後乘坐飛機、地鐵、公共汽車才能抵達目的地,為此小林需要買飛機票,地鐵票等。

飛機票和地鐵票都是去往特定的地點的,每張票隻能夠在某一限定區間内移動,此處的「區間内」就如同通信網絡中資料鍊路。

在區間内移動相當于資料鍊路層,充當區間内兩個節點傳輸的功能,區間内的出發點好比源 MAC 位址,目标地點好比目的 MAC 位址。

整個旅遊行程表就相當于網絡層,充當遠端定位的功能,行程的開始好比源 IP,行程的終點好比目的 IP 位址。

IP 的作用與 MAC 的作用

如果小林隻有行程表而沒有車票,就無法搭乘交通工具到達目的地。相反,如果除了車票而沒有行程表,恐怕也很難到達目的地。因為小林不知道該坐什麼車,也不知道該在哪裡換乘。

是以,隻有兩者兼備,既有某個區間的車票又有整個旅行的行程表,才能保證到達目的地。與此類似,計算機網絡中也需要「資料鍊路層」和「網絡層」這個分層才能實作向最終目标位址的通信。

還有重要一點,旅行途中我們雖然不斷變化了交通工具,但是旅行行程的起始位址和目的位址始終都沒變。其實,在網絡中資料包傳輸中也是如此,源IP位址和目标IP位址在傳輸過程中是不會變化的,隻有源 MAC 位址和目标 MAC 一直在變化。

主菜 —— IP 位址的基礎知識

在 TCP/IP 網絡通信時,為了保證能正常通信,每個裝置都需要配置正确的 IP 位址,否則無法實作正常的通信。

IP 位址(IPv4 位址)由

32

位正整數來表示,IP 位址在計算機是以二進制的方式處理的。

而人類為了友善記憶采用了點分十進制的标記方式,也就是将 32 位 IP 位址以每 8 位為組,共分為

4

組,每組以「

.

」隔開,再将每組轉換成十進制。

IP 基礎知識全家桶,45 張圖一套帶走

點分十進制

那麼,IP 位址最大值也就是

IP 基礎知識全家桶,45 張圖一套帶走

也就說,最大允許 43 億台計算機連接配接到網絡。

實際上,IP 位址并不是根據主機台數來配置的,而是以網卡。像伺服器、路由器等裝置都是有 2 個以上的網卡,也就是它們會有 2 個以上的 IP 位址。

IP 基礎知識全家桶,45 張圖一套帶走

每塊網卡可以配置設定一個以上的IP位址

是以,讓 43 億台計算機全部連網其實是不可能的,更何況 IP 位址是由「網絡辨別」和「主機辨別」這兩個部分組成的,是以實際能夠連接配接到網絡的計算機個數更是少了很多。

可能有的小夥伴提出了疑問,現在不僅電腦配了 IP, 手機、IPad 等電子裝置都配了 IP 呀,照理來說肯定會超過 43 億啦,那是怎麼能夠支援這麼多 IP 的呢?

因為會根據一種可以更換 IP 位址的技術

NAT

,使得可連接配接計算機數超過 43 億台。

NAT

技術後續會進一步讨論和說明。

IP 位址的分類

網際網路誕生之初,IP 位址顯得很充裕,于是計算機科學家們設計了分類位址。

IP 位址分類成了 5 種類型,分别是 A 類、B 類、C 類、D 類、E 類。

IP 位址分類

上圖中黃色部分為分類号,用以區分 IP 位址類别。

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

其中對于 A、B、C 類主要分為兩個部分,分别是網絡号和主機号。這很好了解,好比小林是 A 小區 1 棟 101 号,你是 B 小區 1 棟 101 号。

我們可以用下面這個表格, 就能很清楚的知道 A、B、C 分類對應的位址範圍、最大主機個數。

IP 基礎知識全家桶,45 張圖一套帶走
A、B、C 分類位址最大主機個數是如何計算的呢?

最大主機個數,就是要看主機号的位數,如 C 類位址的主機号占 8 位,那麼 C 類位址的最大主機個數:

IP 基礎知識全家桶,45 張圖一套帶走

為什麼要減 2 呢?

因為在 IP 位址中,有兩個 IP 是特殊的,分别是主機号全為 1 和 全為 0 位址。

IP 基礎知識全家桶,45 張圖一套帶走
  • 主機号全為 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 類位址?

而 D 類和 E 類位址是沒有主機号的,是以不可用于主機 IP,D 類常被用于多點傳播,E 類是預留的分類,暫時未使用。

IP 基礎知識全家桶,45 張圖一套帶走
多點傳播位址用于什麼?

多點傳播用于将包發送給特定組内的所有主機。

還是舉班級的栗子,老師說:“最後一排的同學,上來做這道數學題。”,老師指定的是最後一排的同學,也就是多點傳播的含義了。

由于廣播無法穿透路由,若想給其他網段發送同樣的包,就可以使用可以穿透路由的多點傳播。

單點傳播、廣播、多點傳播通信

多點傳播使用的 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 類位址,那麼就能很快的找出網絡位址和主機位址。

其餘分類判斷方式參考如下圖:

IP 基礎知識全家桶,45 張圖一套帶走

IP 分類判斷

是以,這種分類位址的優點就是簡單明了、選路(基于網絡位址)簡單。

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 位址更加具有靈活性。

比如 10.100.122.2/24,這種位址表示形式就是 CIDR,/24 表示前 24 位是網絡号,剩餘的 8 位是主機号。

還有另一種劃分網絡号與主機号形式,那就是子網路遮罩,掩碼的意思就是掩蓋掉主機号,剩餘的就是網絡号。

将子網路遮罩和 IP 位址按位計算 AND,就可得到網絡号。

IP 基礎知識全家桶,45 張圖一套帶走
為什麼要分離網絡号和主機号?

因為兩台計算機要通訊,首先要判斷是否處于同一個廣播域内,即網絡位址是否相同。如果網絡位址相同,表明接受方在本網絡上,那麼可以把資料包直接發送到目标主機。

路由器尋址工作中,也就是通過這樣的方式來找到對應的網絡号的,進而把資料包轉發給對應的網絡内。

IP位址的網絡号

怎麼進行子網劃分?

在上面我們知道可以通過子網路遮罩劃分出網絡号和主機号,那實際上子網路遮罩還有一個作用,那就是劃分子網。

子網劃分實際上是将主機位址分為兩個部分:子網網絡位址和子網主機位址。形式如下:

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

假設對 C 類位址進行子網劃分,網絡位址 192.168.1.0,使用子網路遮罩 255.255.255.192 對其進行子網劃分。

C 類位址中前 24 位是網絡号,最後 8 位是主機号,根據子網路遮罩可知從 8 位主機号中借用 2 位作為子網号。

由于子網網絡位址被劃分成 2 位,那麼子網位址就有 4 個,分别是 00、01、10、11,具體劃分如下圖:

劃分後的 4 個子網如下表格:

IP 基礎知識全家桶,45 張圖一套帶走

公有 IP 位址與私有 IP 位址

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

IP 基礎知識全家桶,45 張圖一套帶走

平時我們辦公室、家裡、學校用的 IP 位址,一般都是私有 IP 位址。因為這些位址允許組織内部的 IT 人員自己管理、自己配置設定,而且可以重複。是以,你學校的某個私有 IP 位址和我學校的可以是一樣的。

就像每個小區都有自己的樓編号和門牌号,你小區家可以叫 1 棟 101 号,我小區家也可以叫 1 棟 101,沒有任何問題。但一旦出了小區,就需要帶上中山路 666 号(公網 IP 位址),是國家統一配置設定的,不能兩個小區都叫中山路 666。

是以,公有 IP 位址是有個組織統一配置設定的,假設你要開一個部落格網站,那麼你就需要去申請購買一個公有 IP,這樣全世界的人才能通路。并且公有 IP 位址基本上要在整個網際網路範圍内保持唯一。

IP 基礎知識全家桶,45 張圖一套帶走
公有 IP 位址由誰管理呢?

私有 IP 位址通常是内部的 IT 人員管理,公有 IP 位址是由

ICANN

組織管理,中文叫「網際網路名稱與數字位址配置設定機構」。

IANA 是 ICANN 的其中一個機構,它負責配置設定網際網路 IP 位址,是按州的方式層層配置設定。

IP 基礎知識全家桶,45 張圖一套帶走
  • ARIN 北美地區
  • LACNIC 拉丁美洲和一些加勒比群島
  • RIPE NCC 歐洲、中東和中亞
  • AfriNIC 非洲地區
  • APNIC 亞太地區

其中,在中國是由 CNNIC 的機構進行管理,它是中國國内唯一指定的全局 IP 位址管理的組織。

IP 位址與路由控制

IP位址的網絡位址這一部分是用于進行路由控制。

路由控制表中記錄着網絡位址與下一步應該發送至路由器的位址。在主機和路由器上都會有各自的路由器控制表。

在發送 IP 包時,首先要确定 IP 包首部中的目标位址,再從路由控制表中找到與該位址具有相同網絡位址的記錄,根據該記錄将 IP 包轉發給相應的下一個路由器。如果路由控制表中存在多條相同網絡位址的記錄,就選擇相同位數最多的網絡位址,也就是最長比對。

下面以下圖的網絡鍊路作為例子說明:

IP 基礎知識全家桶,45 張圖一套帶走
  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 分片與重組

每種資料鍊路的最大傳輸單元

MTU

都是不相同的,如 FDDI 資料鍊路 MTU 4352、以太網的 MTU 是 1500 位元組等。

每種資料鍊路的 MTU 之是以不同,是因為每個不同類型的資料鍊路的使用目的不同。使用目的不同,可承載的 MTU 也就不同。

其中,我們最常見資料鍊路是以太網,它的 MTU 是

1500

位元組。

那麼當 IP 資料包大小大于 MTU 時, IP 資料包就會被分片。

經過分片之後的 IP 資料報在被重組的時候,隻能由目标主機進行,路由器是不會進行重組的。

假設發送方發送一個 4000 位元組的大資料報,若要傳輸在以太網鍊路,則需要把資料報分片成 3 個小資料報進行傳輸,再交由接收方重組成大資料報。

IP 基礎知識全家桶,45 張圖一套帶走

分片與重組

在分片傳輸中,一旦某個分片丢失,則會造成整個 IP 資料報廢棄,是以 TCP 引入了

MSS

也就是在 TCP 層進行分片不由 IP 層分片,那麼對于 UDP 我們盡量不要發送一個大于

MTU

的資料封包。

IPv6 基本認識

IPv4 的位址是 32 位的,大約可以提供 42 億個位址,但是早在 2011 年 IPv4 位址就已經被配置設定完了。

但是 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 位作為一組,每組用冒号 「:」 隔開。

IP 基礎知識全家桶,45 張圖一套帶走

IPv6 位址表示方法

如果出現連續的 0 時還可以将這些 0 省略,并用兩個冒号 「::」隔開。但是,一個 IP 位址中隻允許出現一次兩個連續的冒号。

IP 基礎知識全家桶,45 張圖一套帶走

Pv6 位址預設表示方

IPv6 位址的結構

IPv6 類似 IPv4,也是通過 IP 位址的前幾位辨別 IP 位址的種類。

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

  • 單點傳播位址,用于一對一的通信
  • 多點傳播位址,用于一對多的通信
  • 任播位址,用于通信最近的節點,最近的節點是由路由協定決定
  • 沒有廣播位址
IP 基礎知識全家桶,45 張圖一套帶走

IPv6位址結構

IPv6 單點傳播位址類型

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

  • 在同一鍊路單點傳播通信,不經過路由器,可以使用鍊路本地單點傳播位址,IPv4 沒有此類型
  • 在内網裡單點傳播通信,可以使用唯一本地位址,相當于 IPv4 的私有 IP
  • 在網際網路通信,可以使用全局單點傳播位址,相當于 IPv4 的公有 IP
IP 基礎知識全家桶,45 張圖一套帶走

IPv6 中的單點傳播通信

IPv4 首部與 IPv6 首部

IPv4 首部與 IPv6 首部的差異如下圖:

IP 基礎知識全家桶,45 張圖一套帶走

IPv4 首部與 IPv6 首部的差異

IPv6 相比 IPv4 的首部改進:

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

    40

點心 —— IP 協定相關技術

跟 IP 協定相關的技術也不少,接下來說說與 IP 協定相關的重要且常見的技術。

  • DNS 域名解析
  • ARP 與 RARP 協定
  • DHCP 動态擷取 IP 位址
  • NAT 網絡位址轉換
  • ICMP 網際網路控制封包協定
  • IGMP 網際網路組管理協

DNS

我們在上網的時候,通常使用的方式是域名,而不是 IP 位址,因為域名友善人類記憶。

那麼實作這一技術的就是 DNS 域名解析,DNS 可以将域名網址自動轉換為具體的 IP 位址。

域名的層級關系

DNS 中的域名都是用句點來分隔的,比如

www.server.com

,這裡的句點代表了不同層次之間的界限。

在域名中,越靠右的位置表示其層級越高。

畢竟域名是外國人發明,是以思維和中國人相反,比如說一個城市地點的時候,外國喜歡從小到大的方式順序說起(如 XX 街道 XX 區 XX 市 XX 省),而中國則喜歡從大到小的順序(如 XX 省 XX 市 XX 區 XX 街道)。

根域是在最頂層,它的下一層就是 com 頂級域,再下面是 server.com。

是以域名的層級關系類似一個樹狀結構:

  • 根 DNS 伺服器
  • 頂級域 DNS 伺服器(com)
  • 權威 DNS 伺服器(server.com)
IP 基礎知識全家桶,45 張圖一套帶走

DNS 樹狀結構

根域的 DNS 伺服器資訊儲存在網際網路中所有的 DNS 伺服器中。這樣一來,任何 DNS 伺服器就都可以找到并通路根域 DNS 伺服器了。

是以,用戶端隻要能夠找到任意一台 DNS 伺服器,就可以通過它找到根域 DNS 伺服器,然後再一路順藤摸瓜找到位于下層的某台目标 DNS 伺服器。

域名解析的工作流程

浏覽器首先看一下自己的緩存裡有沒有,如果沒有就向作業系統的緩存要,還沒有就檢查本機域名解析檔案

hosts

,如果還是沒有,就會 DNS 伺服器進行查詢,查詢的過程如下:

  1. 用戶端首先會發出一個 DNS 請求,問 www.server.com 的 IP 是啥,并發給本地 DNS 伺服器(也就是用戶端的 TCP/IP 設定中填寫的 DNS 伺服器位址)。
  2. 本地域名伺服器收到用戶端的請求後,如果緩存裡的表格能找到 www.server.com,則它直接傳回 IP 位址。如果沒有,本地 DNS 會去問它的根域名伺服器:“老大, 能告訴我 www.server.com 的 IP 位址嗎?” 根域名伺服器是最高層次的,它不直接用于域名解析,但能指明一條道路。
  3. 根 DNS 收到來自本地 DNS 的請求後,發現後置是 .com,說:“www.server.com 這個域名歸 .com 區域管理”,我給你 .com 頂級域名伺服器位址給你,你去問問它吧。”
  4. 本地 DNS 收到頂級域名伺服器的位址後,發起請求問“老二, 你能告訴我 www.server.com 的 IP 位址嗎?”
  5. 頂級域名伺服器說:“我給你負責 www.server.com 區域的權威 DNS 伺服器的位址,你去問它應該能問到”。
  6. 本地 DNS 于是轉向問權威 DNS 伺服器:“老三,www.server.com對應的IP是啥呀?” server.com 的權威 DNS 伺服器,它是域名解析結果的原出處。為啥叫權威呢?就是我的域名我做主。
  7. 權威 DNS 伺服器查詢後将對應的 IP 位址 X.X.X.X 告訴本地 DNS。
  8. 本地 DNS 再将 IP 位址傳回用戶端,用戶端和目标建立連接配接。

至此,我們完成了 DNS 的解析過程。現在總結一下,整個過程我畫成了一個圖。

IP 基礎知識全家桶,45 張圖一套帶走

DNS 域名解析的過程蠻有意思的,整個過程就和我們日常生活中找人問路的過程類似,隻指路不帶路。

ARP

在傳輸一個 IP 資料報的時候,确定了源 IP 位址和目标 IP 位址後,就會通過主機「路由表」确定 IP 資料包下一跳。然而,網絡層的下一層是資料鍊路層,是以我們還要知道「下一跳」的 MAC 位址。

由于主機的路由表中可以找到下一跳的 IP 位址,是以可以通過 ARP 協定,求得下一跳的 MAC 位址。

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

簡單地說,ARP 是借助 ARP 請求與 ARP 響應兩種類型的包确定 MAC 位址的。

IP 基礎知識全家桶,45 張圖一套帶走

ARP 廣播

  • 主機會通過廣播發送 ARP 請求,這個包中包含了想要知道的 MAC 位址的主機 IP 位址。
  • 當同個鍊路中的所有裝置收到 ARP 請求時,會去拆開 ARP 請求包裡的内容,如果 ARP 請求包中的目标 IP 位址與自己的 IP 位址一緻,那麼這個裝置就将自己的 MAC 位址塞入 ARP 響應包傳回給主機。

作業系統通常會把第一次通過 ARP 擷取的 MAC 位址緩存起來,以便下次直接從緩存中找到對應 IP 位址的 MAC 位址。

不過,MAC 位址的緩存是有一定期限的,超過這個期限,緩存的内容将被清除。

RARP 協定你知道是什麼嗎?

ARP 協定是已知 IP 位址求 MAC 位址,那 RARP 協定正好相反,它是已知 MAC 位址求 IP 位址。例如将列印機伺服器等小型嵌入式裝置接入到網絡時就經常會用得到。

通常這需要架設一台

RARP

伺服器,在這個伺服器上注冊裝置的 MAC 位址及其 IP 位址。然後再将這個裝置接入到網絡,接着:

  • 該裝置會發送一條「我的 MAC 位址是XXXX,請告訴我,我的IP位址應該是什麼」的請求資訊。
  • RARP 伺服器接到這個消息後傳回「MAC位址為 XXXX 的裝置,IP位址為 XXXX」的資訊給這個裝置。

最後,裝置就根據從 RARP 伺服器所收到的應答資訊設定自己的 IP 位址。

IP 基礎知識全家桶,45 張圖一套帶走

RARP

DHCP

DHCP 在生活中我們是很常見的了,我們的電腦通常都是通過 DHCP 動态擷取 IP 位址,大大省去了配 IP 資訊繁瑣的過程。

接下來,我們來看看我們的電腦是如何通過 4 個步驟的過程,擷取到 IP 的。

IP 基礎知識全家桶,45 張圖一套帶走

DHCP 工作流程

先說明一點,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 伺服器統一進行管理。

IP 基礎知識全家桶,45 張圖一套帶走

DHCP 中繼代理

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

是以,DHCP 伺服器即使不在同一個鍊路上也可以實作統一配置設定和管理IP位址。

NAT

IPv4 的位址是非常緊缺的,在前面我們也提到可以通過無分類位址來減緩 IPv4 位址耗盡的速度,但是網際網路的使用者增速是非常驚人的,是以 IPv4 位址依然有被耗盡的危險。

于是,提出了一種網絡位址轉換 NAT 的方法,再次緩解了 IPv4 位址耗盡的問題。

簡單的來說 NAT 就是同個公司、家庭、教室内的主機對外部通信時,把私有 IP 位址轉換成公有 IP 位址。

IP 基礎知識全家桶,45 張圖一套帶走
那不是 N 個私有 IP 位址,你就要 N 個公有 IP 位址?這怎麼就緩解了 IPv4 位址耗盡的問題?這不瞎扯嗎?

确實是,普通的 NAT 轉換沒什麼意義。

由于絕大多數的網絡應用都是使用傳輸層協定 TCP 或 UDP 來傳輸資料的。

是以,可以把 IP 位址 + 端口号一起進行轉換。

這樣,就用一個全球 IP 位址就可以了,這種轉換技術就叫網絡位址與端口轉換 NAPT。

很抽象?來,看下面的圖解就能瞬間明白了。

IP 基礎知識全家桶,45 張圖一套帶走

NAPT

圖中有兩個用戶端 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 都依賴于自己的轉換表,是以會有以下的問題:

  • 外部無法主動與 NAT 内部伺服器建立連接配接,因為 NAPT 轉換表沒有轉換記錄。
  • 轉換表的生成與轉換操作都會産生性能開銷。
  • 通信過程中,如果 NAT 路由器重新開機了,所有的 TCP 連接配接都将被重置。
如何解決 NAT 潛在的問題呢?

解決的方法主要有兩種方法。

第一種就是改用 IPv6

IPv6 可用範圍非常大,以至于每台裝置都可以配置一個公有 IP 位址,就不搞那麼多花裡胡哨的位址轉換了,但是 IPv6 普及速度還需要一些時間。

第二種 NAT 穿透技術

NAT 穿越技術擁有這樣的功能,它能夠讓網絡應用程式主動發現自己位于 NAT 裝置之後,并且會主動獲得 NAT 裝置的公有 IP,并為自己建立端口映射條目,注意這些都是 NAT裝置後的應用程式自動完成的。

也就是說,在 NAT 穿透技術中,NAT裝置後的應用程式處于主動地位,它已經明确地知道 NAT 裝置要修改它外發的資料包,于是它主動配合 NAT 裝置的操作,主動地建立好映射,這樣就不像以前由 NAT 裝置來建立映射了。

說人話,就是用戶端主動從 NAT 裝置擷取公有 IP 位址,然後自己建立端口映射條目,然後用這個條目對外通信,就不需要 NAT 裝置來進行轉換了。

ICMP

ICMP 全稱是 Internet Control Message Protocol,也就是網際網路控制封包協定。

裡面有個關鍵詞 —— 控制,如何控制的呢?

網絡包在複雜的網絡傳輸環境裡,常常會遇到各種問題。

當遇到問題的時候,總不能死個不明不白,沒頭沒腦的作風不是計算機網絡的風格。是以需要傳出消息,報告遇到了什麼問題,這樣才可以調整傳輸政策,以此來控制整個局面。

ICMP 功能都有啥?

ICMP

主要的功能包括:确認 IP 包是否成功送達目标位址、報告發送過程中 IP 包被廢棄的原因和改善網絡設定等。

IP

通信中如果某個

IP

包因為某種原因未能達到目标位址,那麼這個具體的原因将由 ICMP 負責通知。

IP 基礎知識全家桶,45 張圖一套帶走

ICMP 目标不可達消息

如上圖例子,主機

A

向主機

B

發送了資料包,由于某種原因,途中的路由器

2

未能發現主機

B

的存在,這時,路由器

2

就會向主機

A

發送一個

ICMP

目标不可達資料包,說明發往主機

B

的包未能成功。

ICMP 的這種通知消息會使用

IP

進行發送 。

是以,從路由器

2

傳回的 ICMP 包會按照往常的路由控制先經過路由器

1

再轉發給主機

A

。收到該 ICMP 包的主機

A

則分解 ICMP 的首部和資料域以後得知具體發生問題的原因。

ICMP 類型

ICMP 大緻可以分為兩大類:

  • 一類是用于診斷的查詢消息,也就是「查詢封包類型」
  • 另一類是通知出錯原因的錯誤消息,也就是「差錯封包類型」
IP 基礎知識全家桶,45 張圖一套帶走

常見的 ICMP 類型

IGMP

ICMP 跟 IGMP 是一點關系都沒有的,就好像周傑與周傑倫的差別,大家不要混淆了。

在前面我們知道了多點傳播位址,也就是 D 類位址,既然是多點傳播,那就說明是隻有一組的主機能收到資料包,不在一組的主機不能收到數組包,怎麼管理是否是在一組呢?那麼,就需要

IGMP

協定了。

IP 基礎知識全家桶,45 張圖一套帶走

多點傳播模型

IGMP 是網際網路組管理協定,工作在主機(多點傳播成員)和最後一跳路由之間,如上圖中的藍色部分。

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

IGMP 分為了三個版本分别是,IGMPv1、IGMPv2、IGMPv3。

接下來,以

IGMPv2

作為例子,說說正常查詢與響應和離開多點傳播組這兩個工作機制。

正常查詢與響應工作機制

IP 基礎知識全家桶,45 張圖一套帶走

IGMP 正常查詢與響應工作機制

  1. 路由器會周期性發送目的位址為

    224.0.0.1

    (表示同一網段内所有主機和路由器) IGMP 正常查詢封包。
  2. 主機1 和 主機 3 收到這個查詢,随後會啟動「報告延遲計時器」,計時器的時間是随機的,通常是 0~10 秒,計時器逾時後主機就會發送 IGMP 成員關系報告封包(源 IP 位址為自己主機的 IP 位址,目的 IP 位址為多點傳播位址)。如果在定時器逾時之前,收到同一個組内的其他主機發送的成員關系報告封包,則自己不再發送,這樣可以減少網絡中多餘的 IGMP 封包數量。
  3. 路由器收到主機的成員關系封包後,就會在 IGMP 路由表中加入該多點傳播組,後續網絡中一旦該多點傳播位址的資料到達路由器,它會把資料包轉發出去。

離開多點傳播組工作機制

離開多點傳播組的情況一,網段中仍有該多點傳播組:

IP 基礎知識全家桶,45 張圖一套帶走

IGMPv2 離開多點傳播組工作機制 情況1

  1. 主機 1 要離開組 224.1.1.1,發送 IGMPv2 離組封包,封包的目的位址是 224.0.0.2(表示發向網段内的所有路由器)
  2. 路由器 收到該封包後,以 1 秒為間隔連續發送 IGMP 特定組查詢封包(共計發送 2 個),以便确認該網絡是否還有 224.1.1.1 組的其他成員。
  3. 主機 3 仍然是組 224.1.1.1 的成員,是以它立即響應這個特定組查詢。路由器知道該網絡中仍然存在該多點傳播組的成員,于是繼續向該網絡轉發 224.1.1.1 的多點傳播資料包。

離開多點傳播組的情況二,網段中沒有該多點傳播組:

IP 基礎知識全家桶,45 張圖一套帶走

IGMPv2 離開多點傳播組工作機制 情況2

  1. 主機 1 要離開多點傳播組 224.1.1.1,發送 IGMP 離組封包。
  2. 路由器收到該封包後,以 1 秒為間隔連續發送 IGMP 特定組查詢封包(共計發送 2 個)。此時在該網段内,組 224.1.1.1 已經沒有其他成員了,是以沒有主機響應這個查詢。
  3. 一定時間後,路由器認為該網段中已經沒有 224.1.1.1 多點傳播組成員了,将不會再向這個網段轉發該多點傳播位址的資料包。

巨人的肩膀

[1] 計算機網絡-自頂向下方法.陳鳴 譯.機械工業出版社

[2] TCP/IP詳解 卷1:協定.範建華 譯.機械工業出版社

[3] 圖解TCP/IP.竹下隆史.人民郵電出版社

唠叨唠叨

這一頓花樣圖解菜,做起來也不容易。

  • 如果這合你口味,給小林點個「贊」,那小林我就心滿意足啦。
  • 如果口味過重,歡迎「留言」進行點評!

小林是專為大家圖解的工具人,Goodbye,我們下次見!

IP 基礎知識全家桶,45 張圖一套帶走

讀者問答

讀者問題:“多點傳播不太懂。。。假設一台機器加入多點傳播位址,需要把IP改成多點傳播位址嗎?如果離開某個多點傳播位址,需要dhcp重新請求個IP嗎?”

多點傳播位址不是用于機器ip位址的,因為多點傳播位址沒有網絡号和主機号,是以跟dhcp沒關系。多點傳播位址一般是用于udp協定,機器發送UDP多點傳播資料時,目标位址填的是多點傳播位址,那麼在多點傳播組内的機器都能收到資料包。

是否加入多點傳播組和離開多點傳播組,是由socket一個接口實作的,主機ip是不用改變的。

關注公衆号:「小林coding」 ,回複「我要學習」即可免費獲得「伺服器 Linux C/C++ 」成長路程(書籍資料 + 思維導圖)