TCP的三次握手和四次断开

三次握手


1、概念:

TCP位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略。

2、名词解释:

TCP:传输控制协议
报文:(数据单元)各个系统之间进行请求和响应时用来交换信息的,还需要遵守规定好的格式
SYN:建立连接请求
ACK:确认请求
Seq:序列号

3、具体流程:

1)Client端发送连接请求报文,
2)Server段接受连接后回复ACK报文,并为这次连接分配资源。
3)Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

简单来说就是:客户端和服务端都要确认对方能收、发消息。
第一步是服务端知道了客户端能发消息,
第二步是客户端知道了服务端能收能发消息,
第三步是服务端知道了客户端能收消息,这样关系就建立好了。

四次断开


1、概念:

当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,再发送FIN报文给主动方,告诉主动方同意关闭连接,所以这里的ACK报文和FIN报文多数情况下都是分开发送的。

2、具体流程:

中断连接端可以是Client端,也可以是Server端。

1)第一次断开:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

2)第二次断开:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

3)第三次断开:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

4)第四次断开:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次断开

简单来说:
1)Client:我所有东西都说完了

2)Server:我已经全部听到了,但是等等我,我还没说完

3)Server:好了,我已经说完了

4)Client:好的,那我们的通信结束

3、为什么握手是三次,断开是四次?

因为断开过程有半关闭状态,在这个状态下,比如客户端没有请求/数据需要向服务端传输,但是服务端需要持续的连接客户端,下载数据,所以,在客户端申请了断开连接的请求后,会等待服务端确认并且提出断开请求后,才会断联,所以,在服务端下载完数据前,不会发送断开请求,这是断开需要四次的原因。
 


版权声明:本文为weixin_56600233原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。