一篇文章帶你熟悉 TCP/IP 協議-(三)

一篇文章帶你熟悉 TCP/IP協議-(一)- https://segmentfault.com/a/11...
一篇文章帶你熟悉 TCP/IP協議-(二)- https://segmentfault.com/a/11...
一篇文章帶你熟悉 TCP/IP協議-(三)- https://segmentfault.com/a/11...

4、網絡層中的 IP 協議

  • IP(IPv四、IPv6)至關於 OSI 參考模型中的第3層——網絡層。網絡層的主要做用是「實現終端節點之間的通訊」。這種終端節點之間的通訊也叫「點對點通訊」。
  • 網絡的下一層——數據鏈路層的主要做用是在互連同一種數據鏈路的節點之間進行包傳遞。而一旦跨越多種數據鏈路,就須要藉助網絡層。網絡層能夠跨越不一樣的數據鏈路,即便是在不一樣的數據鏈路上也能實現兩端節點之間的數據包傳輸。
  • IP 大體分爲三大做用模塊,它們是 IP 尋址、路由(最終節點爲止的轉發)以及 IP 分包與組包。

1. IP 地址

1.1 IP 地址概述

  • 在計算機通訊中,爲了識別通訊對端,必需要有一個相似於地址的識別碼進行標識。在數據鏈路中的 MAC 地址正是用來標識同一個鏈路中不一樣計算機的一種識別碼。
  • 做爲網絡層的 IP ,也有這種地址信息,通常叫作 IP 地址。IP 地址用於在「鏈接到網絡中的全部主機中識別出進行通訊的目標地址」。所以,在 TCP/IP 通訊中全部主機或路由器必須設定本身的 IP 地址。
  • 不論一臺主機與哪一種數據鏈路鏈接,其 IP 地址的形式都保持不變。
  • IP 地址(IPv4 地址)由32位正整數來表示。IP 地址在計算機內部以二進制方式被處理。然而,因爲咱們並不習慣於採用二進制方式,咱們將32位的 IP 地址以每8位爲一組,分紅4組,每組以 「.」 隔開,再將每組數轉換成十進制數。以下:

圖片描述

1.2 IP 地址由網絡和主機兩部分標識組成

  • 以下圖,網絡標識在數據鏈路的每一個段配置不一樣的值。網絡標識必須保證相互鏈接的每一個段的地址不相重複。而相同段內相連的主機必須有相同的網絡地址。IP 地址的「主機標識」則不容許在同一個網段內重複出現。由此,能夠經過設置網絡地址和主機地址,在相互鏈接的整個網絡中保證每臺主機的 IP 地址都不會相互重疊。即 IP 地址具備了惟一性。

圖片描述

  • 以下圖,IP 包被轉發到途中某個路由器時,正是利用目標 IP 地址的網絡標識進行路由。由於即便不看主機標識,只要一見到網絡標識就能判斷出是否爲該網段內的主機。

圖片描述

1.3 IP 地址的分類

  • IP 地址分爲四個級別,分別爲A類、B類、C類、D類。它根據 IP 地址中從第 1 位到第 4 位的比特列對其網絡標識和主機標識進行區分。

A 類 IP 地址是首位以 「0」 開頭的地址。從第 1 位到第 8 位是它的網絡標識。用十進制表示的話,0.0.0.0~127.0.0.0 是 A 類的網絡地址。A 類地址的後 24 位至關於主機標識。所以,一個網段內可容納的主機地址上限爲16,777,214個。segmentfault

  • B 類 IP 地址是前兩位 「10」 的地址。從第 1 位到第 16 位是它的網絡標識。用十進制表示的話,128.0.0.0~191.255.0.0 是 B 類的網絡地址。B 類地址的後 16 位至關於主機標識。所以,一個網段內可容納的主機地址上限爲65,534個。
  • C 類 IP 地址是前三位爲 「110」 的地址。從第 1 位到第 24 位是它的網絡標識。用十進制表示的話,192.0.0.0~223.255.255.0 是 C 類的網絡地址。C 類地址的後 8 位至關於主機標識。所以,一個網段內可容納的主機地址上限爲254個。
  • D 類 IP 地址是前四位爲 「1110」 的地址。從第 1 位到第 32 位是它的網絡標識。用十進制表示的話,224.0.0.0~239.255.255.255 是 D 類的網絡地址。D 類地址沒有主機標識,經常使用於多播。
  • 在分配 IP 地址時關於主機標識有一點須要注意。即要用比特位表示主機地址時,不能夠所有爲 0 或所有爲 1。由於所有爲 0 只有在表示對應的網絡地址或 IP 地址不能夠獲知的狀況下才使用。而所有爲 1 的主機一般做爲廣播地址。所以,在分配過程當中,應該去掉這兩種狀況。這也是爲何 C 類地址每一個網段最多隻能有 254( 28 - 2 = 254)個主機地址的緣由。

