圖解IP協議(一) IP協議原理與實踐
一、IP協議概述
相比之前講的ARP協議,IP協議無論對於普通用戶還是對於工程師而言,大家都要熟悉得多。例如,我們在很多電影和電視劇裡面,總能看到以下這些場面:
場面1:
警方要抓一個全球通緝犯的時候,所有人圍繞在作戰室神情緊張的凝視著牆面上巨大的屏幕,技術偵查組的警員快速的敲打著鍵盤,隨時準備大幹一場。這個時候警員突然起來手一指:IP追蹤到了,就在xxx區yyy街zzz號。警長:兄弟們,抓活的!
場面2:
電影主角被黑道老大脅迫幹壞事,黑道老大為了無死角監控到電影主角的執行情況,讓手下的黑客攻破街道的監視器,控制別人的電動汽車,然後通過遠程屏幕觀察主角。
(以上圖片來源相關影視劇)
這些場景大量出現各種美劇、韓劇、國產劇裡面,例如《神盾局》《天蠍》《速度與激情》《幽靈》等等。當然,畢竟作為一個科幻/犯罪片,不加入這些場面,確實不好意思說自己是一部高科技的警匪/反恐/犯罪類型片。
但是,作為一名網路/安全工程師,當影片中提到IP地址,總會比普通用戶要更加的敏感,例如經常不小心發現若干哭笑不得的bug,舉例:
bug1:阿sir,IP地址追蹤到了,是192.168.1.200
bug2:長官,IP地址追蹤到了,是202.256.138.111
bug3:老大,IP地址追蹤到了,是100.168.8.10.5
(註:童鞋們,學完整個IP章節內容之後,記得回來找bug)
無論如何,經過這些影視劇和各路媒體的熏陶,最普通的民眾也知道以下這些常識=>
①IP就是一張身份證,存在於電腦、手機、監控攝像頭、汽車等任何需要聯網的設備上面;
②IP是可以被追蹤到和定位的,無論是網上發帖造謠生事或通過黑客技術攻擊別人,所做的事情都會基於IP和其他ID信息被伺服器記錄下來,然後"阿sir"就可以追蹤並抓到你。
當然,作為工程師,我們不僅僅要懂常識,更需要掌握這些專業的內容=>
IP協議的原理是什麼?
IP協議和IP地址到底是什麼關係?
IP協議在有什麼欄位?
二、IP協議原理
IP協議(Internet Protocol,互聯網協議),是TCP/IP協議棧中最核心的協議之一,通過IP地址,保證了聯網設備的唯一性,實現了網路通信的面向無連接和不可靠的傳輸功能。
如上圖所示,當多台接入互聯網的電腦訪問同一台伺服器時,伺服器如何區分不同電腦的請求,並準確的將資源返回?
眾所周知,只要給每個設備加上"身份證",並且在通信的時候,將"身份證"嵌入到數據包裡面,則整個往返過程可以準確無誤。
以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頭部的封裝格式。
三、IP協議頭部
上面提到的"快遞單"即IP頭部到底長得怎麼樣,我們可以通過抓包的方式來更加直觀的認識,這裡以我的電腦 Ping 谷歌DNS伺服器為例子(我的電腦地址為192.168.199.152,谷歌伺服器地址為8.8.8.8。)=>
①開啟Wireshark軟體,採用過濾器:host 192.168.199.152 && host 8.8.8.8,這個過濾器的作用是只抓取199.152和8.8的數據包,其他數據包不抓取。
②打開命令終端,執行下面指令:
jayking:~ jaykingchen$ ping 8.8.8.8nPING 8.8.8.8 (8.8.8.8): 56 data bytesn64 bytes from 8.8.8.8: icmp_seq=0 ttl=44 time=24.525 msn64 bytes from 8.8.8.8: icmp_seq=1 ttl=44 time=26.729 msn64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=24.414 msn64 bytes from 8.8.8.8: icmp_seq=3 ttl=44 time=26.530 msn64 bytes from 8.8.8.8: icmp_seq=4 ttl=44 time=130.592 msn^Cn--- 8.8.8.8 ping statistics ---n5 packets transmitted, 5 packets received, 0.0% packet lossnround-trip min/avg/max/stddev = 24.414/46.558/130.592/42.028 msn
③觀察Wireshark抓取到的數據包,下面是完整的通信過程:
【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長度欄位解讀】
長度欄位在大部分協議裡面都會出現,例如IP、TCP、UDP協議,功能都是為了"劃分界限":哪裡是頭部,哪裡是數據。
如上圖所示,通過Header Length我們知道IP協議的頭部是20位元組(默認是20位元組,最長可以是60個位元組),Total Length這裡標明是100個位元組,所以剩下的數據部分則是80位元組。
劃清了頭部和數據的界限之後,又有什麼用呢?
當收到數據包之後,無論是電腦/手機還是其他聯網設備,網卡模塊會對數據包進行拆分、修改IP頭部信息、重新進行數據封裝等操作,如果沒有"這條線",那就可能會"越界",一旦"越界",則數據包內容可能損壞=>
當沒有長度欄位或長度欄位標識錯誤時,網卡在進行拆分的時候,錯誤的把數據部分劃分到頭部裡面,這樣的話,右邊的數據部分就不完整,接收方最終收到的就是一個損壞的數據包。
好比大家用瀏覽器下載一個word文檔,如果這個文檔本來有80位元組大小,現在word只能打開後面的60位元組,那肯定是無法打開的。
【TTL生存時間欄位解讀】
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的網路環境,例如=>
上面便是一個經典的"環路拓撲",當電腦將數據包發送到互聯網時,由於網路設備之間存在環路(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這個欄位大概的功能。
如上圖所示,當PC1和PC2兩個用戶同時訪問互聯網時,由於數據包採用不同的DSCP值,不同的值代表了不同的優先順序,例如這裡的AF11和EF,可以看成一個是普通等級,一個是VIP等級,此時VIP等級自然要優先被轉發。
應用場景:在企業網中,網路運維人員可以為核心數據流採用高優先順序的DSCP值,為其他普通的例如BT下載流量採用最普通的優先順序。在運營商網路里,可以根據客戶購買的不同專線服務,採用不同的DSCP值。
【Checksum欄位解讀】
checksum校驗欄位跟長度欄位類似,存在於很多協議裡面,用於實現數據完整性校驗。
不同協議採用的方法有差異,例如IP協議的checksum值只校驗IP頭部,不包括數據部分,而TCP和UDP的校驗則包括數據部分。
上圖中,PC1發送IP數據包(含checksum1)給PC2,PC2拆開IP頭部,然後進行校驗計算(checksum2),若校驗沒問題則接收並處理,若檢驗有問題則丟棄。注意,這裡採用的是校驗演算法,不是簡單的相同對比。
【Protocol欄位解讀】
無論是IT協議的Protocol欄位,還是Ethernet乙太網協議裡面的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)這些的功能都是:標記上層協議/應用,告訴接收方,有正確的協議/應用來打開這個數據,功能相當於電腦文件的後綴名,告訴電腦用哪些應用程序來打開對應的文件。
小結:通過Wireshark我們抓取了IP協議頭部欄位,並對頭部裡面大部分的欄位進行了解讀,包括IP源目地址、長度欄位、TTL值、DSCP值、協議號等,IP分片相關欄位我們在後續章節再討論。
四、IP協議總結
①IP地址是一張接入互聯網的身份證,存在於電腦、手機、攝像頭、汽車等任何需要聯網的設備;
②互聯網通信里數據包會被嵌入IP源目地址,類似快遞收發過程中的"快遞單",通過IP地址的唯一性,保證了正常的通信。
③IP協議不僅只有IP地址這個定址功能,它還能防止數據包環路、實現流量控制、能驗證數據包完整性、能實現數據包分片和組裝。
④本章節中,我們通過Wireshark抓取真實網路數據包(我的電腦訪問谷歌DNS伺服器),並且拆分IP頭部欄位來進行解構。
預告:
IP地址的分類與格式
歷史難題探討:為什麼有了mac地址,還需要IP地址?
[冇眼睇]揭秘地下色情誘導網站,上車吧!
網路安全求職指南(入坑指南)
圖解ARP協議(三)ARP防禦篇-如何揪出"內鬼"並"優雅的還手"?
知乎專欄:跟傑哥學網路與安全
新浪微博:@拼客學院陳鑫傑
微信公眾號:拼客院長陳鑫傑(搜索"pingsec"即可關注,大牛都在看)
拼客學院:http://www.pinginglab.net(專註網路|安全|運維的IT學院)
推薦閱讀:
※i春秋收費為何那麼高?
※谷歌為Play Store內所有APP買單,發現漏洞就送1000美元
※用Python玩玩反彙編
※疑似俄羅斯APT黑客組織「蜻蜓」入侵美國電網
※工控系統血色事件:6000多台Lantronix設備的密碼已經泄露