圖解IP協議(一) IP協議原理與實踐

1、IP協議概述html


wKioL1nZrrjyBqafAAIYP5K2ru0998.png


相比以前講的ARP協議,IP協議不管對於普通用戶仍是對於工程師而言,你們都要熟悉得多。例如,咱們在不少電影和電視劇裏面,總能看到如下這些場面:算法

 

場面1:瀏覽器

警方要抓一個全球通緝犯的時候,全部人圍繞在做戰室神情緊張的凝視着牆面上巨大的屏幕,技術偵查組的警員快速的敲打着鍵盤,隨時準備大幹一場。這個時候警員忽然起來手一指:IP追蹤到了,就在xxx區yyy街zzz號。警長:兄弟們,抓活的!安全

 

場面2:服務器

電影主角被黑道老大脅迫幹壞事,黑道老大爲了無死角監控到電影主角的執行狀況,讓手下的***攻破街道的監視器,控制別人的電動汽車,而後經過遠程屏幕觀察主角。微信

 





wKiom1nZr1Oy18BIABrU-avHAsQ534.png

wKiom1nZsC-yzeNoAAN1FnA6IpM057.png

wKiom1nZr2LTzg5tABMSMuPpICE874.png


wKioL1nZrzPAMb07AAic4Ttb81Q763.png

wKiom1nZr4ihzOsgAAglepUP2gQ130.png

(以上圖片來源相關影視劇)網絡


這些場景大量出現各類美劇、韓劇、國產劇裏面,例如《神盾局》《天蠍》《速度與激情》《幽靈》等等。固然,畢竟做爲一個科幻/犯罪片,不加入這些場面,確實很差意思說本身是一部高科技的警匪/反恐/犯罪類型片。運維

 

可是,做爲一名網絡/安全工程師,當影片中提到IP地址,總會比普通用戶要更加的敏感,例如常常不當心發現若干啼笑皆非的bug,舉例:ide


bug1:阿sir,IP地址追蹤到了,是192.168.1.200oop

bug2:長官,IP地址追蹤到了,是202.256.138.111 

bug3:老大,IP地址追蹤到了,是100.168.8.10.5 

(注:童鞋們,學完整個IP章節內容以後,記得回來找bug)

 

不管如何,通過這些影視劇和各路媒體的薰陶,最普通的民衆也知道如下這些常識=>

IP就是一張×××,存在於電腦、手機、監控攝像頭、汽車等任何須要聯網的設備上面;

IP是能夠被追蹤到和定位的,不管是網上發帖造謠生事或經過***技術***別人,所作的事情都會基於IP和其餘ID信息被服務器記錄下來,而後"阿sir"就能夠追蹤並抓到你

 

固然,做爲工程師,咱們不只僅要懂常識,更須要掌握這些專業的內容=>

IP協議的原理是什麼?

IP協議和IP地址究竟是什麼關係?

IP協議在有什麼字段?




2、IP協議原理

IP協議(Internet Protocol,互聯網協議),是TCP/IP協議棧中最核心的協議之一,經過IP地址,保證了聯網設備的惟一性,實現了網絡通訊的面向無鏈接和不可靠的傳輸功能。


wKiom1nZsErS9xiuAAG9cpAL5To261.png


如上圖所示,當多臺接入互聯網的電腦訪問同一臺服務器時,服務器如何區分不一樣電腦的請求,並準確的將資源返回?


衆所周知,只要給每一個設備加上"×××",而且在通訊的時候,將"×××"嵌入到數據包裏面,則整個往返過程能夠準確無誤

 


wKioL1nZsBLT5HEjAAIkrqoOauM796.png

wKiom1nZsGOzLZeHAAI3ar0uM34190.png


以PC1訪問服務器爲例,PC1的地址是12.1.8.66,Server的地址是8.8.4.4,整個通訊過程是這樣的:


①PC1在請求數據包裏面封裝源目IP地址,並將帶有IP地址的數據包發送到互聯網;


②互聯網有大量的網絡通訊設備(例如路由器),路由器根據數據包的IP地址查找路由表(地圖),而後以接力棒的方式逐跳轉發直到目標服務器;


