天天看點

計算機網絡 | 網絡層 :IP協定詳解IP協定

網絡層

  • IP協定
    • IPV4的協定格式
    • 位址管理
      • IP位址的組成
      • IP位址的分類
      • 特殊的IP位址
      • 子網劃分
      • 私有IP位址與公網IP位址
    • 路由選擇

網絡層的目的就是實作終端節點之間的通信,即點對點通信。具體功能包括路由選擇與位址管理等。

這一層主要有IP和ICMP兩個協定組成,在這裡就先重點講解IP協定,後面會單獨将IP協定相關的如ICMP,DNS,NAT,NAPT,DHCP等協定單獨寫一篇部落格彙總。

IP協定

IP是InternetProtocol(網際互連協定)的縮寫,是TCP/IP體系中的網絡層協定。設計IP的目的是提高網絡的可擴充性:一是解決網際網路問題,實作大規模、異構網絡的互聯互通;二是分割頂層網絡應用和底層網絡技術之間的耦合關系,以利于兩者的獨立發展。根據端到端的設計原則,IP隻為主機提供一種無連接配接、不可靠的、盡力而為的資料報傳輸服務。

因為目前IP協定主流的版本有IPV4和IPV6,但是IPV6目前不夠普及,并且泛用性小,是以我這篇部落客要寫的是具有代表性的IPV4。

IPV4的協定格式

計算機網絡 | 網絡層 :IP協定詳解IP協定
  • 4位版本号:用來辨別IP首部的版本号,常見的即為IPV4和IPV6,各個版本的首部格式都有所不同,這裡我畫的是IPV4的。
計算機網絡 | 網絡層 :IP協定詳解IP協定
  • 4位首部長度:表示IP首部的長度,機關為4位元組即32位,因為首部長度具有4位,所能表示的最大資料為15即2^4 - 1,是以IP首部的最大長度為15 * 4 = 60位元組,因為首部長度最少為5(除選項),是以IP首部的最小長度為20位元組。
  • 8位服務類型:用來表明服務品質。目前0-2位棄用,7位保留。3-6位為TOS字段,分别為最低延遲、最大吞吐、最大可靠性、(這四位合并也代表着最大安全)
計算機網絡 | 網絡層 :IP協定詳解IP協定
  • 16位資料報長度:标志IP首部與發送資料的長度之和,大小為2^16,即64K,65535。因為IPV4的報頭和資料總大小為65535位元組,但是資料中又包含了上層(傳輸層)傳下來的資料,是以會将上層如UDP協定資料的大小限制在65535-20(ip協定首部)- 8(UDP協定首部)。IPV6則沒有這個問題。
  • 16位辨別:辨別目前分片屬于哪一個完整的上層封包,用于分片重組。因為受限于資料鍊路層的MTU限制,如果IP封包大于MTU,卻又符合資料報長度字段,此時就會在網絡層進行資料的分片,将資料拆分開來發送,之後再重組
  • 3位标志位:辨別包被分片的相關資訊。0位保留,1位代表是否進行分片,2位代表如果分片是否位最後一個包。
計算機網絡 | 網絡層 :IP協定詳解IP協定
  • 13位片偏移:當分片後的資料在對端重組時,用來确認該分片在原始封包中的位置。因為13位能夠辨別的最大大小為8192,而資料報長度為65535,也就是16位。是以要想用13來辨別16位,就将片偏移的機關設定為了8個位元組,是以也就是說,例如目前片偏移位1000,則說明在原始資料中的1000*8 = 8000處。
  • 8位生存時間:封包的最長生命周期(也代表着可以中轉的路由器數量),每經過一次路由器就會減一,為0則直接丢棄。主要用于防止路由環路問題(多個路由互相連接配接,形成轉發環路,資料在環路中不斷的轉發)
  • 8位協定:記錄傳輸層所使用的協定,用于資料分用時,選擇上層解析協定
    計算機網絡 | 網絡層 :IP協定詳解IP協定
    計算機網絡 | 網絡層 :IP協定詳解IP協定
  • 16位校驗和:用于檢驗接收的資料與發送的資料是否一緻,不一緻則丢棄。校驗方法:二進制反碼求和,即對封包從頭開始的每個位元組進行取反相加,高出16位則截斷高位,與低16位相加,得到校驗和。
  • 32位源IP位址/目的IP位址:表示發送端/接收端的IP位址,用于辨別通信的兩台主機
  • 0-40位元組選項:主要協商和描述一些資訊,如安全級别,源路徑,路徑記錄,時間戳。因為IP首部大小最高為60位元組,而前面必須的有20位元組,是以選項的大小可以為0-40位元組。
  • 填充位:保證IP首部大小為4位元組的整數倍,不夠則填充

位址管理

位址管理的目的是讓IP位址的配置設定更加的合理

IP位址的組成

IP位址就是網絡中主機的唯一辨別,無論哪個主機與哪個主機之間進行通信,都需要用到IP位址來進行定位。

