四次挥手问题

四次挥手的过程:四次挥手有可能是客户端发起的,也可能是服务器端发起的。
在这里插入图片描述(我们需要了解的是每个节点处于的状态,并且每个节点发送的内容)

重点:
1.为什么是四次挥手,不能是三次?
首先需要声明的是可以三次挥手,三次挥手的情况就是把CLOSE_WAIT状态下发送的ACK和LAST_ACK状态下发送的FIN包装在一起,一起发送给主动段开方。
然后就是为什么不能是三次:主动断开方和被动断开方都有两个缓存区,分别为send 和 recv 。当发送断开请求的时候,只能断开其中的一条连接,另外一条不能断开。
在这里插入图片描述
2.TIME_WAIT状态的意义?
(1)保证可靠的断开TCP连接
(2)保证迟来的数据能被识别并且丢弃,防止对后续运行的程序造成影响:即在状态CLOSE_WAIT 和 LAST_ACK之间可能会有数据写入,并且可能会迟到状态TIME_WAIT,为了保证关闭的全面性,需要存在等一下的程序。

3.CLOSE_WAIT 和 TIME_WAIT状态的区别?
(1)所处的方位不同,TIME_WAIT在主动断开方,而CLOSE_WAIT被动断开方。
(2)TIME_WAIT状态经过2MSL之后就会断开,而CLOSE_WAIT状态经过LAST_ACK状态之后才会达到CLOSE状态。
(3)直接画图,可以直观的看到两者的不同。

4.为什么有的时候主动方断开之后,短时间之内重新启动该程序会出现错误的情况 (会提示bind存在错误) ?
因为主动断开方可能还没有真正的断开,经过2MSL之后才会断开,而bind错误存在两种情况(1.IP地址不正确 2.端口号有问题) ,首先IP地址不会存在问题,那么就会是端口号有问题,原因就是两次进程申请的端口号相同,第一次还没开来的及释放这个端口号,第二次又重新的申请,会出现冲突,所以会出现错误,也就是端口号有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值