③服務器收到請求數據後,將源目IP地址翻轉,並封裝回應數據包發送到互聯網。


上述這個IP通訊過程,跟咱們平常快遞收寄件的流程是幾乎相似的:


①寄快遞的時候,須要先寫快遞單,快遞單要求寫入寄件方和收件方的姓名和聯繫信息(電話號碼、地址),寫完以後,再將快遞單貼在包裹上面


②物流公司(或快遞員)根據包裹的寄件地址,經過物流平臺(飛機、長途貨車、卡車)將包裹在省市中傳輸,直到收件方的城市。


③收快遞的時候,快遞員根據包裹收件地址,找到對應的街道或小區,而後經過電話聯繫並交付到咱們手裏。

 

在這裏,快遞單至關於IP地址、快遞包裹至關於數據包,物流公司/快遞員至關於路由器/交換機

 

小結:通過上面這個案例,咱們須要更明確這些知識點:


①IP協議提供了IP地址,並將源目IP地址夾帶在通訊數據包裏面,爲路由器指明通訊方向;


②IP協議只能指明數據包的源目通訊方即"這是誰的送給誰的",但不能保證數據包必定能到達對方,數據是否會被丟棄以及丟棄以後如何處理。因此,上面纔有這句:"IP協議提供面向無鏈接不可靠傳輸功能"。那麼,若是出現丟包且須要重傳時,誰來解決呢?這就須要TCP/IP協議棧另一個"半壁江山"來實現,你們確定猜到了:TCP協議能解決以上這些IP協議不能實現的功能。

 

固然,IP協議不只僅只有"快遞單"功能,它還能防止數據包環路、爲數據打上重要或不重要等標籤實現流量控制、能驗證數據包是否損壞、能實現數據包分片和組裝功能;而要深刻學習這些功能,必須掌握IP頭部的封裝格式。




3、IP協議頭部

上面提到的"快遞單"即IP頭部到底長得怎麼樣,咱們能夠經過抓包的方式來更加直觀的認識,這裏以個人電腦 Ping 谷歌DNS服務器爲例子(個人電腦地址爲192.168.199.152,谷歌服務器地址爲8.8.8.8。)=>


wKiom1nZsHqg4PANAAI6Q1hXGFY081.png


開啓Wireshark軟件,採用過濾器:host 192.168.199.152 && host 8.8.8.8,這個過濾器的做用是隻抓取199.152和8.8的數據包,其餘數據包不抓取。

wKiom1nZsIqhwq_QAAILkD72jvE196.png


②打開命令終端,執行下面指令:

jayking:~ jaykingchen$ ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8): 56 data bytes

64 bytes from 8.8.8.8: icmp_seq=0 ttl=44 time=24.525 ms

64 bytes from 8.8.8.8: icmp_seq=1 ttl=44 time=26.729 ms

64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=24.414 ms

64 bytes from 8.8.8.8: icmp_seq=3 ttl=44 time=26.530 ms

64 bytes from 8.8.8.8: icmp_seq=4 ttl=44 time=130.592 ms

^C

--- 8.8.8.8 ping statistics ---

5 packets transmitted, 5 packets received, 0.0% packet loss

round-trip min/avg/max/stddev = 24.414/46.558/130.592/42.028 ms


③觀察Wireshark抓取到的數據包,下面是完整的通訊過程:

wKioL1nZsE3QgGZDAAmDvZhYWds633.png


【IP協議字段解讀】

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。


咱們能夠看到IP頭部默認有12個字段(後續會提到特殊字段),爲了方便記憶,能夠總結爲7個核心知識點:


a.Source和Destination即IP源目地址字段,是IP協議最核心的字段;

b.Id+Flags+FO三個字段能夠實現IP數據分片和重組;

c.Total Length和Header Length標記IP頭部和上層數據的邊界;

d.TTL生存時間字段能夠實現通訊防環;

e.DSCP服務區分符能夠實現流量控制;

f.Checksum字段能夠數據包完整性校驗;

g.Protocol字段標記上層應用;


源目IP地址原理上面已經講過,下面咱們來對其餘字段進行解讀=>


【length長度字段解讀】

wKiom1nZsLCRx9oqAAD2YO4E8ec578.png


