【計算機網絡】網絡層學習筆記:總結IP,NAT和DHCP


前言:這篇文章是學習網絡層協議時候總結的筆記,前面的主要部分介紹的都是IP協議, 后半部分介紹NAT協議和DHCP協議

參考書籍

《計算機網絡-自頂向下》       作者 James F. Kurose
《圖解TCP/IP》                     作者  竹下隆史,荒井透, 劉田幸雄
《計算機網絡技術基礎教程》 作者  劉四清, 龔建萍 (教科書)

IP協議

IP地址的意義

IP地址是分配給每台主機或網絡設備(路由器)的一個32位的二進制數字標識。
不過呢,上面的這個說法容易給我們帶來一種錯覺,就是: IP地址和主機或路由器是一一對應的關系。
 
但實際上,IP地址是由主機上的網卡(NIC)設置的(通常情況下,一個網卡只設置一個IP地址),所以
  • 因為一個主機一般配置一個網卡,所以一般來說一個主機對應一個IP地址
  • 因為一個路由器一般配置多個網卡,所以一般來說一個路由器對應多個IP地址
圖示如下:
 

 

IP地址的結構

我們前面說過,IP地址是一個32位的二進制數字標識,但為了更好地為人們所接受,我們一般用點分十進制(dotted-decimal notation)的轉化方式去表示它。
點分十進制: 將原來32位的IP地址每8位為1組,分成4組,中間用“.”隔開,然后將每組數轉化為10進制數。
例子
 
10101100  00010100 00000001 00000001
加點分組得到:
10101100.  00010100. 00000001. 00000001
轉化為10進制:
172.20.1.1
(以00010100轉化為20為例,從右向左計算1 × 2^2 + 1 × 2^4 = 20 )
 

IP地址的總數量

因為IP地址有32位,由0或1的二進制數組成,所以一共有2^32  ≈ 43億 個不同組成。也就是IP地址(IPv4)總量是43億個左右。 這些IP地址在未來顯然是不夠用的(我們下面將介紹高效地使用IP的一些方法)
 

IP地址的組成

IP地址由“網絡地址”(網絡標識)和“主機地址”(主機標識)兩部分組成
網絡地址和主機地址的划分,使我們能夠清晰地區分 [不同的網段] [同一網段內的不同主機]
  • 不同的網段的網絡地址不同
  • 對同一網段的不同主機IP,網絡地址相同,主機地址不同
 

 

IP地址的分類

 
  • IP地址的前5位用於標識地址的類型, 據此將IP地址划分為A類,B類,C類,D類和E類。如第一位為0代表A類地址,前兩位為10代表B類地址,前三位為110代表C類地址
  • A/B/C類地址叫做主類地址,為用戶使用的地址。D/E類地址叫做次類地址
  • 如下圖所示,可以看到從A ->B -> C ,在IP地址中, 主機地址所占位數越來越少,而網絡地址所占位數越來越多。因此,從A到C,IP地址所能允許的網絡數量越來越多, 而每個網絡里所能容納的主機數則越來越少。
 
【注意】IP地址前幾位用於是標識IP類型的數字,IP地址也可以看作由三部分組成: 地址類型,網絡地址和主機地址。

 

 
 
關於從A到C,IP地址所能允許的網絡數量越來越多, 而每個網絡里所能容納的主機數則越來越少, 這一點做一個量化的描述:
  • 使用A類地址的網絡數上限126個(2^7 -2 = 126, 因為0和128兩個地址有特殊作用), 每個網絡能容納主機數約為1700萬個(2^24)。
  • 使用B類地址的網絡數上限1萬6千個(2^14 = 16384), 每個網絡能容納主機數約為6萬5千(2^16 = 65536)。
  • 使用C類地址的網絡數上限30萬個(2^14 =297152), 每個網絡能容納主機數為256個(2^8)。
各類地址的特點
(1) A類 —— 主要用於擁有大量主機的網絡,它的特點是網絡數少而主機數多
(2) B類 —— 主要用於小型局域網絡,它的特點是網絡數和主機數大致相同(同一等級上)
(3) C類 —— 主要用於小型局域網絡,它的特點是網絡數多, 而主機數少
(4) D類 —— 主要用於已知的多點傳送或組的尋址
(5) E類 —— 一個實驗地址,保留給將來使用
 

子網和子網掩碼

 
固定的IP分類的弊端
上面我們說到: 主類IP地址可以分為A,B,C類。 但這種固定的分類方式卻導致了IP地址的浪費: 例如一個需要1萬個IP地址的機構,若使用C類地址顯然不能滿足需要(使用C類地址的網絡最多容納256個主機)但使用B類地址則又造成了5.5萬個IP地址的浪費!(使用C類地址的網絡最多容納6萬5千個主機)  IP地址的利用率將低於20%。
 
這時候,我們意識到一個問題: 我們需要細分出比A/B/C類更細粒度的網絡, 而完成這項工作的,就是子網掩碼。
 
