拿圖舉例:圖上是簡單的一個抓包請求(請求我服務器的一個網頁):
第一次握手:建立連接時,客戶端發送SYN包(syn=x)到服務器,並進入SYN_SENT狀態,等待服務器確認;
//x 屬於序列號,當主機開啓一個TCP會話時,他的初始序列號是隨機的,可能是0和4,294,967,295之間的任意值;
// 我的第一次請求客戶端開啓TCp會話生成的序列號是1887825286
第二次握手:
當服務端收到來自客戶端請求連接的報文後,如果同意鏈接則會向客戶端發送一個應答,
即SYN+ACK的包.這個包裏面的ack的值等於客戶端傳過來的序列號+1:即ack=x+1;
同時自己也會初始化一個序列號爲發送到客戶端
//所以這裏的ack = 客戶端傳來的序列號 (1887825286 )+1 = 1887825287
//我這裏服務端生成的序列號是 1163132607
第三次握手
當客戶端收到連接同意的應答後,還要向服務端發送一個確認報文段,表示:服務端發來的連接同意應答已經成功收到。
此時向服務端發送一個ACK報文:sql是還是1887825287 ;ACK爲第二次握手 服務端初始化的序列號+1: 爲1163132608
三次握手結束後服務器返回返回包信息