TCP UDP IP報頭結構體分析

2021-06-25 16:02:14 字數 4009 閱讀 8144

tcp、udp、ip報頭結構體分析

tcp資料段格式

tcp是一種可靠的、面向連線的位元組流服務。源主機在傳送資料前需要先和目標主機建立連線。然後,在此連線上,被編號的資料段按序收發。同時,要求對每個資料段進行確認,保證了可靠性。如果在指定的時間內沒有收到目標主機對所發資料段的確認,源主機將再次傳送該資料段。 下圖為tcp頭部結構:

●順序號字段:佔32位元。用於標識每個報文段,使目的主機可確認已收到指定報文段中的資料。當源主機用於多個報文段傳送乙個報文時,即使這些報文到達目的主機的順序不一樣,序列號也可以使目的主機按順序排列它們。

在建立連線時傳送的第乙個報文段中,雙方都提供乙個初始序列號。tcp標準推薦使用以4ms間隔遞增1的計數器值作為這個初始序列號的值。使用計數器可以防止連線關閉再重新連線時出現相同的序列號。

對於那些包含資料的報文段,報文段中第乙個資料位元組的數量就是初始序列號,其後資料位元組按順序編號。如果源主機使用同樣的連線傳送另乙個報文段,那麼這個報文段的序列號等於前乙個報文段的序列號與前乙個報文段中資料位元組的數量之和。例如,假設源主機傳送3個報文段,每個報文段有100位元組的資料,且第乙個報文段的序列號是1000,那麼第二個報文段的序列號就是1100(1000+100),第三個報文段的序列號就是1200(1100+100)。如果序列號增大至最大值將復位為0。    

●確認號字段:佔32位元。只有ack標誌為1時,確認號字段才有效。目的主機返回確認號,使源主機知道某個或幾個報文段已被接收。如果ack控制位被設定為1,則該字段有效。確認號等於順序接收到的最後乙個報文段的序號加1(建立連線時)或者加上乙份資料的大小(資料傳輸時),這也是目的主機希望下次接收的報文段的序號值。返回確認號後,計算機認為已接收到小於該確認號的所有資料。

例如,序列號等於前乙個報文段的序列號與前乙個報文段中資料位元組的數量之和。例如,假設源主機傳送3個報文段,每個報文段有100位元組的資料,且第乙個報文段的序列號是1000,那麼接收到第乙個報文段後,目的主機返回含確認號1100的報頭。接收到第二個報文段(其序號為1100)後,目的主機返回確認號1200。接收到第三個報文段後,目的主機返回確認號1300。

目的主機不一定在每次接收到報文段後都返回確認號。在上面的例子中,目的主機可能等到所有3個報文段都收到後,再返回乙個含確認號1300的報文段,表示已接收到全部1200位元組的資料。但是如果目的主機再發回確認號之前等待時間過長,源主機會認為資料沒有到達目的主機,並自動重發。

上面的例子中,如果目的主機接收到了報文段號為1000的第乙個報文段以及報文段號為1200的最後乙個報文段,則可返回確認號1100,但是再返回確認號1300之前,應該等待報文段號為1100的中間報文段。    

●頭部長度字段:佔4位元。給出頭部佔32位元的數目。由於tcp報頭的長度隨tcp選項字段內容的不同而變化,因此報頭中包含乙個指定報頭欄位的字段。該字段以32位元為單位,所以報頭長度一定是32位元的整數倍,有時需要在報頭末尾補0。如果報頭沒有tcp選項字段,則報頭長度值為5,表示報頭乙個有160位元,即20位元組。    

●標誌位欄位(u、a、p、r、s、f):佔6位元。各位元的含義如下:    

>>> urg:報文段緊急。    

>>> ack:確認序號有效。    

>>> psh:接收方應該盡快將這個報文段交給應用層。    

>>> rst:重建連線。    

>>> syn:發起乙個連線。在握手完成後syn為1,表示tcp建立已連線。此後的所有報文段中,syn都被置0。

>>> fin:釋放乙個連線。如果源主機資料傳送完畢,將把該連線下要傳送的最後乙個報文段的報頭中的fin位置1,或將該報文段後面傳送的報頭中該位置1。    

●視窗大小字段:佔16位元。此欄位用來進行流量控制。單位為位元組數,這個值是本機期望一次接收的位元組數。接收計算機可接收的新資料位元組的數量,根據接收緩衝區可用資源的大小,其值隨計算機所傳送的每個報文段而變化。源主機可以利用接收到的視窗值決定下乙個報文段的大小。   

●tcp校驗和字段:佔16位元。對整個tcp報文段,即tcp頭部和tcp資料進行校驗和計算,並由目標端進行驗證。    

●緊急指標字段:佔16位元。它是乙個偏移量,和序號欄位中的值相加表示緊急資料最後乙個位元組的序號。如果urg為1,則緊急指標標誌著緊急資料的結束。其值是緊急資料最後1位元組的序號,表示報文段序號的偏移量。例如,如果報文段的序號是1000,前8個位元組都是緊急資料,那麼緊急指標就是8。緊急指標一般用途是使使用者可中止程序。    

