TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,采用三次握手確認建立一個連接。
位碼(可以理解為請求狀態):
有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)
序號:
有兩種:Sequence number(順序號碼) Acknowledge number(確認號碼)
順序號是發送方定義,確認號是接收方返回的(ack num = seq num + 1),發送方會檢驗收到的ack num是否是seq num + 1。
三次握手
第1次握手:主機A發送位碼為[SYN],產生seq number=0的數據包到主機B,(主機B發現是[SYN],表示主機A請求建立連接);
第2次握手:主機B收到請求后要確認請求連接信息,向A發送ack number=(主機A的seq+1),位碼為[SYN, ACK], 產生seq=0的包(這里的seq是主機B的seq);
第3次握手:主機A收到后檢查ack number是否正確,即第一次發送的seq number+1,以及位碼是否為[SYN, ACK] (SYN,ACK 可以理解為,ACK:我收到了連接請求,SYN:我也准備好了,可以連接了),若是[SYN, ACK],主機A會再發送ack number=(主機B的seq+1),位碼是[ACK],主機B收到后確認seq值與位碼則連接建立成功。
從此完成了三次握手,主機A與主機B開始傳送數據。
如何驗證呢?下載個Wireshark抓包,這里提供下過濾器表達式:((ip.src == 10.1.20.3) && (ip.dst == 10.0.10.65)) || ((ip.src == 10.0.10.65) && (ip.dst == 10.1.20.3))
然后模擬TCP連接,用nc命令。
找台機器作為“服務器”主機B,在終端上: nc -l 9999
在本機上開啟抓包,然后本機終端上:nc 10.0.10.65 9999 連接上去。
暫停抓包。
效果如下:

看下,是不是三次握手的流程。
