TCP为什么要进行三次握手四次挥手

先看一下三次握手的过程:
这里写图片描述
为什么要进行三次握手而不是两次握手呢?
假设是两次握手的情况下:A向B发了一个第一个请求连接报文,此时又于选择了一条较长的路径导致这个请求,传输的时间较长,以致延误到连接释放以后的某个时间才到达server,但是此时A认为发了一个请求连接的报文B没有收到,因此A进行重传,此时这个新的请求连接报文B很快就收到了,于是B向A发送确认报文段,同意连接,于是A和B开始互发数据。但过了一段时间之后B收到了这个延迟的请求连接的报文,此时B立刻发给了A一个确认报文段,同意连接,并且此时B开始等待A给B发数据。但是A认为他刚才并没有发送新的请求连接报文,此时A不会给B发任何数据,那么此时B一直处于等待状态就造成了资源的浪费。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,A不会向B的确认发出确认。B由于收不到确认,就知道A并没有要求建立连接。此时就不会再造成服务器资源的浪费了。
或许有人认为为什么不四次握手或者五次握手呢,但是四次握手和五次握手效果和三次握手是一样的,并且三次握手保证了可靠的同时效率也高啊。

这里写图片描述
为什么TCP要进行四次挥手呢?
因为是双方彼此都建立了连接,因此双方都要释放自己的连接,A向B发出一个释放连接请求,他要释放链接表明不再向B发送数据了,此时B收到了A发送的释放链接请求之后,给A发送一个确认,A不能再向B发送数据了,它处于FIN-WAIT-2的状态,但是此时B还可以向A进行数据的传送。此时B向A 发送一个断开连接的请求,A收到之后给B发送一个确认。此时B关闭连接。A也关闭连接。

为什么要有TIME-WAIT这个状态呢,这是因为有可能最后一次确认丢失,如果B此时继续向A发送一个我要断开连接的请求等待A发送确认,但此时A已经关闭连接了,那么B永远也关不掉了,所以我们要有TIME-WAIT这个状态。
当然TCP也并不是100%可靠的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值