TCP三次握手和四次挥手

三次握手

简单来说就是相隔一段距离的两个人必须靠喊话来交流,那么两个人在正式交谈之前要先确认对方是否可以听到自己,那么这个确认过程就是TCP三次握手,目的是建立连接。

假设发送端是张三,接收端是李四

1.张三:李四,你能不能听到我说话?

2.李四:能!那你能听到我说话吗?

3.张三:能!

到这里张三和李四都确认了对方能听到自己说话

类比于三次握手:

1.发送端发送标有SYN的数据包给接收端

2.接收端发送标有ACK和SYN的数据包给发送端

3.发送端发送标有ACK的数据包给接收端

这其中的第二步其实是两步的合并,接收端确认自己能听到发送端并且接收端还要问发送端能不能听到自己

数据传输


TCP总是要反复确认对方能不能听到自己,所以张三喊了一句话(data),李四听见了要回复张三自己听到了(ACK)。

如果张三喊了话,半天没李四的回复,张三就认为自己的话被大风刮走了,所以张三重新喊话,即【重传】

既然重传,李四就有可能同一句话听见了两次,那么就是【去重】

【重传】和【去重】用户层都不用关心,这件事情由操作系统的网络内核模块帮我们处理

同时,张三连续喊了八句话,李四到最后一起回复他,我前面八句都收到了,这就是【批量ACK】

但是,有可能张三说了很多话,李四一时无法消化,所以两个人协商好了合适的发送和接收速率,即【TCP窗口大小】

四次挥手

TCP四次挥手即要断开连接,它与建立连接时差不多,但是不同的是四次挥手中把中间两步并没有合并成一条。

谁先发完数据包谁就先请求断开连接。并不是只有服务端才能或者只有客户端才能。

假设张三先发完数据包

张三:我没什么要传的了(Fin)

李四:知道了(ACK)

李四:那我关了(Fin)

张三:好的(ACK)

此时李四处于closed状态

但是张三处于time_wait状态,持续时间2个MSL(4分钟),MSL是最长报文生存时间,这四分钟足以使残留报文永远消失

定时等待后,张三没有接收到消息则关闭连接,处于closed状态。

 

 

参考:

https://blog.csdn.net/ZWE7616175/article/details/80432486

https://blog.csdn.net/qzcsu/article/details/72861891

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值