子網掩碼的作用
子網掩碼的作用是屏蔽IP地址的一部分,從而更加靈活地指定網絡地址的長度,實現網絡地址和主機地址的進一步細分, 具體:
  • 凡是IP地址的網絡和子網地址部分, 用 1表示
  • 凡是IP地址的主機地址部分, 用 0表示
如下圖所示:
 

 

可以看到, IP地址172.20.100.52 原是個B類的地址, 網絡地址的長度為14位,但經過子網掩碼的作用,擴展為24位。 正因為子網掩碼的作用,才能靈活地指定網絡地址的長度,而不局限於A/B/C類的地址分類,從而提高IP地址的利用率
 
 
子網掩碼的結構和表示方式
子網掩碼是和IP地址結構相同的32位的二進制數字標識,也同樣可以用點分十進制的方式表示
 
子網掩碼有兩種表示方式,例如以 172. 20. 100. 52為例
1.  將IP地址和子網掩碼的地址分別用兩行來表示
2.  在IP地址的后面追加網絡地址的位數, 用 ”/“ 隔開
 

 

 

CIDR技術

CIDR是伴隨着子網掩碼出現的地址分配策略(Classless Interdomain Routing, CIDR)。
 
正如前面所提及的問題,直到20世紀90年代中期, 向各種組織分配IP地址都以A類,B類,C類等分類單位進行。對架構大規模網絡的組織,一般會分配一個A類地址。反之,在架構小規模網絡時候,則分配C類地址。然而A類地址的派發在全世界最多也無法超過128個,加上C類地址的主機標識最多只允許254台計算機相連, 這導致眾多組織開始申請B類地址,結果是B類地址也開始嚴重缺乏
 
於是乎, 人們開始放棄IP地址的分類, 而是采用任意長度分割IP地址的網絡標識和主機標識。這種方式就是CIDR,即“無類型域間選路”
 
根據CIDR,連續多個C類地址就可以划分到一個較大的網絡內,從而更有效地利用了當前的的IPv4地址,同時又通過路由集中降低了路由器的負擔。
 

 

 

IP數據報格式(IPv4)

IP數據報的格式如圖所示:

 

 
它的組成部分包括:
  • 版本號
  • 首部長度
  • 服務類型(TOS)
  • 數據報長度
  • 標識,標志,片偏移
  • 壽命
  • 協議
  • 首部檢驗和
  • 源IP地址/目的IP地址
  • 數據/有效載荷
 
版本號
這4比特規定了數據報的IP協議版本,目前使用的IP版本為IPv4
 
首部長度
因為一個IPv4的數據報包含一些可選項(包含在IP數據報的首部中),所以首部長度並不是固定的,所以我們需要用“首部長度”這4比特來確定數據報中的數據部分是從哪里開始的
 
服務類型
服務類型(TOS)用來使不同類型的IP的IP數據報(例如一些特別要求低時延,高吞吐量或可靠性的數據報)能互相區分開來。
 
數據報長度
這是IP數據報的總長度(首部加上數據), 以字節計
 
標識,標志,片偏移
該三個字段和IP分片有關(下面會細講)
 
壽命
壽命(Time - To - Live, TTL)字段用來確保數據報不會永遠在網絡中循環(如由於長時間的選路循環) 每當數據報經過一台路由器時,該字段減1, 若TTL字段減為0 , 則該數據報必須丟棄。
 
協議
該字段僅在一個IP數據報到達其最終目的地時才會用到。該字段值指明了IP數據報的數據部分應該交付給哪個運輸層協議。 例如值為6則表明數據部分要交給TCP, 值為17表明數據要交給UDP
 
首部檢驗和
首部檢驗和用於幫助路由器檢測收到的IP數據報中的比特錯誤。首部檢驗和是這樣計算的: 將首部中每兩個字節當作一個數,用反碼運算對這些數求和,這個和就叫做“檢驗和”,被存放在報文字段中。 同時,路由器會對每個接收到的IP數據報計算其首部檢驗和,  通過檢查這兩個檢驗和是否一致,來檢查是否出現了錯誤
 
源IP地址/目的IP地址
當源主機產生一個數據報的時候, 它在源IP字段中插入它的IP地址,在目的IP地址字段中插入其最終目的地的地址
 
數據(有效載荷)
這是IP數據報最后的也是最重要的字段,大多數情況下,IP數據報中的數據字段含有要交付給目的地的運輸層報文段(TCP或UDP),在少數情況下,也能承載其他類型的數據,例如ICMP報文。
 

IP數據報分片

 
分片的概念
數據報分片,就是路由器將一個較大IP數據報分成兩個或更多較小的數據報發送, 這些被分割后的小數據報叫做片(fragment)
 
分片的原因
為什么要分片呢? 這要從最大傳輸單元(MTU, Maximum Transmission Unit)開始說起。
 
在OSI模型中,網絡層是依靠鏈路層支撐的,每個IP數據報是封裝在鏈路層幀中傳輸的。 所以IP數據報的字節長度受到鏈路層幀的承載能力的限制
 
