在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控制字段解釋
rtt round trip time 往返時延 rto retransmission timeout 即重傳超時時間 ssl secure sockets layer 安全套接層 及其繼任者傳輸層安全 transport layer security,tls 是為網路通訊提供安全及資料完整性的一種...
TCP報文標誌位
1.緊急標識urgent 當urg 1時,表明此報文應盡快傳送,而不要按本來的佇列次序來傳送 送報文 2.急迫標識psh 當psh 1時,表明請求遠地tcp將本報文段立即傳送給其應用層,而不要等到全部快取都填滿了之後再向上交付 接報文 3.確認標識ack 只有當ack 1時,確認序號欄位才有意義 4...
TCP 控制欄位之 URG 和 PSH
urg urgent 緊急位 用來指示緊急指標有效。緊急指標是乙個正的偏移量,從第乙個位元組到指標的位置為 緊急資料,這些資料不進入緩衝區,直接交付給上層程序。urg標誌位為1時為有效,例如乙個正在執行的程式卻出現問題,使用鍵盤的中斷訊號,這就屬於緊急資料。當接收方發現緊急資料時,其的tcp就通知與...