長度字段在大部分協議裏面都會出現,例如IP、TCP、UDP協議,功能都是爲了"劃分界限":哪裏是頭部,哪裏是數據。


如上圖所示,經過Header Length咱們知道IP協議的頭部是20字節(默認是20字節,最長能夠是60個字節),Total Length這裏標明是100個字節,因此剩下的數據部分則是80字節。

 

劃清了頭部和數據的界限以後,又有什麼用呢?


當收到數據包以後,不管是電腦/手機仍是其餘聯網設備,網卡模塊會對數據包進行拆分、修改IP頭部信息、從新進行數據封裝等操做,若是沒有"這條線",那就可能會"越界",一旦"越界",則數據包內容可能損壞=>


wKioL1nZsG3is3pgAAE1EAkdPQA634.png


當沒有長度字段或長度字段標識錯誤時,網卡在進行拆分的時候,錯誤的把數據部分劃分到頭部裏面,這樣的話,右邊的數據部分就不完整,接收方最終收到的就是一個損壞的數據包。


比如你們用瀏覽器下載一個word文檔,若是這個文檔原本有80字節大小,如今word只能打開後面的60字節,那確定是沒法打開的。



【TTL生存時間字段解讀】


wKiom1nZsMyTGkRiAAG13RTrWzI818.png

wKioL1nZsH7CavC3AAHvKWMdb7U087.png


TTL(Time to live)即生存時間,用於標識IP數據包"還能存活多久",這個生存值在發送方發送數據時便設置好了。不一樣電腦/操做系統的初始TTL是不一樣的,例如上圖,即是個人Mac電腦發出的,默認值是64,其餘一些系統是128或255。因爲TTL值佔用8個bit位,因此最大值是255(二進制11111111)。


IP數據包每通過一個路由器或三層設備,TTL便會被減去1,而當TTL=0的時候,則表明此數據包"死亡",此時路由器便會向源發送者返回一個"TTL Exceed"的ICMP報錯包


上圖中,若是個人電腦到目標服務器超過了64跳,則這個數據包會中途被丟棄,沒法到達目標地。

 

TTL值除了標識IP數據包的生存值以外,另一個特別重要的功能即是"防止數據包環路",簡稱爲"防環"。不少時候,因爲工程師的疏忽,或者網絡拓撲結構的複雜性,會出現一些有bug的網絡環境,例如=>


wKioL1nZsJKhgRwhAAHZ9Bp1RrQ223.png


上面即是一個經典的"環路拓撲",當電腦將數據包發送到互聯網時,因爲網絡設備之間存在環路(Loop),因此數據包一直在裏面繞起來,而不是發送到最右邊的服務器。


若是沒有TTL,則這個數據包會一直存在於鏈路中,這樣不只佔用網絡帶寬,而且浪費設備的處理器資源。如有大量的數據包存在網絡中,則會拖垮其餘人的正常通訊。

 

而當IP數據包加入了TTL值以後,即使網絡拓撲存在環路設計,當數據包被轉發到TTL爲0的時候,網絡設備也能夠直接丟棄,以此解決環路帶來的危害

 

(註明:TTL仍然是一種"被動式"解決環路的作法,真正要解決環路,還須要從網絡設計和協議設計的角度切入)



【DSCP字段解讀】

雖然咱們常常聽到"互聯網上人人平等",但從互聯網設計之初,就已經不是平等的,能夠從IP頭部這裏的DSCP字段就能夠看出來。

 

DSCP(Differentiated Services Field) 即服務區分符,用於爲不一樣的IP數據包定義不一樣的服務質量。DSCP的前身叫作TOS(Type of Service,服務類型)。無論是TOS仍是DSCP,它們都是QoS服務質量裏面的技術實現。

 

因爲QoS這個技術的複雜性,這裏咱們只簡單瞭解下DSCP這個字段大概的功能。


wKiom1nZsPGzXnOyAAHy_Rk9Mu4767.png


如上圖所示,當PC1和PC2兩個用戶同時訪問互聯網時,因爲數據包採用不一樣的DSCP值,不一樣的值表明了不一樣的優先級,例如這裏的AF11和EF,能夠當作一個是普通等級,一個是VIP等級,此時VIP等級天然要優先被轉發。

 

