TCP/IP之IP協議簡略介紹

        本篇文章主要針對入門新手,儘量能用簡略的語言複述,避免用過於官方話術,因爲對於萌新來說,那些太官方的話語不容易看懂,所有本人盡力用口語化敘述,只要理解了其中的內涵意思,再看官方話術就比較容易的多。主要講述IP協議的主要功能。本文章僅僅是IPv4的內容,IPv6有不同之處。

       IP協議是TCP/IP協議族中的核心協議,所有TCP、UDP、ICMP等數據都通過IP數據報傳輸。IP是一種不可靠、無連接的協議。   

       不可靠的含義是不保證IP數據報一定能成功達到目的地,例如:一臺路由器的緩衝區滿了,IP只能丟棄後面到達的數據。任何可靠的協議都是由上層(如TCP)提供。    

        無連接就是不建立客戶端和服務端的鏈接狀態信息,不像打電話一樣,需要雙方接聽纔可以。因爲是無連接,所以這意味着IP數據報可能不按順序交付,例如:發送端先發A數據報,後發B數據報,由於數據報不一定走了相同的路線,有可能A繞了遠路阻礙重重,而B幾乎暢通無阻,這就會導致B先到達接收端,A後到。這也是無連接的一個弊端。

1、咱先來看看IP的頭部:

(1)、version(版本):有兩個版本一個是IPv4,一個是IPv6,現在主流的還是IPv4,IPv6的出現最主要的原因是怕IPv4地址供給會不足。

(2)、head length(首部長度):表明IP首部的大小,這個是沒有可選項,也就是必須是5,首部長度一定是20字節。

(3)、TOS(服務類型):最小時延、最大吞吐量、最高可靠性和最小費用等功能。

(4)、total length(總長度):表示首部與數據部分結合起來的總字節數。因爲該字段長位16位,所以IP數據包的最大長度爲     2的16次方 = 65535(字節)。

(5)、identification (ID、標識):用於分片重組,爲了避免將一個數據報分片和其他數據報分片混淆。通常,每發送一個IP數據包,它的值也逐漸遞增。注意:即使ID相同,目的地址、源地址或協議不同的話,也會被認爲是不同分片。

(6)、flags(標誌):表示包被分片的信息。例如:可以表示該分片是否爲最後一個分片。

(7)、offset(片偏移):用來標識被分片的每一個分段相對於原始數據的位置。

(8)、TTL(生存時間):相當於生命週期,每經過一個路由器或其他設備,TTL將減一,減爲零則丟棄該包,最大值爲255。

(9)、protocol(協議):表示IP首部的下一個首部隸屬於哪個協議,包含了一個數字,就是說IP協議載荷的協議是什麼。最常見的值爲17(UDP)和6(TCP)。

(10)、header checksum(首部校驗和):起校驗作用,它能檢驗發送的數據包和接收的數據包是否一致。

2、IP分片:

(1)、如果數據報的大小超過下一跳(路由的下一個點)MTU(最大傳輸單元),任何主機或路由器可將該數據報分片,不僅是中間設備會分片,源端主機也會進行分片(如TCP)。

(2)、在分片時,除了最後一片分片,其他分片中的數據部分(除IP首部外的其餘部分)必須是8字節的整數倍。只有第一片有傳輸層頭部,其餘分片都沒有。

(3)、重新組裝是由目的端的IP層來完成的,其目的是使分片和重新組裝過程對傳輸層是透明的(傳輸層是不知道有這回事的)。已經分片過的數據報有可能會再次進行分片。

注意:儘量避免出現分片,因爲即使丟失了一片分片也要重傳整個數據報,不僅耗時間,還耗性能。如果數據報分片的是中間路由器,而不是起始端系統,那麼起始端系統就無法知道數據報是如何被分片的。就這個原因,儘量避免分片。

       

(4)、如下圖flags分爲三部分,CU位當前沒使用。DF位(Don't fragment)表示不分片,設置爲1時,如果IP數據報的大小大於中間設備的MTU值,那麼該設備不將其IP數據報分片,而是丟棄IP數據報,併發送一個ICMP差錯報文。MF位(More fragments)更多的分片,含義是除了最後一個分片外,其餘的分片都必須置爲1,這樣可以告訴接收端是否後面還有分片。

(5)、分片除了最後一片,其餘的分片減去IP頭部字節,其他數據必須是8的倍數,最小值不得小於46字節,最大值不得大於1500字節,如果不足46字節必須補足46字節。如下圖是一個分片過程。

3、IP轉發:

(1)、如果目的地是直接相連的主機(如點到點鏈接)或共享網絡(如以太網),IP數據報直接發送到目的地,不需要路由器等設備。否則,主機將數據報發送到一臺路由器(稱爲默認路由器),由該路由器將數據報交付到目的地。

(2)、IP層包括一些位於內存的信息,通常稱爲路由表或轉發表,每次轉發一個數據報時需要從中查找信息。當一個網絡接口接收到一個數據報時,IP模塊首先檢查目的地址是否爲自己的IP地址(或與自己的某個網絡接口相關的IP地址),或是它可以接收其流量的一些其他地址,例如IP廣播或組播地址。如果是的話便可以直接交付,否則(1)如果配置是一臺路由器,則轉發該數據報;(2)數據報被默默地丟棄。

(3)、轉發表:

目的地:是一個32位字段,可以設置爲零,也可以設置爲IP地址,用於與一個掩碼操作結果相匹配。

掩碼:是一個32位字段,用作數據報目的IP地址按位與操作的掩碼,其中的目的IP地址是要則轉發表中查找的地址。

下一跳:它是下一個IP實體(路由器或主機)的32位字段,數據報將被轉發到該地址。

接口:接口包含一個由IP層使用的標識符,以確定將數據報發送到下一跳的網絡接口。

當一臺主機或路由器中的IP層需要向下一跳的路由器或者主機發送一個數據報時,需要先檢查數據報中的目的IP地址。如果轉發表中沒有相對應的,則這個數據報無法交付,丟棄該數據報,並向生成該數據報的應用程序返回一個ICMP'主機不可達'錯誤包。否則便轉發給接近目的地的路由器。

4、與IP相關的攻擊:

前些年已經有針對IP協議的攻擊,主要是基於選項操作,或利用專用代碼中的錯誤(例如分片重組)。

1、由於一個或多個IP頭部字段無效(例如錯誤的頭部長度或版本號),這樣的攻擊可以使一臺路由器崩潰或性能下降。

2、如果沒有身份認證或者加密,IP欺騙是有可能發生的。比如對源IP地址的僞造。在某些情況下,遠程攻擊者的計算機可能看起來像本地網絡中的一臺主機在請求服務。

由於計算機和路由器的不斷升級,幾乎很多類似的攻擊已經沒效果了,僅供參考、瞭解。

總結:本章主要介紹了IP協議、IP分片和IP轉發。IP協議的頭部信息,相對於其他協議,IP協議頭部信息算是比較多,其功能也是複雜多樣。IP分片主要是針對過大的數據,經過中間設備或在發送端將其切割成一小塊數據報。IP轉發介紹的是數據報在路由器或主機轉發到下一跳實體(路由器或主機),中間需要覈對轉發表。              IP協議內容雖然不是很多,但卻是十分重要,也是核心協議,需要多多研讀。

如果有什麼講解得不好的地方,或者想問的問題都可以在下方評論區評論喲!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章