TCP数据包结构
源端口號( 16 位):它(連同源主機(jī) IP 地址)標(biāo)識源主機(jī)的一個(gè)應(yīng)用進(jìn)程。
目的端口號( 16 位):它(連同目的主機(jī) IP 地址)標(biāo)識目的主機(jī)的一個(gè)應(yīng)用進(jìn)程。這兩個(gè)值加上 IP 報(bào)頭中的源主機(jī) IP 地址和目的主機(jī) IP 地址唯一確定一個(gè) TCP 連接。
順序號( 32 位):用來標(biāo)識從 TCP 源端向 TCP 目的端發(fā)送的數(shù)據(jù)字節(jié)流,它表示在這個(gè)報(bào)文段中的第一個(gè)數(shù)據(jù)字節(jié)的順序號。如果將字節(jié)流看作在兩個(gè)應(yīng)用程序間的單向流動(dòng),則 TCP 用順序號對每個(gè)字節(jié)進(jìn)行計(jì)數(shù)。序號是 32bit 的無符號數(shù),序號到達(dá) 2 32 - 1 后又從 0 開始。當(dāng)建立一個(gè)新的連接時(shí), SYN 標(biāo)志變 1 ,順序號字段包含由這個(gè)主機(jī)選擇的該連接的初始順序號 ISN ( Initial Sequence Number )。
確認(rèn)號( 32 位):包含發(fā)送確認(rèn)的一端所期望收到的下一個(gè)順序號。因此,確認(rèn)序號應(yīng)當(dāng)是上次已成功收到數(shù)據(jù)字節(jié)順序號加 1 。只有 ACK 標(biāo)志為 1 時(shí)確認(rèn)序號字段才有效。 TCP 為應(yīng)用層提供全雙工服務(wù),這意味數(shù)據(jù)能在兩個(gè)方向上獨(dú)立地進(jìn)行傳輸。因此,連接的每一端必須保持每個(gè)方向上的傳輸數(shù)據(jù)順序號。
TCP 報(bào)頭長度( 4 位):給出報(bào)頭中 32bit 字的數(shù)目,它實(shí)際上指明數(shù)據(jù)從哪里開始。需要這個(gè)值是因?yàn)槿芜x字段的長度是可變的。這個(gè)字段占 4bit ,因此 TCP 最多有 60 字節(jié)的首部。然而,沒有任選字段,正常的長度是 20 字節(jié)。
保留位( 6 位):保留給將來使用,目前必須置為 0 。
控制位( control flags , 6 位):在 TCP 報(bào)頭中有 6 個(gè)標(biāo)志比特,它們中的多個(gè)可同時(shí)被設(shè)置為 1 。依次為:
URG :(urgent 緊急位 0/1) 為 1 表示緊急指針有效,為 0 則忽略緊急指針值。
ACK :(acknowledge 確認(rèn)位 0/1)為 1 表示確認(rèn)號有效,為 0 表示報(bào)文中不包含確認(rèn)信息,忽略確認(rèn)號字段。
PSH :(push 推標(biāo)志)為 1 表示是帶有 PUSH 標(biāo)志的數(shù)據(jù),指示接收方應(yīng)該盡快將這個(gè)報(bào)文段交給應(yīng)用層而不用等待緩沖區(qū)裝滿。
RST :(reset 重置位 0/1)用于復(fù)位由于主機(jī)崩潰或其他原因而出現(xiàn)錯(cuò)誤的連接。它還可以用于拒絕非法的報(bào)文段和拒絕連接請求。一般情況下,如果收到一個(gè) RST 為 1 的報(bào)文,那么一定發(fā)生了某些問題。
SYN :(synchronize sequence?序列位 0/1)同步序號,為 1 表示連接請求,用于建立連接和使順序號同步( synchronize )。
FIN :(finish 完結(jié)位 0/1)用于釋放連接,為 1 表示發(fā)送方已經(jīng)沒有數(shù)據(jù)發(fā)送了,即關(guān)閉本方數(shù)據(jù)流。
窗口大小( 16 位):數(shù)據(jù)字節(jié)數(shù),表示從確認(rèn)號開始,本報(bào)文的源方可以接收的字節(jié)數(shù),即源方接收窗口大小。窗口大小是一個(gè) 16bit 字段,因而窗口大小最大為 65535
.. 字節(jié)。
校驗(yàn)和( 16 位):此校驗(yàn)和是對整個(gè)的 TCP 報(bào)文段,包括 TCP 頭部和 TCP 數(shù)據(jù),以 16 位字進(jìn)行計(jì)算所得。這是一個(gè)強(qiáng)制性的字段,一定是由發(fā)送端計(jì)算和存儲,并由接收端進(jìn)行驗(yàn)證。
緊急指針( 16 位):只有當(dāng) URG 標(biāo)志置 1 時(shí)緊急指針才有效。緊急指針是一個(gè)正的偏移量,和順序號字段中的值相加表示緊急數(shù)據(jù)最后一個(gè)字節(jié)的序號。 TCP 的緊急方式是發(fā)送端向另一端發(fā)送緊急數(shù)據(jù)的一種方式。
選項(xiàng):最常見的可選字段是最長報(bào)文大小,又稱為 MSS(Maximum Segment Size) 。每個(gè)連接方通常都在通信的第一個(gè)報(bào)文段(為建立連接而設(shè)置 SYN 標(biāo)志的那個(gè)段)中指明這個(gè)選項(xiàng),它指明本端所能接收的最大長度的報(bào)文段。選項(xiàng)長度不一定是 32 位字的整數(shù)倍,所以要加填充位,使得報(bào)頭長度成為整字?jǐn)?shù)。
數(shù)據(jù): TCP 報(bào)文段中的數(shù)據(jù)部分是可選的。在一個(gè)連接建立和一個(gè)連接終止時(shí),雙方交換的報(bào)文段僅有 TCP 首部。如果一方?jīng)]有數(shù)據(jù)要發(fā)送,也使用沒有任何數(shù)據(jù)的首部來確認(rèn)收到的數(shù)據(jù)。在處理超時(shí)的許多情況中,也會(huì)發(fā)送不帶任何數(shù)據(jù)的報(bào)文段。
總結(jié)
- 上一篇: assert函数
- 下一篇: 基因检测技术与女性健康有哪些关系?