IP協議
- IP協議的原理是什么?
- IP協議和IP地址有什么關系?
- IP協議的首部是怎么樣的
1.1 IP協議概述
無連接、不可靠
IP協議(Internet Protocol,互聯網協議),是TCP/IP協議棧中最核心的協議之一,通過IP地址,保證了聯網設備的唯一性,實現了網絡通信的面向無連接和不可靠的傳輸功能。
1.2 IP協議原理
如上圖所示,當多台接入互聯網的設備訪問同一台服務器的時候,服務器如何區分不同電腦的請求,並且准確的將資源返回?
我們只要給每個設備加上一些“標識”,並且在通信的時候,將“標識”嵌入到數據包里,則整個數據往返過程可以准確無誤。
我們給PC和服務器加入IP地址,並且以PC1訪問服務器為例:
PC1的IP地址為12.1.8.66,Server的地址為8.8.8.8,那么整個通信過程應該是這樣的📞:
- PC1在請求數據包里封裝了源IP地址和目的IP地址,並將帶有IP地址信息的數據包發送到互聯網。
- 在互聯網中有大量的網絡通信設備(路由器等),路由器根據數據包中的IP地址查找路由表(Map),然后以接力的形式,將數據包逐條轉發至目標服務器。
- 服務器接收到請求數據包之后,將源IP地址和目的IP地址翻轉,並封裝回應數據包發送到互聯網。
上面這個通信過程類似於我們平時的寄信✉:
- 寄信時需要在信封中填寫發件人和收件人的姓名和地址,然后將信件塞入信封中。
- 郵政公司根據信封中的收件地址,通過物流平台(飛機、貨車)將信件跨省市傳輸,直至收件人城市。
- 送信員找到對應的收件人所在的小區地址,然后聯系收件人,將信件交付到收件人手中
在寄信過程中,信封相當於IP地址,整個信件相當於數據包,郵政公司|送信員相當於路由器|交換機。
通過以上的案例我們可以明確以下知識點:
- IP協議通過提供IP地址,將IP地址夾帶在通信數據包中,為路由器指明通信方向。
- IP協議僅僅指明數據包的源目通信方,但是並不能保證數據包一定能夠送達,數據是否被丟棄以及丟棄后如何處理。(所以IP協議是面向無連接的不可靠傳輸功能)(TCP協議可以解決P協議的缺陷)
當然,IP協議不僅僅只有”導航“功能,他還能防止數據包環路,為數據打上重要或不重要等標簽實現流量控制、能驗證數據包是否損壞、能實現數據包分片和組裝功能;而要深入學習這些功能,必須掌握IP頭部的封裝格式。
1.3 IP協議頭部
以下是對某一數據包的抓包結果:
我們可以看到IP頭部默認有12個字段:
- Version(版本號):標識IP協議的版本,目前V4版本地址已經枯竭,V6慢慢成為主流。
- Header Length(頭部長度):默認為20字節,最大為60字節。
- Differentiated Services Field (服務區分符):用於為不同的IP數據包定義不同的服務質量,一般應用在QoS技術中。
- Total Length (總長度):標識IP頭部加上上層數據的數據包大小,IP包總長度最大為65535個字節。
- Identification (標識符):用來實現IP分片的重組,標識分片屬於哪個進程,不同進程通過不同ID區分。
- Flags(標志符):用來確認是否還有IP分片或是否能執行分片。
- Fragment offset (分片偏移量):用於標識IP分片的位置,實現IP分片的重組。
- Time to live (生存時間):標識IP數據包還能生存多久,根據操作系統不同,TTL默認值不同,每經過一個三層設備如路由器的處理,則TTL減去1,當TTL=0時,則此數據包被丟棄。
- Protocol (協議號):標識IP協議上層應用。當上層協議為ICMP時,協議號為1,TCP協議號為6,UDP的協議號為17。
- Header checksum (頭部校驗):用於檢驗IP數據包是否完整或被修改,若校驗失敗則丟棄數據包。
- Source(源IP地址):標識發送者IP地址,占用32bit。
- Destination (目的IP地址):標識接收者IP地址,占用32bit。
了方便記憶,可以總結為7個核心知識點:
- Source和Destination即IP源目地址字段,是IP協議最核心的字段;
- Id+Flags+FO三個字段可以實現IP數據分片和重組;
- Total Length和Header Length標記IP頭部和上層數據的邊界;
- TTL生存時間字段可以實現通信防環;
- DSCP服務區分符可以實現流量控制;
- Checksum字段可以數據包完整性校驗;
- Protocol字段標記上層應用;
1.3.1 length長度字段解讀
划分界限
長度字段在大部分的協議里都會出現,例如TCP、UDP、IP協議,為了就是”划分界限“--->規定哪里是頭部,哪里是數據。
由上圖可知,IP協議的頭部是20字節(默認為20字節,最長可到60字節),Total Length在這里表明是100字節,那么數據部分則是100-20=80字節。
那么這個頭部和數據之間的界限有何用處?👇
當收到數據包之后,無論是電腦/手機還是其他聯網設備,網卡模塊會對數據包進行拆分、修改IP頭部信息、重新進行數據封裝等操作,如果沒有"這條線",那就可能會"越界",一旦"越界",則數據包內容可能損壞,
我們看下面這張圖片👇
當沒有長度字段或者長度字段標識錯誤時,網卡在進行頭部剝離的時候,錯誤的把數據部分划分到頭部里面,這就會導致右邊的數據部分完整性被破壞,接收方最終收到的就是一個損壞的數據包。
1.3.2 TTL生存時間字段解讀
實現通信防環
TTL(Time to live)即生存時間,用於標識IP數據包"還能存活多久",這個生存值在發送方發送數據時便設置好了。不同電腦/操作系統的初始TTL是不同的,並且TTL值可以修改。
TTL值占用8個bit位,所以最大值是255(二進制11111111)
上圖所示👆,IP數據包每經過一個路由器或者其他三層設備時,TTL就會被減去1,當TTL=0的時間,就代表這個數據包已經”死亡“,此時路由器便會向源發送者返回一個”TTL Exceed“的ICMP報錯包。
TTL一個重要的功能就是實現通信防環,那么何為防環❓請看下圖👇:
我們知道,路由器會將數據包以接力的形式逐條傳遞,很多時候,由於工程師的疏忽,或者因為網絡拓撲結構的復雜性,會出現一些Bug環境,例如上圖便是一個經典的”環路拓撲“,由於網絡設備之間存在的環路”Loop“,所以數據包一直里面饒起來,而不是發送到最右邊的服務器。
如果沒有TTL,那么這個數據包將會一直存在於鏈路中,這樣不僅占用網絡帶寬,並且浪費設備的處理器資源,嚴重的時候將會拖垮其他人的正常通信。
所以,當IP數據包加入TTL值之后,即便網絡拓撲存在環路設計,當數據包被轉發到TTL為0的時候,網絡設備也可以直接丟棄,以此解決環路帶來的危害。
但是TTL仍然是一種“被動式”的解決環路的辦法,真正要解決環路,還需要從網絡設計和協議設計的角度切入。
1.3.3 DSCP字段解讀
DSCP服務區分符可以實現流量控制
"VIP” 待遇
DSCP(Differentiated Services Field) 即服務區分符,用於為不同的IP數據包定義不同的服務質量。DSCP的前身叫做TOS(Type of Service,服務類型)。不管是TOS還是DSCP,它們都是QoS服務質量里面的技術實現。
如上圖所示👆,當PC1和PC2兩個用戶同時訪問互聯網時,由於數據包采用不同的DSCP值,不同的值代表了不同的優先級,例如這里的AF11和EF,可以看成一個是普通等級,一個是VIP等級,此時VIP等級自然要優先被轉發。
應用場景:在企業網中,網絡運維人員可以為核心數據流采用高優先級的DSCP值,為其他普通的例如BT下載流量采用最普通的優先級。在運營商網絡里,可以根據客戶購買的不同專線服務,采用不同的DSCP值。
1.3.4 Checksum字段解讀
實現數據完整性校驗
checksum校驗字段跟長度字段類似,存在於很多協議里面,用於實現數據完整性校驗。
不同協議采用的方法有差異,例如IP協議的checksum值只校驗IP頭部,不包括數據部分,而TCP和UDP的校驗則包括數據部分。
例如PC1發送IP數據包(含checksum1)給PC2,PC2拆開IP頭部,然后進行校驗計算(checksum2),若校驗沒問題則接收並處理,若檢驗有問題則丟棄。注意,這里采用的是校驗算法,不是簡單的相同對比。
1.1.3.5 Protocol字段解讀
協議號
ICMP、TCP、UDP所對應的Protocol協議號👇:
ICMP | TCP | UDP |
---|---|---|
1 | 6 | 17 |
無論是IP協議的Protocol字段,還是Internet以太網協議里面的Type字段,又或者是TCP/UDP協議里面的Port字段,這些字段的功能都是用於標識上層協議或應用。例如,ICMP協議號為1,TCP協議號為6,UDP的協議號為17。
那么,在IP協議里面加入協議號標識傳輸層協議,意義何在❓
通過上面這張圖我們可以看到,若PC1 PING PC2,則此時會采用ICMP協議,而ICMP協議對應的協議號是1。當PC2收到這個數據包時,拆開IP頭部,則會看到協議號,根據協議號調用對應的上層協議或應用來進行上層數據處理。
以這里例子來看,若PC2采用TCP或UDP來解開ICMP數據包,則無法正常解析,好比用word程序要打開一部mp4電影,肯定會有故障。而如果這里PC2根據協議號為1,調用ICMP協議來處理ICMP數據包,則可以正常解讀並返回回應包。
所以,協議號(Protocol)、端口號(Port)、類型值(Type)這些的功能都是:標記上層協議/應用,告訴接收方,有正確的協議/應用來打開這個數據,功能相當於電腦文件的后綴名,告訴電腦用哪些應用程序來打開對應的文件。
參考資料:
- 《TCP/IP》圖解
- https://blog.51cto.com/chenxinjie/1970704
————————————————————————————————————————————
版權聲明:本文為吳愷的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://www.cnblogs.com/zaijianba/p/11524722.html
為了更好的閱讀體驗,推薦至我的個人博客👇
個人博客文章地址為:https://www.wukailiving.cn/ip-xie-yi-xiang-jie.html
如有不足之處,歡迎指正!