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

一般來說,網絡編程我們僅僅須要調用一些封裝好的函數或者組件就能完畢大部分的工作,可是一些特殊的情況下,就須要深入的理解網絡數據包的結構,以及協議分析。如:網絡監控,故障排查等……

IP包是不安全的,可是它是互聯網的基礎,在各方面都有廣泛的應用。由IP協議衍生的協議族有10數種(據我所知),以後還會出現很多其它的基於IP的協議…

先從實際出發吧!

一般我們在談上網速度的時候,專業上用帶寬來描寫敘述,事實上不管說網速或者帶寬都是不準確的,呵呵。比方:1兆,512K……有些在學校的學生,或許會有疑問,明明我的業務是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數據包結構:

TCP/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數據包結構:

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

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時,確認號無效。

4-4.復位比特RST(Reset) —當RST=1時,表明TCP連接中出現嚴重差錯(如因爲主機崩潰或其它原因),必須釋放連接,然後再又一次建立運輸連接。

4-5.同步比特SYN—同步比特SYN置爲1,就表示這是一個連接請求或連接接受報文。

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字節,加上其它程序的連接,狀態確認等等包裹,因而算出來要比理論值要小。

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

http://network.51cto.com/art/201407/444897.htm

http://www.2cto.com/net/201307/224090.html

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