TCP控制字段解釋

2021-09-02 09:42:48 字數 2975 閱讀 7621

rtt(round-trip time 往返時延

rto(retransmission timeout)即重傳超時時間

ssl(secure sockets layer 安全套接層),及其繼任者傳輸層安全(transport layer security,tls)是為網路通訊提供安全及資料完整性的一種安全協議。tls與ssl在傳輸層對網路連線進行加密。

一、  msl、ttl及rtt的區別

1、 msl 是maximum segment lifetime英文的縮寫,中文可以譯為「報文最大生存時間」,他是任何報文在網路上存在的最長時間,超過這個時間報文將被丟棄。因為tcp報文 (segment)是ip資料報(datagram)的資料部分,具體稱謂請參見《資料在網路各層中的稱呼》一文;

2、ip頭中有乙個ttl域,ttl是 time to live的縮寫,中文可以譯為「生存時間」,這個生存時間是由源主機設定初始值但不是存的具體時間,而是儲存了乙個ip資料報可以經過的最大路由數,每經 過乙個處理他的路由器此值就減1,當此值為0則資料報將被丟棄,同時傳送icmp報文通知源主機。rfc 793中規定msl為2分鐘,實際應用中常用的是30秒,1分鐘和2分鐘等。

ttl與msl是有關係的但不是簡單的相等的關係,msl要大於等於ttl。

3、 rtt是客戶到伺服器往返所花時間(round-trip time,簡稱rtt),tcp含有動態估算rtt的演算法。tcp還持續估算乙個給定連線的rtt,這是因為rtt受網路傳輸擁塞程式的變化而變化

4、2msl即兩倍的msl,tcp的time_wait狀態也稱為2msl等待狀態,當tcp的一端發起主動關閉,在發出最後乙個ack包後,即第3次握 手完成後傳送了第四次握手的ack包後就進入了time_wait狀態,必須在此狀態上停留兩倍的msl時間,等待2msl時間主要目的是怕最後乙個 ack包對方沒收到,那麼對方在超時後將重發第三次握手的fin包,主動關閉端接到重發的fin包後可以再發乙個ack應答包。在time_wait狀態 時兩端的埠不能使用,要等到2msl時間結束才可繼續使用。當連線處於2msl等待階段時任何遲到的報文段都將被丟棄。不過在實際應用中可以通過設定 so_reuseaddr選項達到不必等待2msl時間結束再使用此埠。對於tcp中的各種控制字段,接下來進行具體說明。

二、tcp控制字段標誌:urg、ack、psh、rst、syn、fin

在tcp層,有個flags欄位,這個欄位有以下幾個標識:syn, fin, ack, psh, rst, urg.

其中,對於我們日常的分析有用的就是前面的五個字段。

它們的含義是:

urg:urget pointer is valid (緊急指標字段值有效)

syn: 表示建立連線

fin: 表示關閉連線

ack: 表示響應

psh: 表示有 data資料傳輸

rst: 表示連線重置。

其中,ack是可能與syn,fin等同時使用的,比如syn和ack可能同時為1,它表示的就是建立連線之後的響應,如果只是單個的乙個syn,它表 示的只是建立連線。tcp的幾次握手就是通過這樣的ack表現出來的。但syn與fin是不會同時為1的,因為前者表示的是建立連線,而後者表示的是斷開 連線。rst一般是在fin之後才會出現為1的情況,表示的是連線重置。一般地,當出現fin包或rst包時,我們便認為客戶端與伺服器端斷開了連線;而 當出現syn和syn+ack包時,我們認為客戶端與伺服器建立了乙個連線。psh為1的情況,一般只出現在 data內容不為0的包中,也就是說psh為1表示的是有真正的tcp資料報內容被傳遞。

tcp產生 rst響應的情況(屬於硬錯誤):

四次握手不是關閉 tcp連線的唯一方法. 有時,如果主機需要盡快關閉連線(或連線超時,埠或主機不可達),rst (reset)包將被傳送. 注意在,由於rst包不是tcp連線中的必須部分, 可以只傳送rst包(即不帶ack標記). 但在正常的tcp連線中rst包可以帶ack確認標記

1. syn傳送到伺服器主機,但是目的埠並未執行。則產生乙個econrfused錯誤。客戶端立即返回。比如telnet 192.168.1.55 8889,條件:55主機在區域網上並且可達(也可以換成可以到達的網路ip位址),但是8889這個埠並未使用(可能伺服器已經關閉),則伺服器(對 方主機tcp核心)傳送乙個rst相應給客戶端,於是客戶端立即關閉。 注意一下,如果輸入的網路ip不可達的話,客戶端將會持續傳送syn,最後產生乙個etimeout的錯誤,大概75秒左右。這個時候客戶端的預設閘道器 (192.168.1.1 211.2.2.2)因為找不到下一路由,路由器(或者再過幾跳的路由器)會產生乙個ehostunreach響應給客戶端(注 意,enetunreach和ehostunreach通常被認為是乙個錯誤,因為enetunreach一般當作已過時),由於這是個軟錯誤(有可能是 網路暫時不通造成的)。客戶端會重發syn直到超時。

所以會有 telnet 192.168.1.55 8888  主機存在,但是埠未開,econrfused錯誤,立刻返回

telnet 192.168.1.56 *     主機不存在,unroutetohost錯誤,立刻返回

telnet 211.1.1.5    *     主機不存在,etimeout錯誤

2. 最簡單的情況,伺服器主動傳送rst給客戶端關閉連線。客戶端read write直接返回rst錯誤。

3. 伺服器收到乙個不存在的連線返回rst響應。比如,伺服器重啟之後,先前的乙個已連線的客戶端毫不之情的情況下,這就是半閉連線(跟半開連線最大的不同是,半閉連線是不能使用的,半開連線可以使用)。

此時,如果客戶端read的話(接收緩衝無資料)產生乙個epeerrst錯誤

如果客戶端write的話且傳送資料小於傳送緩衝區剩餘容量時,第一次write成功,第二次write或者read的時候就會產生乙個 epeerrst的錯誤。因為write傳送資料是直接把要傳送的資料拷貝到核心的tcp傳送緩衝區就立刻返回成功的。當然拷貝之前會先檢查一下tcp連 接有無錯誤。所以第二次傳送或者接收的時候,發現連線上已經有了epeerrst的錯誤,所以就返回錯誤(話說回來,第一次傳送的資料實際上根本就沒有發 送成功,對方根本就沒接受它)

TCP控制字段標誌

在tcp層,有個flags欄位,這個欄位有以下幾個標識 syn,fin,ack,psh,rst,urg.其中,對於我們日常的分析有用的就是前面的五個字段。它們的含義是 urg urget pointer is valid 緊急指標字段值有效 syn 表示建立連線 fin 表示關閉連線 ack 表示響...

TCP 控制欄位之 URG 和 PSH

urg urgent 緊急位 用來指示緊急指標有效。緊急指標是乙個正的偏移量,從第乙個位元組到指標的位置為 緊急資料,這些資料不進入緩衝區,直接交付給上層程序。urg標誌位為1時為有效,例如乙個正在執行的程式卻出現問題,使用鍵盤的中斷訊號,這就屬於緊急資料。當接收方發現緊急資料時,其的tcp就通知與...

MySQL explain欄位解釋

1.select type 它表示簡單的select,沒有union和子查詢 dependent union union依賴外層的查詢 dependent subquery subquery依賴外層的查詢 2.type system 表僅有一行,這是const型別的特列,平時不會出現,一般出現在my...