IP協議篇
網絡層與數據鏈路層之間的關係
網絡層負責端到端之間(消息發送端與消息接收段)的通信,但至於中間消息是怎樣被轉發的,得通過數據鏈路層實現,也就是說數據鏈路層負責每個數據鏈路從源MAC地址到目標MAC地址之間的數據傳輸,而網絡層則是規定了數據最開始的發送端和最終的接收端.
把這個過程比喻成快遞運輸,假如我在北京要發送一個快遞到武漢市華中科技大學機械大樓,IP層完成的任務就是在快遞單上寫上寄件人地址和收件人地址(源地址和目的地址)和其他信息,然後貼到快遞包裹上,然後快遞點通過一張規定好的快遞傳輸信息表(比如目的地爲武漢,則直接發送到鄭州快遞中轉站),這張信息表在網絡傳輸中叫做路由控制表,這樣快遞就從寄件人----北京----鄭州中轉站----武漢總站----華中科技大學站----華中科技大學機械學院----收件人手中,其中北京到鄭州中轉站之間的傳輸即爲數據鏈路層的傳輸,只負責從一箇中轉點運輸到下一個中轉點(數據鏈路層的主要作用是在互聯同一種數據鏈路的節點之間進行包傳遞)
IP協議爲什麼是面向無連接的
IP面向無連接,在發包之前不需要建立與對端目標地址之間的連接,將這個功能實現委託給了TCP層去實現.
- 爲了簡化,面向連接比起面向無連接處理相對複雜.
- 爲了提速,面向連接每次通信之前都要建立連接,會降低處理速度.
- 分層實現不同的功能,IP只負責將數據發給目標主機,而TCP負責保證對端主機確實接收到數據.每一層的分工明確,簡化協議的實施與編程,有利於協議今後的擴展和性能優化.
IP地址分類
IP地址(32位)分爲四個級別,分別是A類,B類,C類,D類.
A類地址
首位以0開頭,從第1位到第8位是它的網絡標識
十進制表示: 0.0.0.0~127.0.0.0是A類的網絡標識,後24位用於主機標識
一個網段可容納主機地址上限爲:16,777,214個
B類地址
首位以10開頭,從第1位到第16位是它的網絡標識
十進制表示: 128.0.0.0~191.255.0.0是A類的網絡標識,後16位用於主機標識
一個網段可容納主機地址上限爲:65,534個
C類地址
首位以110開頭,從第1位到第24位是它的網絡標識
十進制表示: 192.0.0.0~223.255.255.0是A類的網絡標識,後8位用於主機標識
一個網段可容納主機地址上限爲:254個
D類地址
首位以1110開頭,從第1位到第32位是它的網絡標識
十進制表示: 224.0.0.0~239.255.255.255是A類的網絡標識,沒有主機標識,常被用於多播.
補充知識:
主機標識位上不可以全是0或者全是1,這兩種情況有特殊用處
全是0代表對應的網絡地址或IP地址不可獲知的情況
全是1的主機地址通常被作爲廣播地址
子網掩碼
引入子網後,IP地址就有了兩種識別碼,一個是IP地址本身,一個是表示網絡部的子網掩碼
子網掩碼的作用: 將IP地址劃分爲更小粒度的網絡,而不再受限於ABCD類地址劃分方式.
子網掩碼的構成: 採用32位二進制表示,對應IP地址網絡標識部分的位全部爲"1",對應主機標識部分的位全部爲"0".
子網掩碼的兩種表示方式:
以172.20.100.52的前26位爲網絡標識爲例
- IP地址:172.20.100.52 子網掩碼:255.255.255.192
- IP地址:172.20.100.52/26(直接在IP地址後面追加網絡地址的位數,用"/"隔開)
路由控制
路由控制表的作用:
發送數據包所使用的地址爲網絡層的地址(IP地址),但是僅僅有IP地址無法完成將數據包傳輸到對端目標地址,因爲中間可能存在很多數據鏈路.在數據發送過程中還需要指明路由器或主機的信息,保存這種信息的就是路由控制器.
路由控制表的形成方式:
- 靜態路由控制:由管理員手動設置
- 動態路由控制:路由器與其他路由器相互交換信息時自動刷新
路由控制轉發的原理:
前提: 路由控制表中記錄着網絡地址和對應的下一步應該轉發的路由器的地址.
在發送IP包時,首先要確定IP包首部中的目標地址,再從路由控制表中找到與該地址具有相同網絡地址的記錄,根據該記錄將IP包轉發至對應的下一個路由器(如果路由控制表中存在多條相同網絡地址的記錄,就選擇一個最爲吻合的網絡地址,即相同位數最多的網絡地址,例如172.20.100.52的網絡地址與172.20/16和172.20.100/24兩項都是匹配的,但是172.20.100/24是最吻合的,應該轉發到該地址對應的路由器.
補充知識:
環回地址:環回地址是在同一臺計算機上不同程序之間進行網絡通信所使用的默認地址,即127.0.0.1,也可以用localhost來代替,使用該IP時,數據包並不會流向網絡.
IP分割處理與再構成
每種數據鏈路的使用目的不同,所以可承載的MTU也不同
爲何需要將IP報文分割
每個數據鏈路的最大傳輸單元(MTU)不盡相同,一旦IP報文的大小比數據鏈路中最小的MTU大的時候,就會發生IP報文分割,也就是分片.(可以理解爲數據鏈路的運輸能力不夠,只能將單個報文分割成多個報文運輸)
爲何經過分片後的IP數據報的重組只能由目標主機進行
如果在中途重組,有可能在之後又面臨分片的尷尬處境,這會給路由器帶來多餘的負擔,也會降低網絡傳輸效率.
路徑MTU發現
路徑MTU:是指從發送端主機到接收端主機之間不需要分片時最大的MTU大小,也就是路徑中所有數據鏈路中最小的MTU.
路徑MTU發現原理:
- 首先源地址將數據報的分片標誌位設置爲不分片,並將IP數據報發送出去
- 路徑上任何需要將分組進行分片的設備都會將這種數據報丟棄並返回“數據報過大和當前數據鏈路允許的最大MTU“的ICMP響應到源地址
- 源地址主機將IP分片,並重新設置最大MTU,再次將IP數據報發送出去
- 不斷探索發送直到不再收到ICMP響應,這樣源主機就”學習“到了無需分片就能通過這條路徑的最大的最大傳輸單元。
[外鏈圖片轉存失敗(img-fi9yRcRw-1565752177829)(https://raw.githubusercontent.com/zrysmt/mdPics/master/HTTP協議/tcp-ip/12.png)]
IPv4首部
IP首部中包含用於IP協議進行發包控制時所有的必要信息
屬性 | 大小(比特) | 作用 | 舉例(補充說明) |
---|---|---|---|
版本 | 4 | 標識IP首部的版本號 | IPv4的版本號爲4 |
首部長度 | 4 | 表明首部的大小,單位爲4字節(32比特) | 沒有可選項時,首部長度設置爲5,即IP首部長度爲4*5=20字節 |
區分服務 | 8 | 表明服務質量 | 基本被所有網絡無視,沒有投入使用 |
總長度 | 16 | IP首部+數據部分的總字節數 | IP包的最大長度爲65535(=2的16次方)字節 |
標識 | 16 | 用於分片重組 | 單個IP數據報被分割後的分片,該標識相同 |
標誌 | 3 | 表示包被分片的相關信息 | 第1個比特未使用,目前必須爲0,第二個比特表示是否分片,第三個比特表示被分片的情況下是否爲最後一個包 |
片位移 | 13 | 標識被分片的每一個分段相對於原始數據的位置 | 第一個分片對應的值爲0 |
生存時間 | 8 | 可以中轉多少個路由器 | 每經過一個路由器,TTL減1,變爲0則丟包,可以避免IP包在網絡內無限傳遞 |
協議 | 8 | 表示IP包傳輸層的上層協議編號 | TCP編號爲6,UDP編號爲17 |
首部校驗和 | 16 | 校驗數據報的首部,確保IP數據報不被破壞 | |
源地址 | 32 | 表示發送端地址 | |
目標地址 | 32 | 表示接收端地址 |
IPv6
IPv6是爲了根本解決IPv4地址耗盡的問題而被標準化的網際協議.
IPv4地址長度爲4個8位字節,即32比特,而IPv6的地址長度爲128比特,一般寫成8個16位字節.
IPv6用十六進制表示(8個16位字節)
FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
IPv6地址區分
地址名稱 | 區別 |
---|---|
全局單播地址 | 全世界唯一的一個地址 |
鏈路本地單播地址 | 同一個數據鏈路內唯一的地址 |
唯一本地地址 | 不進行互聯網通信時所使用的地址 |