TCP 的三次握手

握手流程

TCP 三次握手的流程如图:

流程详解

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

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

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

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

白话解读

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

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

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

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

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

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

名词解释

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

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

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

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

本文链接:https://my.lmcjl.com/post/19477.html

展开阅读全文

4 评论

留下您的评论.