而IP位址,又由網絡号和主機号組成。

網絡号: 辨別網絡,保證每一個路由器配置設定的IP位址都會帶有自己的網絡辨別,(不同網絡使用不同的網絡号配置設定位址就可以避免沖突)

主機号: 辨別主機,每一個主機在所在的網絡中都有唯一的主機号。

例如同一網絡下相鄰的兩個主機

計算機網絡 | 網絡層 :IP協定詳解IP協定

/24代表着前24位是網絡号,而32-24=8,也就是剩下8位為主機号。

上圖中兩個主機的網絡号為:192.168.128

而他們的主機号分别為21和22。

不同的子網其實就是把網絡号相同的主機放到一起. 如果在子網中新增一台主機, 則這台主機的網絡号和這個子網的網絡号一緻,

但是主機号必須不能和子網中的其他主機重複

通過合理的設定主機号和網絡号,就可以保證在互相連接配接的網絡下,每台主機的IP位址都不同。

同時,可以利用DHCP技術來自動給子網中新增的主機配置設定IP位址,詳細的在下一篇部落格中。

IP位址的分類

早期時人們通過對網絡号和主機号的劃分,将IP位址分為5類。

計算機網絡 | 網絡層 :IP協定詳解IP協定

A類: 0.0.0.0到127.255.255.255

B類: 128.0.0.0到191.255.255.255

C類: 192.0.0.0到223.255.255.255

D類: 224.0.0.0到239.255.255.255

E類: 240.0.0.0到247.255.255.255

使用較為廣泛的主要為ABC三類位址,DE為特殊的IP位址。

A類IP位址:

用于組建大型網絡。第一位固定為0,7位網絡号,24位主機号。

IP位址範圍:0.0.0.0 ~ 127.255.255.255

例如1.0.0.0 ~1.255.255.255。

對于其中某一個網絡,其所能容納的主機數量位2^24 - 2,也就是16581373個主機(全0和1保留不用)

B類IP位址:

用于組建中型網絡。前兩位固定為10,14位網絡号,16位主機号。

IP位址範圍:128.0.0.0 ~ 223.255.255.255

例如128.1.0.0 ~128.1.255.255。

對于其中某一個網絡,其所能容納的主機數量位2^16 - 2,也就是65534個主機(全0和1保留不用)

C類IP位址:

用于組建小型網絡。前三位固定為110,21位網絡号,8位主機号。

IP位址範圍:192.0.0.0 ~ 223.255.255.255

例如192.168.1.0 ~192.168.1.255。

對于其中某一個網絡,其所能容納的主機數量位2^8 - 2,也就是254個主機(全0和1保留不用)

但是這種劃分方法是具有局限性的,因為A類太多(幾千萬個主機不可能用得完),而C類太少(254個一下就用完了)。是以政府、企業、學校等組織都去申請較為适中的B類位址,但是在實際使用中,不可能每一個組織都能用滿,是以造成了大量IP位址的浪費。

是以為了解決這種情況,就提出了新的劃分方法,CIDR。

  • 引入一個額外的子網路遮罩(subnet mask)來區分網絡号和主機号;
  • 子網路遮罩也是一個32位的正整數. 通常用一串 “0” 來結尾;
  • 将IP位址和子網路遮罩進行 “按位與” 操作, 得到的結果就是網絡号; 網絡号和主機号的劃分與這個位址的類型無關。

子網路遮罩就是一段連續的二進制1。子網路遮罩與IP位址相與則能得到網絡号,而子網路遮罩取反則能得到主機号的範圍。

例如:

計算機網絡 | 網絡層 :IP協定詳解IP協定
計算機網絡 | 網絡層 :IP協定詳解IP協定
計算機網絡 | 網絡層 :IP協定詳解IP協定

可見,IP位址與子網路遮罩做與運算可以得到網絡号, 主機号從全0到全1就是子網的位址範圍;

IP位址和子網路遮罩還有一種更簡潔的表示方法,例如140.252.20.68/24,表示IP位址為140.252.20.68, 子網路遮罩的高

24位是1,也就是255.255.255.0

特殊的IP位址

0.0.0.0:可以識别目前主機上任意網卡位址(也就是預設IP位址),常用于伺服器的監聽位址。(表示綁定監聽本機上的所有位址)

255.255.255.255:全網廣播位址(任意一個主機收到這個位址的資料,都會認為是發送給自己的,常用于DHCP請求位址。)

127.0.0.1:本地虛拟回環網卡的位址(常用于本地的網絡通信測試,即自己給自己發送資料)

在上面寫到過,主機号全為1或者0的位址是特殊的,無法配置設定給主機。

主機号全為0:

其實就是網絡号,代表着這個網段。

主機号全為1:

其實是UDP區域網路廣播位址(适配于目前網絡的所有主機)。

子網劃分