1.4 廣播地址

  • 廣播地址用於在同一個鏈路中相互鏈接的主機之間發送數據包。將 IP 地址中的主機地址部分所有設置爲 1,就成了廣播地址。
  • 廣播分爲本地廣播和直接廣播兩種。在本網絡內的廣播叫作本地廣播;在不一樣網絡之間的廣播叫作直接廣播。

1.5 IP 多播

  • 多播用於將包發送給特定組內的全部主機。因爲其直接使用 IP 地址,所以也不存在可靠傳輸。
  • 相比於廣播,多播既能夠穿透路由器,又能夠實現只給那些必要的組發送數據包。請看下圖:

圖片描述

  • 多播使用 D 類地址。所以,若是從首位開始到第 4 位是 「1110」,就能夠認爲是多播地址。而剩下的 28 位能夠成爲多播的組編號。

此外, 對於多播,全部的主機(路由器之外的主機和終端主機)必須屬於 224.0.0.1 的組,全部的路由器必須屬於 224.0.0.2 的組。安全

1.6 子網掩碼

  • 如今一個 IP 地址的網絡標識和主機標識已再也不受限於該地址的類別,而是由一個叫作「子網掩碼」的識別碼經過子網網絡地址細分出比 A 類、B 類、C 類更小粒度的網絡。這種方式實際上就是將原來 A 類、B 類、C 類等分類中的主機地址部分用做子網地址,能夠將原網絡分爲多個物理網絡的一種機制。
  • 子網掩碼用二進制方式表示的話,也是一個 32 位的數字。它對應 IP 地址網絡標識部分的位所有爲 「1」,對應 IP 地址主機標識的部分則所有爲 「0」。由此,一個 IP 地址能夠再也不受限於本身的類別,而是能夠用這樣的子網掩碼自由地定位本身的網絡標識長度。固然,子網掩碼必須是 IP 地址的首位開始連續的 「1」。
  • 對於子網掩碼,目前有兩種表示方式。第一種是,將 IP 地址與子網掩碼的地址分別用兩行來表示。以 172.20.100.52 的前 26 位是網絡地址的狀況爲例,以下:

圖片描述

  • 第二種表示方式是,在每一個 IP 地址後面追加網絡地址的位數用 「/ 」 隔開,以下:

圖片描述
另外,在第二種方式下記述網絡地址時能夠省略後面的 「0」 。例如:172.20.0.0/26 跟 172.20/26 實際上是一個意思。服務器

2. 路由

  • 發送數據包時所使用的地址是網絡層的地址,即 IP 地址。然而僅僅有 IP 地址還不足以實現將數據包發送到對端目標地址,在數據發送過程當中還須要相似於「指明路由器或主機」的信息,以便真正發往目標地址。保存這種信息的就是路由控制表。
  • 該路由控制表的造成方式有兩種:一種是管理員手動設置,另外一種是路由器與其餘路由器相互交換信息時自動刷新。前者也叫作靜態路由控制,然後者叫作動態路由控制。
  • IP 協議始終認爲路由表是正確的。而後,IP 自己並無定義製做路由控制表的協議。即 IP 沒有製做路由控制表的機制。該表示由一個叫作「路由協議」的協議製做而成。

2.1 IP 地址與路由控制

  • IP 地址的網絡地址部分用於進行路由控制。
  • 路由控制表中記錄着網絡地址與下一步應該發送至路由器的地址。
  • 在發送 IP 包時,首先要肯定 IP 包首部中的目標地址,再從路由控制表中找到與該地址具備相同網絡地址的記錄,根據該記錄將 IP 包轉發給相應的下一個路由器。若是路由控制表中存在多條相同網絡地址的記錄,就選擇一個最爲吻合的網絡地址。

