82.jpg?x-oss-process=image/auto-orient,1/quality,q_90/watermark,image_bG9nby5wbmc_eC1vc3MtcHJvY2Vzcz1pbWFnZS9yZXNpemUsUF8yMA,g_center,t_50,x_10,y_10

所谓“三次握手”即对每次发送的数据量是怎样跟踪进行协商使数据段发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕何时撤消联系,并建立虚连接。

握手流程

TCP三次握手的流程如图:

82-1.jpg?x-oss-process=image/auto-orient,1/quality,q_90/watermark,image_bG9nby5wbmc_eC1vc3MtcHJvY2Vzcz1pbWFnZS9yZXNpemUsUF8yMA,g_center,t_50,x_10,y_10

流程详解

  1. TCP第一次握手:在建立连接时,客户端发送请求包到服务器,并进入SYN_SENT状态,等待服务器的确认;

  2. TCP第二次握手:服务器收到请求包,必须确认客户的SYN,同时自己也发送一个请求包,即请求确认包,此时服务器进入SYN_RECV状态;

  3. TCP第三次握手:客户端收到服务器的请求确认包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手;

  4. 完成三次握手,客户端与服务器则开始传送数据。

白话解读

我们的网络是全双工的模式,首先解释一下什么叫全双工。全双工指代上传和下载可以同时进行,像我们打电话一样,任意一方可以同时接听、说话。还有一个叫半双工,像对讲机,双方无法同时说话,一方占用线路后另一方只能接听、等待。

因为这个原因,在进行网络通信时,不仅客户端要发送请求数据,还要接收服务端的确认信息,才是一次成功通信,所以需要三次握手才能进行数据通信。

第一次握手时,客户端询问服务端是否可以连接,这是请求信息。此时双方无法进行数据通信。

第二次握手时,服务端向客户端发送确认和请求信息,确认允许客户端的连接,这时允许客户端向服务端发数据。但服务端不可以向客户端发数据,因为服务端的请求信息还未得到确认。

第三次握手时,客户端向服务端发确认信息,这时允许服务端向客户端发数据,连接正式建立。

经过三次握手,双方都可以向对端发送数据,即可开始进行数据传输。如未完成握手,则只有一端可发送数据,这样是无法成功通信的。

名词解释

  1. SYN表连接请求,在请求连接对方时,会在数据包打上该标记,代表我请求连接你;

  2. ACK表请求确认,在收到对方请求信息后,如果同意对方连接,则会在返回的数据包打上该标记,代表同意你的连接;

  3. seq表数据包序列号,为了保证数据的完整性,会在数据包上标注序列;

  4. ack数据包确认,收到数据包后,接收端需回复确认,会在原数据包序列号上加一,代表该数据收到了。


 评论