tcp首部格式
tcp資料是被封裝在ip資料報中的,和udp類似,在ip資料報的資料部分。tcp資料報的格式如下:
源埠號和目的埠號(定址)與udp中類似,用於尋找發端和收端應用程序。這兩個值加上ip首部中的源端ip位址和目的端ip位址唯一確定乙個,在網路程式設計中,一般乙個ip位址和乙個埠號組合稱為乙個套接字(socket)。
序號(seq):用來標識從tcp發端向tcp收端傳送的資料字節流,它表示在這個報文段中的第乙個資料位元組。在tcp中tcp用序號對每個位元組進行計數(這個值與傳送的幀數沒有關係,而是與傳送的資料位元組數有關係,後面會有說明)。
確認序號(seq+1):包含傳送確認的一端所期望收到的下乙個序號。因此,確認序號應當是上次已成功收到資料位元組序號加 1(不是單純的序號加1,還包括資料位元組數)。
首部長度:用於記錄tcp資料報首部的長度,一般為20位元組,實際值為首部長度除以4。
源埠號和目的埠號(定址)與udp中類似,用於尋找發端和收端應用程序。這兩個值加上ip首部中的源端ip位址和目的端ip位址唯一確定乙個,在網路程式設計中,一般乙個ip位址和乙個埠號組合稱為乙個套接字(socket)。
序號(seq):用來標識從tcp發端向tcp收端傳送的資料字節流,它表示在這個報文段中的第乙個資料位元組。在tcp中tcp用序號對每個位元組進行計數(這個值與傳送的幀數沒有關係,而是與傳送的資料位元組數有關係,後面會有說明)。
確認序號(seq+1):包含傳送確認的一端所期望收到的下乙個序號。因此,確認序號應當是上次已成功收到資料位元組序號加 1(不是單純的序號加1,還包括資料位元組數)。
首部長度:用於記錄tcp資料報首部的長度,一般為20位元組,實際值為首部長度除以4。
下面的是標誌位對應的功能:
urg: 緊急指標( urgent pointer)有效。
ack: 確認序號有效。
psh: 接收方應該盡快將這個報文段交給應用層。
rst: 重建連線。
syn: 同步序號用來發起乙個連線。
fin: 發端完成傳送任務。
視窗大小:用於流量控制。
檢驗和:檢驗和覆蓋了整個的 tcp報文段: tcp首部和tcp資料,與udp相似需要計算偽首部。
(1)每個tcp段都包括源端和目的端的埠號,用於尋找傳送端和接收端的應用程序。這兩個值加上ip首部的源端ip位址和目的端ip位址唯一確定乙個tcp連線。
(2)序號用來標識從tcp傳送端向接收端傳送的資料字節流,它表示在這個報文段中的第乙個資料位元組。如果將位元組流看作在兩個應用程式間的單向流動,則tcp用序號對每個位元組進行計數(seq)。
(3)當建立乙個新連線時,syn標誌變1。序號字段包含由這個主機選擇的該連線的初始序號isn,該主機要傳送資料的第乙個位元組的序號為這個isn加1,因為syn標誌使用了乙個序號。
(4)既然每個被傳輸的位元組都被計數,確認序號包含傳送確認的一端所期望收到的下乙個序號。因此,確認序號應當時上次已成功收到資料位元組序號加1。只有ack標誌為1時確認序號欄位才有效。(ack)
(5)傳送ack無需任何代價,因為32位的確認序號欄位和ack標誌一樣,總是tcp首部的一部分。因此一旦乙個連線建立起來,這個字段總是被設定,ack標誌也總是被設定為1。
(6)tcp為應用層提供全雙工的服務。因此,連線的每一端必須保持每個方向上的傳輸資料序號。
(7)tcp可以表述為乙個沒有選擇確認或否認的滑動視窗協議。因此tcp首部中的確認序號表示傳送方已成功收到位元組,但還不包含確認序號所指的位元組。當前還無法對資料流中選定的部分進行確認。
(8)首部長度需要設定,因為任選欄位的長度是可變的。tcp首部最多60個位元組。
(9)6個標誌位中的多個可同時設定為1
◆urg-緊急指標有效
◆ ack-確認序號有效
◆ psh-接收方應盡快將這個報文段交給應用層
◆ rst-重建連線
◆ syn-同步序號用來發起乙個連線
◆ fin-傳送端完成傳送任務
(10)tcp的流量控制由連線的每一端通過宣告的視窗大小來提供。視窗大小為位元組數,起始於確認序號字段指明的值,這個值是接收端期望接收的位元組數。視窗大小是乙個16為的字段,因而視窗大小最大為65535位元組。
(11)檢驗和覆蓋整個tcp報文端:tcp首部和tcp資料。這是乙個強制性的字段,一定是由傳送端計算和儲存,並由接收端進行驗證。tcp檢驗和的計算和udp首部檢驗和的計算一樣,也使用偽首部。
(12)緊急指標是乙個正的偏移量,序號欄位中的值相加表示緊急資料最後乙個位元組的序號。tcp的緊急方式是傳送端向另一端傳送緊急資料的一種方式。
(13)最常見的可選字段是最長報文大小mms,每個連線方通常都在通訊的第乙個報文段中指明這個選項。它指明本端所能接收的最大長度的報文段。
wireshark抓包分析tcp結構
利用wireshark抓取乙個tcp資料報,檢視其具體資料結構和實際的資料:
tcp是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。
面向連線: 面向連線意味著使用tcp的應用程式在傳輸資料前必須先建立連線,就如打**一樣,要先進行撥號,等待對方響應才能開始說話。
可靠性:tcp協議通過下列方式來提高可靠性:
· 1.應用資料被分割成tcp認為最適合傳送的資料塊。這和udp完全不同,應用程式產生的資料報長度將保持不變。由tcp傳遞給ip的資訊單位稱為報文段或段。(定長)
· 2.當tcp發出乙個段後,它啟動乙個定時器,等待目的端確認收到這個報文段。如果不能及時收到乙個確認,將重發這個報文段。(定時重發)
· 3.當tcp收到發自tcp連線另一端的資料,它將傳送乙個確認。這個確認不是立即傳送,通常將推遲幾分之一秒。(確認機制)
· 4.tcp將保持它首部和資料的檢驗和。這是乙個端到端的檢驗和,目的是檢測資料在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,tcp將丟棄這個報文段和不確認收到此報文段(希望發端超時並重發)。(檢驗和較檢)
· 5.既然tcp報文段作為ip資料報來傳輸,而ip資料報的到達可能會失序,因此tcp報文段的到達也可能會失序。如果必要,tcp將對收到的資料進行重新排序,將收到的資料以正確的順序交給應用層。(必要時重新排序)
· 6.既然i p資料報會發生重複,tcp的接收端必須丟棄重複的資料。(去重)
· 7.tcp還能提供流量控制。tcp連線的每一方都有固定大小的緩衝空間。tcp的接收端只允許另一端傳送接收端緩衝區所能接納的資料。這將防止較快主機致使較慢主機的緩衝區溢位。(流量控制)
位元組流:兩個應用程式通過tcp連線交換8 bit位元組構成的位元組流。
介面協議之抓包分析 TCP 協議
本文節選自霍格沃茲測試學院內部教材 tcp 協議是在傳輸層中,一種面向連線的 可靠的 基於位元組流的傳輸層通訊協議。環境準備 對介面測試工具進行分類,可以如下幾類 抓包分析tcp協議 tcpdump tcpdump是一款將網路中傳送的資料報的 頭 完全截獲下來提供分析的工具。它支援針對網路層 協議 ...
轉 TCP握手協議
一 tcp握手協議 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也傳送乙個sy...
TCP協議分析
tcp協議是傳輸層控制協議,是一種面向連線的 可靠的 基於位元組流的傳輸層通訊協議。tcp 為了保證不發生丟包,就給每個包乙個序號,同時序號也保證了傳送到接收端實體的包的按序接收。tcp用乙個校驗和函式來檢驗資料是否有錯誤 在傳送和接收時都要計算校驗和。三次握手抓包 客戶端傳送syn seq x 報...