圖片描述

3. IP 分包與組包

  • 每種數據鏈路的最大傳輸單元(MTU)都不盡相同,由於每一個不一樣類型的數據鏈路的使用目的不一樣。使用目的不一樣,可承載的 MTU 也就不一樣。
  • 任何一臺主機都有必要對 IP 分片進行相應的處理。分片每每在網絡上遇到比較大的報文沒法一會兒發送出去時纔會進行處理。
  • 通過分片以後的 IP 數據報在被重組的時候,只能由目標主機進行。路由器雖然作分片但不會進行重組。

3.1 路徑 MTU 發現

  • 分片機制也有它的不足。如路由器的處理負荷加劇之類。所以,只要容許,是不但願由路由器進行 IP 數據包的分片處理的。
  • 爲了應對分片機制的不足,「路徑 MTU 發現」 技術應運而生。路徑 MTU 指的是,從發送端主機到接收端主機之間不須要分片是最大 MTU 的大小。即路徑中存在的全部數據鏈路中最小的 MTU 。
  • 進行路徑 MTU 發現,就能夠避免在中途的路由器上進行分片處理,也能夠在 TCP 中發送更大的包。

4. IPv6

  • IPv6(IP version 6)是爲了根本解決 IPv4 地址耗盡的問題而被標準化的網際協議。IPv4 的地址長度爲 4 個 8 位字節,即 32 比特。而 IPv6 的地址長度則是原來的 4 倍,即 128 比特,通常寫成 8 個 16 位字節。

4.1 IPv6 的特色

  • IP 得知的擴大與路由控制表的聚合。
  • 性能提高。包首部長度採用固定的值(40字節),再也不採用首部檢驗碼。簡化首部結構,減輕路由器負擔。路由器再也不作分片處理。
  • 支持即插即用功能。即便沒有DHCP服務器也能夠實現自動分配 IP 地址。
  • 採用認證與加密功能。應對僞造 IP 地址的網絡安全功能以及防止線路竊聽的功能。
  • 多播、Mobile IP 成爲擴展功能。

4.2 IPv6 中 IP 地址的標記方法

  • 通常人們將 128 比特 IP 地址以每 16 比特爲一組,每組用冒號(「:」)隔開進行標記。
  • 並且若是出現連續的 0 時還能夠將這些 0 省略,並用兩個冒號(「::」)隔開。可是,一個 IP 地址中只容許出現一次兩個連續的冒號。

4.3 IPv6 地址的結構

  • IPv6 相似 IPv4,也是經過 IP 地址的前幾位標識 IP 地址的種類。
  • 在互聯網通訊中,使用一種全局的單播地址。它是互聯網中惟一的一個地址,不須要正式分配 IP 地址。

圖片描述

4.4 全局單播地址

  • 全局單播地址是指世界上惟一的一個地址。它是互聯網通訊以及各個域內部通訊中最爲經常使用的一個 IPv6 地址。
  • 格式以下圖所示,如今 IPv6 的網絡中所使用的格式爲,n = 48,m = 16 以及 128 - n - m = 64。即前 64 比特爲網絡標識,後 64 比特爲主機標識。

圖片描述

4.5 鏈路本地單播地址

  • 鏈路本地單播地址是指在同一個數據鏈路內惟一的地址。它用於不通過路由器,在同一個鏈路中的通訊。一般接口 ID 保存 64 比特版的 MAC 地址。

圖片描述

4.6 惟一本地地址

  • 惟一本地地址是不進行互聯網通訊時所用的地址。
  • 惟一本地地址雖然不會與互聯網鏈接,可是也會盡量地隨機生成一個惟一的全局 ID。
  • L 一般被置爲 1
  • 全局 ID 的值隨機決定
  • 子網 ID 是指該域子網地址
  • 接口 ID 即爲接口的 ID

圖片描述