應用場景:在企業網中,網絡運維人員能夠爲核心數據流採用高優先級的DSCP值,爲其餘普通的例如BT下載流量採用最普通的優先級。在運營商網絡裏,能夠根據客戶購買的不一樣專線服務,採用不一樣的DSCP值



【Checksum字段解讀】

wKioL1nZsLLgxfmzAAG54OHheHw296.png


checksum校驗字段跟長度字段相似,存在於不少協議裏面,用於實現數據完整性校驗。


不一樣協議採用的方法有差別,例如IP協議的checksum值只校驗IP頭部,不包括數據部分,而TCP和UDP的校驗則包括數據部分。


上圖中,PC1發送IP數據包(含checksum1)給PC2,PC2拆開IP頭部,而後進行校驗計算(checksum2),若校驗沒問題則接收並處理,若檢驗有問題則丟棄。注意,這裏採用的是校驗算法,不是簡單的相同對比。



【Protocol字段解讀】

wKiom1nZsRKROOfuAAD0nj9jfhM752.png


不管是IT協議的Protocol字段,仍是Ethernet以太網協議裏面的Type字段,又或者是TCP/UDP協議裏面的Port字段,這些字段的功能都是用於標識上層協議或應用。例如,ICMP協議號爲1,TCP協議號爲6,UDP的協議號爲17


對於不少初學者來而,雖然知道了哪些協議號對應哪些上層應用,畢竟只要背熟了就好,可是咱們還須要更深刻的思考?例如,在IP協議裏面加入協議號標識傳輸層協議,意義何在?

wKiom1nZsSLQmJAiAAGEYj6rk0o874.png


經過上面這張圖咱們能夠看到,若PC1 PING PC2,則此時會採用ICMP協議,而ICMP協議對應的協議號是1。當PC2收到這個數據包時,拆開IP頭部,則會看到協議號,根據協議號調用對應的上層協議或應用來進行上層數據處理。


以這裏例子來看,若PC2採用TCP或UDP來解開ICMP數據包,則沒法正常解析,比如用word程序要打開一部mp4電影,確定會有故障。而若是這裏PC2根據協議號爲1,調用ICMP協議來處理ICMP數據包,則能夠正常解讀並返回迴應包。

 

因此,協議號(Protocol)、端口號(Port)、類型值(Type)這些的功能都是:標記上層協議/應用,告訴接收方,有正確的協議/應用來打開這個數據,功能至關於電腦文件的後綴名,告訴電腦用哪些應用程序來打開對應的文件。


小結:經過Wireshark咱們抓取了IP協議頭部字段,並對頭部裏面大部分的字段進行了解讀,包括IP源目地址、長度字段、TTL值、DSCP值、協議號等,IP分片相關字段咱們在後續章節再討論。




4、IP協議總結

①IP地址是一張接入互聯網的×××,存在於電腦、手機、攝像頭、汽車等任何須要聯網的設備;

②互聯網通訊裏數據包會被嵌入IP源目地址,相似快遞收發過程當中的"快遞單",經過IP地址的惟一性,保證了正常的通訊。

③IP協議不只只有IP地址這個尋址功能,它還能防止數據包環路、實現流量控制、能驗證數據包完整性、能實現數據包分片和組裝。

④本章節中,咱們經過Wireshark抓取真實網絡數據包(個人電腦訪問谷歌DNS服務器),而且拆分IP頭部字段來進行解構。



預告:

IP地址的分類與格式

歷史難題探討:爲何有了mac地址,還須要IP地址?



【相關博文】

圖解ARP協議(三)ARP防護篇-如何揪出「內鬼」並「優雅的還

[冇眼睇]揭祕地下'se'情'誘'導網站,上車吧!

網絡安全求職指南



【課程推薦】

《初級網絡安全工程師》

《Web安全***工程師》

《高級Web安全工程師》

《CCNA/CCNP/CCIE魔鬼訓練營從入門到精通》



【瞭解更多】

新浪微博:@拼客學院陳鑫傑

微信公衆號:拼客院長陳鑫傑(搜索"pingsec"即刻關注,大牛都在看)

相關文章
相關標籤/搜索