TCP的3次握手与四次挥手

3次握手:

其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包

作用:就是为了确认对方的接受能力和发送能力是否正常,指定自己的初始化序号为后面的可靠性传输做准备

首先:客户端向服务器发送一个SYN包请求连接,服务器收到后向客户端回复一个SYN+ACK,如果没有收到则不回复且客户端要重发包。服务器发送后,如果客服端的接受能力没问题,那么客户端将会回复一个ACK包。

为什么不是2次或者4次握手呢?

如果两次握手,在服务器回复之后就建立连接。那么不能确认客服端的接收能力是否正常,以及不能同步双方的状态。假如:客服端向服务器发送一个SYN包,但是在过程中出现了异常,那么此时的客户端将会重发,服务器收到后将会回复SYN+ACK包,如果是2次握手,那么此时就应该建立连接了。但是:如果第一次发送的包又恢复正常,那么服务器将会发送两个包,认为建立了两次连接,但客户端却只认为建立了一个。造成了两边的状态不一致。

至于4次握手,3次握手已经能保证了连接的可靠性。多发送一个包,浪费链路资源,是没有必要的。

4次挥手:

客户端和服务端都可以发送请求断开

以客服端为例:首先客户端向服务器发送FIN包,表示关闭连接,自己则进入终止等待1状态。服务器收到后回复ACK,表示自己进入关闭等待状态。客户端进入终止等待2状态。服务端此时还可以发送未发送的数据,客户端还可以接收数据,待服务端发送完数据后,发送一个FIN包给客服端,进入最后确认状态。客服端收到后回复ACK,进入超时等待状态,经过超时时间后关闭连接。而服务端收到ACK后立即关闭连接。

为什么客户端需要等待超时时间:为了保证对方收到ACK包

如果等待一段时间后,服务端没有收到,那么服务端将会重发FIN包,客户端收到后将会刷新等待时间,向服务端重发ACK。

过程图:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值