4.7 IPv6 分段處理

  • IPv6 的分片處理只在做爲起點的發送端主機上進行,路由器不參與分片。
  • IPv6 中最小 MTU 爲 1280 字節,所以,在嵌入式系統中對於那些有必定系統資源限制的設備來講,不須要進行「路徑 MTU 發現」,而是在發送 IP 包時直接以 1280 字節爲單位分片送出。

4.8 IP 首部(暫略)

5. IP 協議相關技術

  • IP 旨在讓最終目標主機收到數據包,可是在這一過程當中僅僅有 IP 是沒法實現通訊的。必須還有可以解析主機名稱和 MAC 地址的功能,以及數據包在發送過程當中異常狀況處理的功能。

5.1 DNS

  • 咱們日常在訪問某個網站時不適用 IP 地址,而是用一串由羅馬字和點號組成的字符串。而通常用戶在使用 TCP/IP 進行通訊時也不使用 IP 地址。可以這樣作是由於有了 DNS (Domain Name System)功能的支持。DNS 能夠將那串字符串自動轉換爲具體的 IP 地址。
  • 這種 DNS 不只適用於 IPv4,還適用於 IPv6。

5.2 ARP

  • 只要肯定了 IP 地址,就能夠向這個目標地址發送 IP 數據報。然而,在底層數據鏈路層,進行實際通訊時卻有必要了解每一個 IP 地址所對應的 MAC 地址。
  • ARP 是一種解決地址問題的協議。以目標 IP 地址爲線索,用來定位下一個應該接收數據分包的網絡設備對應的 MAC 地址。不過 ARP 只適用於 IPv4,不能用於 IPv6。IPv6 中能夠用 ICMPv6 替代 ARP 發送鄰居探索消息。
  • RARP 是將 ARP 反過來,從 MAC 地址定位 IP 地址的一種協議。

5.3 ICMP

  • ICMP 的主要功能包括,確認 IP 包是否成功送達目標地址,通知在發送過程中 IP 包被廢棄的具體緣由,改善網絡設置等。
  • IPv4 中 ICMP 僅做爲一個輔助做用支持 IPv4。也就是說,在 IPv4 時期,即便沒有 ICMP,仍然能夠實現 IP 通訊。然而,在 IPv6 中,ICMP 的做用被擴大,若是沒有 ICMPv6,IPv6 就沒法進行正常通訊。

5.4 DHCP

  • 若是逐一爲每一臺主機設置 IP 地址會是很是繁瑣的事情。特別是在移動使用筆記本電腦、只能終端以及平板電腦等設備時,每移動到一個新的地方,都要從新設置 IP 地址。
  • 因而,爲了實現自動設置 IP 地址、統一管理 IP 地址分配,就產生了 DHCP(Dynamic Host Configuration Protocol)協議。有了 DHCP,計算機只要鏈接到網絡,就能夠進行 TCP/IP 通訊。也就是說,DHCP 讓即插即用變得可能。
  • DHCP 不只在 IPv4 中,在 IPv6 中也可使用。

5.5 NAT

  • NAT(Network Address Translator)是用於在本地網絡中使用私有地址,在鏈接互聯網時轉而使用全局 IP 地址的技術。
  • 除轉換 IP 地址外,還出現了能夠轉換 TCP、UDP 端口號的 NAPT(Network Address Ports Translator)技術,由此能夠實現用一個全局 IP 地址與多個主機的通訊。
  • NAT(NAPT)其實是爲正在面臨地址枯竭的 IPv4 而開發的技術。不過,在 IPv6 中爲了提升網絡安全也在使用 NAT,在 IPv4 和 IPv6 之間的相互通訊當中經常使用 NAT-PT。

5.6 IP 隧道

圖片描述

  • 如上圖的網絡環境中,網絡 A 與網絡 B 之間沒法直接進行通訊,爲了讓它們之間正常通訊,這時必須得采用 IP 隧道的功能。
  • IP 隧道能夠將那些從網絡 A 發過來的 IPv6 的包統合爲一個數據,再爲之追加一個 IPv4 的首部之後轉發給網絡 C。
  • 通常狀況下,緊接着 IP 首部的是 TCP 或 UDP 的首部。然而,如今的應用當中「 IP 首部的後面仍是 IP 首部」或者「 IP 首部的後面是 IPv6
相關文章
相關標籤/搜索