一個鏈路層幀的最大傳輸單元, 叫做MTU。
下面是不同的鏈路層協議的MTU示例:
 
 

 

 
那么讓我們考慮這樣一個場景, 一個路由器連接了一個MTU為4352的FDDI和一個MTU只有1500的以太網。 假設一個數據報經由路由器從FDDI進入以太網,因為FDDI的MTU比較高, 使得IP數據報的字節長度可以達到4000多字節。
 
當這個4000多字節的大數據報試圖進入MTU=1500的以太網的時候, 這個大數據沒辦法在一個鏈路層幀內傳輸, 那該怎么辦呢?
 
 

 

路由器將對這個大數據報進行分片, 分割成幾個較小的數據報, 封裝在以太網的鏈路層幀中傳輸。
 
 

 

 
分片和重新組裝
有分必有合, 既然有分片, 那么當然也有重新組裝的功能。
IP數據報的分片路由器完成的,而重新組裝則是由分組最終到達的接收主機完成的,如下圖所示
 
 

 

重新組裝成功進行的依據——標志, 標識和片偏移
 
重新組裝要怎樣才能准確無誤地完成呢? 從IP數據報的接收主機的角度,我們需要思考以下三個問題:
  • 怎么識別哪些數據報是來源於同一個初始數據報?
  • 怎么確定當前接收的數據報是初始數據報的最后一個片? (如何確定接收完成)
  • 怎么確保接收的小數據報能夠以正確的順序組裝?
 
完成這三個問題所對應的功能的, 就是我們前面所介紹的IP數據報的報文字段: 標識,標志,片偏移
 
標識
  • 當發送主機創建一個數據報時, 發送主機會在該報文的標識字段中寫入標識號, 標示號是一個每發送一次數據報就增加1的數字 這為每個初始數據報提供了唯一標識
  • 當路由器分片的時候每個小數據報(片)的報文里除了附加初始數據報的源/目的主機地址外,還會附加初始數據報的標識號
 
對目的主機來說,接收到的數據報的標識相同,則它們都來源於同一個初始數據報,這樣就解決了第一個問題
 
標志
在分片的時候,最后一個片的標志比特被設置為0, 而其他的片的標志比特被設置為1。這樣,目的主機就可以知道它當前接收到的這個數據報到底是不是最后一個“片” (接收工作是否已經處理完畢)
這樣就解決了第二個問題
 
片偏移
片偏移用來指定當前這個片應該被放置在原數據報的哪個位置,從而確保了組裝的正確順序, 這樣就解決了第三個問題
 
下面是 標識,標志,片偏移的示范圖:
 

 

 

DHCP協議

DHCP的全稱是Dynamic Host Configuration Protocol, 即動態主機配置協議, 它的特點是能夠自動設置IP地址,並實行統一的管理。
 
我們有兩種為主機設置IP地址的方式:
  • 管理員手動設置主機的IP地址
  • 通過DHCP自動設置IP地址 

DHCP的作用

DHCP是一種即插即用的協議(plug-and-play protocol)。實際上,我們在生活中經常享受着DHCP帶來的便利:我們有時會攜帶筆記本電腦或手機到公共場所里例如圖書館,並且通過WiFi連上一個陌生的子網,但是我們並沒有做重新為主機配置IP地址的工作!
 
假設沒有DHCP的幫助:
 

 

而在DHCP的支持下:
 

 

 

DHCP服務器的工作流程

  • DHCP服務器管理着一個包含一系列IP地址的地址池
  • 每當一台新的主機加入時,DHCP服務器就從其當前可用地址池中分配一個任意的地址給它
  • 而每當一台主機離開的時候,其IP地址就被回收到地址池中
 
 

 

NAT協議

要描述NAT協議, 要先從私有地址和全局地址說起

私有地址和全局地址

 
先讓我們思考一下:主機的IP地址是否必須是唯一的呢?
1. 的確,在一開始的時候,任何一台主機或路由器都必須配有一個唯一的IP地址。
2. 但隨着IP地址不足的問題日益顯著, 人們對IP地址做了新的處理方式:
  • 將IP地址分為私有IP地址全局IP地址
  • 全局IP地址必須是唯一的
  • 私有IP地址不需要是唯一的,只要在同一個域里保持唯一便可,在不同域里可以重復
 
下圖所示的是私有IP地址的范圍(A/B/C類各有一段,共三段)
 

 

下圖所示的是私有IP地址和全局IP地址的圖解:
 

 

 

NAT定義

NAT(Network Address Translator)也即網絡地址轉換,是用於在本地網絡中使用私有地址,在連接互聯網時轉而使用全局IP地址的技術。
 

NAT工作流程

如下圖所示, 以10.0.0.10的主機與163.221.120.9的主機的通信為例,利用NAT, 途中的NAT路由器將發送源地址從10.0.0.10轉換為全局地IP地址(202.244.174.37)再發送數據。 反之,當包從地址163.221.120.9發過來時,目標地址(202.244.174.37)先被轉換成私有IP地址10.0.0.10以后再被轉發。
 

 

NAT作用機理

在NAT路由器內部, 有一張自動生成的用於轉換地址的表, 當1.0.0.10向163.221.120.9發送第一個包的時候生成這張表,並且按照表中的映射關系進行處理。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM