一般來說,網路程式設計我們僅僅須要呼叫一些封裝好的函式或者元件就能完畢大部分的工作,可是一些特殊的情況下,就須要深入的理解
網路資料報的結構,以及協議分析。如:網路監控,故障排查等……
ip包是不安全的,可是它是網際網路的基礎,在各方面都有廣泛的應用。由ip協議衍生的協議族有10數種(據我所知),以後還會出現
很多其它的基於ip的協議…
先從實際出發吧!
一般我們在談上網速度的時候,專業上用頻寬來描寫敘述,事實上不管說網速或者頻寬都是不準確的,呵呵。比方:1兆,512k……
這裡所說的1m是指1mbps = 1 million bits per second,也就是1m位元每秒,即一秒鐘傳輸1048576個二進位制位。我們知道乙個位元組
是8個二進位制位。
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.使用者資料……
tcp協議的,所以ip包裹還要從使用者資料中扣除20位元組的tcp包頭,這裡已經是40位元組,加上其它程式的連線,狀態確認等等包裹,因
而算出來要比理論值要小。
**:
IP資料報結構
ip資料報頭長度 20 60位元組 一般為20位元組 可選項一般不用 ipsecvpn ttl值 對首部字段加密時用到 ip資料報長度 mtu 1500 china 版本 4 0100 ipv4 0110 ipv6 首部長度 4 0000 1111 0 15 x4位元組 0 60位元組 ip包頭的長...
IP資料報結構
version 版本 字段長度為4位,標識了資料報的ip版本號。其中0100表示ip版本4,0110表示ip版本6 其他所有版本號僅作為 歷史產物 ihl 首部長度 字段長度為4位,以位元組為單位表示整個ip包中除資料欄位外的長度。最小為20,最大為60。ps 可選項的範圍為0到40個位元組 typ...
解讀TCP UDP資料報(二) TCP資料報結構
tcp資料報由首部和資料組成,每行4個位元組 32位 其中首部最少20個位元組 5行 最多60個位元組 15行 選項部分是可選的 tcp首部並沒有字段表明整個資料報的長度,是因為tcp資料報是包含在ip資料報中的,而ip資料報已有長度字段,除去ip首部和tcp首部,剩餘部分就是tcp包的淨荷資料。1...