原文連結:http://www.yunsec.net/a/school/wlcs/agreement/2012/0317/10262.html
————————————————————————————————————————————————
摘要:在TCP層,有個FLAGS欄位,這個欄位有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG. 其中,對於我們日常的分析有用的就是前面的五個欄位。 它們的含義是: SYN表示建立串連,
FIN表示關閉串連, ACK表示響應, PSH表示有 DATA資料轉送, RST表示串連重設。
在TCP層,有個FLAGS欄位,這個欄位有以下幾個標識:SYN,
FIN, ACK, PSH, RST, URG. 其中,對於我們日常的分析有用的就是前面的五個欄位。
它們的含義是:
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的串連建立和串連關閉,都是通過請求-響應的模式完成的。
概念補充-TCP三向交握:
TCP(Transmission Control Protocol)傳輸控制通訊協定
TCP是主機對主機層的傳輸控制通訊協定,提供可靠的串連服務,採用三向交握確認建立一個串連:
位碼即tcp標誌位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重設) URG(urgent緊急)Sequence number(順序號碼) Acknowledge
number(確認號碼)
第一次握手:主機A發送位碼為syn=1,隨機產生seq number=1234567的資料包到伺服器,主機B由SYN=1知道,A要求建立聯機;
第二次握手:主機B收到請求後要確認聯機資訊,向A發送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包;
第三向交握:主機A收到後檢查ack number是否正確,即第一次發送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則串連建立成功。
完成三向交握,主機A與主機B開始傳送資料。
在TCP/IP協議中,TCP協議提供可靠的串連服務,採用三向交握建立一個串連。
第一次握手:建立串連時,用戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三向交握:用戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,用戶端和伺服器進入ESTABLISHED狀態,完成三向交握。完成三向交握,用戶端與伺服器開始傳送資料.