可以把基于每類的IP網絡進一步分成更小的網絡,每個子網由路由器界定并配置設定一個新的子網網絡位址,子網位址是借用基于每類的網絡位址的主機部分建立的。劃分子網後,通過使用掩碼,把子網隐藏起來,使得從外部看網絡沒有變化,這就是子網路遮罩。

例如這道題目

某機關申請到一個C類網絡位址:192.168.2.0/24,該機關有4個部門,希望從這個網絡中平均劃分出四個子網,請列出每個子網的網絡号,子網路遮罩,IP位址範圍

因為是C類網絡,主機号隻有八位,而又要劃分出4個子網,那麼就以為着要從8位中取兩位來作為網絡号。

192.168.2.00 192.168.2.01 192.168.2.10 192.168.2.11。

子網路遮罩則為255.255.255.192

因為隻剩下6位作為主機号,是以能夠使用的主機數量隻有2^6 -2也就是62台。

是以每個子網分别為

子網1:

網絡号:192.168.2.00 子網路遮罩:255.255.255.192 IP位址範圍:192.168.2.0 ~192.168.2.63

子網2:

網絡号:192.168.2.00 子網路遮罩:255.255.255.192 IP位址範圍:192.168.2.0 ~192.168.2.63

子網3:

網絡号:192.168.2.00 子網路遮罩:255.255.255.192 IP位址範圍:192.168.2.0 ~192.168.2.63

子網4:

網絡号:192.168.2.00 子網路遮罩:255.255.255.192 IP位址範圍:192.168.2.0 ~192.168.2.63

私有IP位址與公網IP位址

如果一個組織内部組建區域網路,IP位址隻用于區域網路内的通信,而不直接連到Internet上,理論上 使用任意的IP位址都

可以,但是RFC 1918規定了用于組建區域網路的私有IP位址

  • 10.* ,前8位是網絡号,共16,777,216個位址
  • 172.16.到172.31.,前12位是網絡号,共1,048,576個位址
  • 192.168.*,前16位是網絡号,共65,536個位址 包含在這個範圍中的, 都成為私有IP, 其餘的則稱為全局 IP(或公網IP);
  • 一個路由器可以配置兩個IP位址, 一個是WAN口IP, 一個是LAN口IP(子網IP).
  • 路由器LAN口連接配接的主機, 都從屬于目前這個路由器的子網中.
  • 不同的路由器, 子網IP其實都是一樣的(通常都是192.168.1.1).子網内的主機IP位址不能重複. 但是子網之 間的IP位址就可以重複了.
  • 每一個家用路由器, 其實又作為營運商路由器的子網中的一個節點。這樣的營運商路由器可能會有很多級, 最外層的營運商路由器, WAN口IP就是一個公網IP了. 子網内的主機需要和外網進行通信時,路由器将IP首部中的IP位址進行替換(替換成WAN口IP), 這樣逐級 替換, 最終資料包中的IP位址成為一個公網IP.這種技術稱為NAT(Network Address Translation,網絡地 址轉換).
  • 如果希望我們自己實作的伺服器程式,能夠在公網上被通路到, 就需要把程式部署在一台具有外網IP的服 務器上. 這樣的伺服器可以在阿裡雲/騰訊雲上進行購買.

在我們通過ipconfig檢視本機IP位址時,往往看到的都是192.168.0.x。其實這個是我們的私有ip位址,可以這麼說,比如在一定的區域内,劃分出了很多個網段,而這些網段下也就是我們的私網ip,這個ip位址僅僅用于我們内部的通信。也就是說,在這個大的網絡下,可能存在無數個這樣的子網,也就是為什麼我們無論在家,還是在學校等地方,所看到的ip位址幾乎是一樣的。

這個私有的ip位址隻能内部通信,如果要與外部通信,就需要借助到NAT技術來将私有的IP位址轉換為公有的IP位址。也就是說,這個網絡下的所有私有,都需要用統一的公網IP位址來外部通信。

關于NAT和NAPT的詳細就不在這裡解釋,下一篇部落格在一起寫。

路由選擇

路由選擇,即路由器為每一個流經的資料根據目的IP位址進行路徑選擇。

  • 當IP資料包, 到達路由器時, 路由器會先檢視目的IP;
  • 路由器決定這個資料包是能直接發送給目标主機, 還是需要發送給下一個路由器;
  • 依次反複, 一直到達目标IP位址;
    計算機網絡 | 網絡層 :IP協定詳解IP協定

路由器内部通過維護一個路由表,來決定資料轉發的路徑。

路由表的每一項中記錄了目的網絡,子網路遮罩,下一跳。

通過查詢路由表來決定轉發的對象。

  • 路由表可以使用route指令檢視
  • 如果目的IP命中了路由表, 就直接轉發即可;
  • 路由表中的最後一行,主要由下一跳位址和發送接口兩部分組成,當目的位址與路由表中其它行都不比對 時,就按預設路由條目規定的接口發送到下一跳位址。

路由表可以通過手動維護(靜态路由),也可以通過ospf,rip等路由選擇算法來自動選取。

繼續閱讀