TCP连接可靠性--三次握手、四次挥手

43 篇文章 3 订阅

一、三次握手

1.1

发送端是客户端,接收端是服务器端

第一步是由客户端发起的,服务端其实是处于被动连接状态,此时它处于等待状态。

Sender会发送一个SYN命令(连接请求命令),该命令会携带一个随机值x参数,发送到服务端。

Receiver收到后会校验SYN命令,如果该命令是完整的,那么会回送一条SYN ACK命令(包含SYN命令和ACK命令,ACK命令是对客户端发送过来的SYN命令的一次回送),同时也会携带一个随机值y和经过操作x+1后的参数

Sender收到之后会校验,如果该命令比SYN携带的x的值大1,那么,就会认为已经接收到了服务器的回送消息。

Sender此时会继续向Receiver发送刚接收到的x的值和将y+1的值发送给服务端。服务端在收到该命令后会确保该连接已经完全建立。

 

1.2 为什么要进行三次握手?

为了实现可靠传输,发送方和接收方始终需要同步( SYNchronize )序号

 

1.3 为什么要携带随机值?

为了确定需要和哪个客户端建立连接

 

二、四次挥手

2.1

客户端和服务端都可以进行这样的流程,以Client(客户端)向Server(服务端)发起该流程为例。

Client在已连接的状态,发送一条FIN(关闭连接)命令,并携带FIN=1,seq=随机值。

Server接收到数据后发送ACK(回送)命令,并将相应的信息携带回来。其中,ack=u+1.

Client接收到ACK命令后就可以将自己的连接断开了(可以断开输出操作,但是输入读取操作还是保留的。此时,服务端依然可以将自己的数据发送给客户端)。

Server发送完ACK命令,满足自己所设置的条件后,向客户端发送FIN(关闭连接)命令,,并携带ack=u+1

Client接收到Server的FIN命令,会向Server发送ACK命令

Server接收到Client的ACK命令后断开,连接断开

 

2.1 Server如何确定所发送的FIN命令被Client接收到?

当Server发送FIN命令之后,会进行一个等待状态。在这个等待状态中,会不间断、持续地发送FIN命令,这个间隔时间一般为一次数据片送达的完整的最长时间(通常为30s)。如果Client持续收到FIN命令,说明Server没有收到ACK命令,那么Client也需要持续地发送ACK命令。当然这个过程中可以出现异常。

 

2.2为什么要有四次挥手?

保证全双工(双方都可以发送和接收消息)的断开。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值