TCP三次握手、四次挥手

为什么需要三次握手而不是两次握手

为了防止已经失效的连接请求报文段被服务端接受,从而产生错误。
失效的连接请求:发生超时的”第一个“连接请求。
若客户端向服务端发送的连接请求发生超时,客户端在等待应答丢失后,就会再次发送连接请求,此连接请求正常发送至服务器端,服务器端也正常做出应答,并将响应发送回客户端。
假如此时采用的是两次握手,此时客户端—服务器端已经成功建立起TCP连接,假设在通信完成并通信结束后,已经失效到达服务器端,此时连接就建立了,服务器端会一直等待客户端发送数据,从而白白浪费服务器的资源
而如果采用的是三次握手,每一步中都需要确认ACK,失效的请求触发TCP重传机制,在未到达前不会建立TCP连接,因此不会产生已经失效的连接请求报文段被服务器端接受的情况。

为什么需要四次挥手

因为在Linux操作系统中,允许TCP采用半关闭,允许连接的双方只有一方关闭,FIN、ACK半关闭完成。理论上此时关闭的一方不能发送数据,但是任然可接受数据

为什么客户端要先TIME-WAIT状态,等待后才进入CLOSED状态

第四次挥手:假设客户端为A,服务器端为B。A收到释放请求,向B发送确认应答,A进入TIME-WAIT状态,持续2MSL时间,若该时间无B重发请求,再进入CLOSED状态,撤销TCP。当B收到确认应答后,也进入CLOSED状态,撤销TCP。
若A直接进入CLOSED状态,加入此时向B发送的应答丢失,B等待超时,重发连接释放请求,但此时A已经CLOSED,不会响应,导致B永远无法正常关闭,所以需要先进入TIME-CLOSED状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值