TCP/IP數據包結構具體解釋

 [關鍵詞] TCP IP 數據包 結構 具體解釋 網絡 協議編程

通常來講,網絡編程咱們僅僅需要調用一些封裝好的函數或者組件就能完畢大部分的工做,但是一些特殊的狀況下,就需要深刻的理解緩存

網絡數據包的結構,以及協議分析。如:網絡監控,故障排查等……安全

 

IP包是不安全的,但是它是互聯網的基礎,在各方面都有普遍的應用。由IP協議衍生的協議族有10數種(據我所知),之後還會出現網絡

不少其它的基於IP的協議…函數

 

先從實際出發吧!大數據

通常咱們在談上網速度的時候,專業上用帶寬來描寫敘述,事實上無論說網速或者帶寬都是不許確的,呵呵。比方:1兆,512K……spa

有些在學校的學生,或許會有疑問,明明個人業務是1M,爲何下載速度到100K就飆不上去了?512K的爲何50多K就封頂了?…指針

 

這裏所說的1M是指1Mbps = 1 Million Bits Per Second,也就是1M比特每秒,即一秒鐘傳輸1048576個二進制位。咱們知道一個字節路由

是8個二進制位。同步

好,又來問題了。即使這樣子,1M=1048756÷8=131072÷1024=128K。那也應該有128K啊,爲何下載速度仍是很是少到120K,

110K都謝天謝地了。看完本文,你的賬就對了……

 

IP數據包結構

如圖,一個刻度表示1個二進制位(比特)。

1-1.版本號4位,表示版本號號,眼下最普遍的是4=B1000,即常說的IPv4;相信IPv6之後會普遍應用,它能給世界上每個鈕釦都分配

       一個IP地址。

1-2.頭長4位,數據包頭部長度。它表示數據包頭部包含多少個32位長整型,也就是多少個4字節的數據。無選項則爲5(紅色部分)。

1-3.服務類型,包含8個二進制位,每個位的意義例如如下:

       過程字段:3位,設置了數據包的重要性,取值越大數據越重要,取值範圍爲:0(正常)~ 7(網絡控制)

       延遲字段:1位,取值:0(正常)、1(期特低的延遲)

       流量字段:1位,取值:0(正常)、1(期特高的流量)

       可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)

       成本字段:1位,取值:0(正常)、1(期特最小成本)

       保留字段:1位 ,未使用

1-4.包裹總長16位,當前數據包的總長度,單位是字節。固然最大僅僅能是65535,及64KB。

2-1.重組標識16位,發送主機賦予的標識,以便接收方進行分片重組。

2-2.標誌3位,他們各自的意義例如如下:

       保留段位(2):1位,未使用

       不分段位(1):1位,取值:0(贊成數據報分段)、1(數據報不能分段)

       不少其它段位(0):1位,取值:0(數據包後面沒有包,該包爲最後的包)、1(數據包後面有不少其它的包)

2-3.段偏移量13位,與不少其它段位組合,幫助接收方組合分段的報文,以字節爲單位。

3-1.生存時間8位,經常ping命令看到的TTL(Time To Live)就是這個,每通過一個路由器,該值就減一,到零丟棄。

3-2.協議代碼8位,代表使用該包裹的上層協議,如TCP=6,ICMP=1,UDP=17等。

3-3.頭檢驗和16位,是IPv4數據包頭部的校驗和。

4-1.源始地址,32位4字節,咱們常看到的IP是將每個字節用點(.)分開,如此而已。

5-1.目的地址,32位,同上。

6-1.可選選項,主要是給一些特殊的狀況使用,每每安全路由會看成攻擊而過濾掉,普聯(TP_LINK)的TL-ER5110路由就能這麼作。

7-1.用戶數據。

TCP數據包結構

1-1.源始port16位,範圍固然是0-65535啦。

1-2.目的port,同上。

2-1.數據序號32位,TCP爲發送的每個字節都編一個號碼,這裏存儲當前數據包數據第一個字節的序號。

3-1.確認序號32位,爲了安全,TCP告訴接受者但願他下次接到數據包的第一個字節的序號。

4-1.偏移4位,相似IP,代表數據包頭有多少個32位。

4-2.保留6位,未使用,應置零。

4-3.緊急比特URG—當URG=1時,代表緊急指針字段有效。它告訴系統此報文段中有緊急數據,應儘快傳送(至關於高優先級的數據)。

4-3.確認比特ACK—僅僅有當ACK=1時確認號字段纔有效。當ACK=0時,確認號無效。參考TCP三次握手

4-4.復位比特RST(Reset) —當RST=1時,代表TCP鏈接中出現嚴重差錯(如由於主機崩潰或其它緣由),必須釋放鏈接,而後再又一次

       創建運輸鏈接。參考TCP三次握手

4-5.同步比特SYN—同步比特SYN置爲1,就表示這是一個鏈接請求或鏈接接受報文。參考TCP三次握手

4-6.終止比特FIN(FINal)—用來釋放一個鏈接。當FIN=1時,代表此報文段的發送端的數據已發送完成,並要求釋放運輸鏈接。

4-7.窗體字段16位,窗體字段用來控制對方發送的數據量,單位爲字節。TCP鏈接的一端依據設置的緩存空間大小肯定本身的接收窗體

       大小,而後通知對方以肯定對方的發送窗體的上限。

5-1.包校驗和16位,包含首部數據這兩部分。在計算檢驗和時,要在TCP報文段的前面加上12字節的僞首部。

5-2.緊急指針16位,緊急指針指出在本報文段中的緊急數據的最後一個字節的序號。

6-1.可選選項24位,相似IP,是可選選項。

6-2.填充8位,使選項湊足32位。

7-1.用戶數據……

 

可以看出,每個IP包至少要20字節的頭部長度,這些與下載內容無關,加上眼下多數傳輸,包含http協議(就是IE直接下載),都是基於

TCP協議的,因此IP包裹還要從用戶數據中扣除20字節的TCP包頭,這裏已是40字節,加上其它程序的鏈接,狀態確認等等包裹,因

而算出來要比理論值要小。

另外網絡環境(包含穩定因素和傳輸節點的轉發率)也是影響下載速度的重要緣由……

 

呵呵,好了,就這麼多吧!

相關文章
相關標籤/搜索