●選項字段:佔32位元。可能包括"視窗擴大因子"、"時間戳"等選項。

●資料部分:報頭後面是可選的報文段資料部分。ip協議標準要求株距能接收最長達576位元組的資料報。無其他選項的ip報頭是20位元組,無其他選項的tcp報頭也是20位元組,所以ip選項和tcp選項且含有多達536位元組資料的tcp報文段無須分片就可達到目的主機。

udp資料段格式

udp是一種不可靠的、無連線的資料報服務。源主機在傳送資料前不需要和目標主機建立連線。資料被冠以源、目標埠號等udp報頭欄位後直接發往目的主機。這時,每個資料段的可靠性依靠上層協議來保證。在傳送資料較少、較小的情況下,udp比tcp更加高效。   

下圖為udp的頭部結構:  

●源、目標埠號字段:佔16位元。作用與tcp資料段中的埠號字段相同,用來標識源端和目標端的應用程序。    

●長度字段:佔16位元。標明udp頭部和udp資料的總長度位元組。    

●校驗和字段:佔16位元。用來對udp頭部和udp資料進行校驗。和tcp不同的是,對udp來說,此字段是可選項,而tcp資料段中的校驗和字段是必須有的

ip報文段格式

下圖為ip的頭部結構:

普通的 ip 頭部長度為20 個位元組,不包含ip 選項字段。

●報文長度:指 ip 包頭部長度,佔4 位。

●8 位的服務型別:包括乙個3 位的優先權字段(cos,class of service),4 位tos 欄位和1 位未用位。4 位tos 分別代表最小時延、最大吞吐量、最高可靠性和最小費用。

●總長度:是整個ip 資料報長度,包括資料部分。

●識別符號:唯一地標識主機傳送的每乙份資料報。通常每傳送乙份報文它的值就會加1。

●協議:確定在資料報內傳送的上層協議,和埠號類似,ip 協議用協議號區分上層協議。tcp 協議的協議號為6,udp 協議的協議號為17。

●報頭校驗和:計算ip 頭部的校驗和,檢查報文頭部的完整性。

●ip選項:一般格式為1個位元組的**,乙個位元組的長度,乙個位元組的指標,指標的值從1開始計數,指向ip選項的內容,一般其值為4(跳過了前面的**&長度&指標的三個位元組),長度包括前面3個位元組在內的整個ip選項,最大值為40。

注:正常ip包的包頭長度標誌位(第0x000e位元組)的值都是0x45,其中高位「4」表示該ip包的版本號為4(ip v4),低位「5」表示包頭長5個32位組(即20位元組)。

乙太網的幀格式如下所示

其中的源位址和目的位址是指網絡卡的硬體位址(也叫mac位址),長度是48位,是在網絡卡出廠時固化的。用ifconfig命令看一下,「hwaddr 00:15:f2:14:9e:3f」部分就是硬體位址。型別欄位有三種值,分別對應ip、arp、rarp。幀末尾是crc校驗碼。

乙太網幀中的資料長度規定最小46位元組,最大1500位元組,arp和rarp資料報的長度不夠46位元組,要在後面補填充位。最大值1500稱為乙太網的最大傳輸單元(mtu),不同的網路型別有不同的mtu,如果乙個資料報從乙太網路由到撥號鏈路上,資料報長度大於撥號鏈路的mtu了,則需要對資料報進行分片(fragmentation)。ifconfig命令的輸出中也有「mtu:1500」。注意,mtu這個概念指資料幀中有效載荷的最大長度,不包括幀首部的長度。

TCP UDP IP 協議分析

互連網早期的時候,主機間的互連使用的是ncp協議。這種協議本身有很多缺陷,如 不能互連不同的主機,不能互連不同的作業系統,沒有糾錯功能。為了改善這種缺點,大牛弄出了tcp ip協議。現在幾乎所有的作業系統都實現了tcp ip協議棧。tcp ip 協議棧主要分為四層 應用層 傳輸層 網路層 資料鏈路層...

報文分析6 ARP報頭結構

arp報頭結構 硬體型別 協議型別 硬體位址長度 協議長度 操作型別 傳送方的硬體位址 0 3位元組 源實體地址 4 5位元組 源ip位址 0 1位元組 源ip位址 2 3位元組 目標硬體位址 0 1位元組 目標硬體位址 2 5位元組 目標ip位址 0 3位元組 1 硬體型別字段指明了傳送方想知道的...

Kobject結構體分析

kobject是組成裝置device 驅動driver 匯流排bus class的基本結構。如果把前者看成基類,則後者均為它的派生產物。device driver bus class構成了裝置模型,而kobject內嵌於其中,將這些裝置模型的部件組織起來,並形成了sysfs檔案系統。kobject就...