1. 程式人生 > >說一下TCP的三次握手客戶端在訪問伺服器的什麼?在三次握手中伺服器內部發生了什麼事情?

說一下TCP的三次握手客戶端在訪問伺服器的什麼?在三次握手中伺服器內部發生了什麼事情?

建立起一個TCP連線需要經過“三次握手”:
1) Client首先發送一個連線試探,ACK=0 表示確認號無效,SYN = 1 表示這是一個連線請求或連線接受報文,同時表示這個資料報不能攜帶資料,seq = x 表示Client自己的初始序號(seq = 0 就代表這是第0號幀),這時候Client進入syn_sent狀態,表示客戶端等待伺服器的回覆
2) Server監聽到連線請求報文後,如同意建立連線,則向Client傳送確認。TCP報文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到對方下一個報文段的第一個資料位元組序號是x+1,同時表明x為止的所有資料都已正確收到(ack=1其實是ack=0+1,也就是期望客戶端的第1個幀),seq = y 表示Server 自己的初始序號(seq=0就代表這是伺服器這邊發出的第0號幀)。這時伺服器進入syn_rcvd,表示伺服器已經收到Client的連線請求,等待client的確認。
3) Client收到確認後還需再次傳送確認,同時攜帶要傳送給Server的資料。ACK 置1 表示確認號ack= y + 1 有效(代表期望收到伺服器的第1個幀),Client自己的序號seq= x + 1(表示這就是我的第1個幀,相對於第0個幀來說的),一旦收到Client的確認之後,這個TCP連線就進入Established狀態,就可以發起http請求了。

注意:

  1. 三次握手,並沒有傳遞資料,建立連線後才進入到資料傳輸的狀態。
  2. SYN(synchronous)是TCP/IP建立連線時使用的握手訊號。在客戶機和伺服器之間建立正常的TCP網路連線時,客戶機首先發出一個SYN訊息,伺服器使用SYN+ACK應答表示接收到了這個訊息,最後客戶機再以ACK訊息響應。這樣在客戶機和伺服器之間才能建立起可靠的TCP連線,資料才可以在客戶機和伺服器之間傳遞。

前提:服務端server要首先啟動,處於監聽的狀態
SYN建立連線的請求報文
ACK代表的是應答 允許建立連線的訊號
Seq傳送的資料序號報文,剛開始是傳送0號資料 seq=x第x個序號資料
SYN-Send代表請求建立連線的狀態,等待服務端建立連線
在這裡插入圖片描述