为什么要Time_wait

为什么要Time_waitTime_wait啊,老哥们肯定会想,time_wait什么鬼?为毛我主动断开tcp连接。发完最后一个ACK后不能直接断开连接啊,我能做的都做了。但是…..老铁们你们想一下,ACK丢包是不会重传的,但是FIN呢?最后被动关闭的一直要是收不到ACK它会怎么想,它肯定认为FIN包丢包了,那怎么样,重发呗。重发之后呢,如果对端一直不会回复ACK,那么重传一定次数后就会发送重置报文段然后断开连接

大家好,又见面了,我是你们的朋友全栈君。

Time_wait

啊,老哥们肯定会想,time_wait什么鬼? 为毛我主动断开tcp连接。发完最后一个ACK后不能直接断开连接啊,我能做的都做了。但是…..
老铁们你们想一下,ACK丢包是不会重传的,但是FIN呢? 最后被动关闭的一直要是收不到ACK它会怎么想,它肯定认为FIN包丢包了,那怎么样,重发呗。
重发之后呢,如果对端一直不会回复ACK,那么重传一定次数后就会发送重置报文段然后断开连接。那么这些精彩的来了,现在网络上有这么多FIN的重传包,如果主动断开连接的一方又重新立刻再次建立连接呢?直接血崩……
正传数据就会发现一个FIN段,怎么办呢?一看序列号不是当前连接里的序列号啊… 这怎么办只能发送重置报文段了关闭连接。这岂不是又浪费资源,又得不偿失影响下一次通信吗~~~~
所以主动断开的最后一个ACK发送完后,不能直接断开连接,它必须确保对方收到最后一个ACK才能断开连接,所以ACK过去一个MSL,如果ACK快到丢包这消耗了一个MSL,那么对端会重传FIN,这个FIN段又消耗了一个MSL,所以啊共2个MSL。所以time_wait时间俩个MSL。
所以说time_wait 就是为了防止在连接上有多个重传的FIN包出现,所以必须time_wait这个是为了防止当再一次建立相同的新连接时防止收到老连接的数据包从而导致的影响。
不知道这波解释为什么time_wait,老哥们听懂了没有
对于为什么3次握手?为毛不是2次/4次?
首先有个点是必须得知道的,tcp三次握手不止是为了建立连接,还要互相确认对方的当前的初始化序列号(这个序列号在Linux下是有哈希算法得来的),确保当前连接的安全性,如果不初始化,都是0开始的话,那么连接将不安全。其次还要互相决定下来MSL的大小。
所以如果2次握手。client 发生了 SYN + 自己的初始化序列号,server收到了,这时候server将 syn+ack+自己序列号回复给client , 如果这个包丢了,那么client将不知道server的序列号。但是server自己并不知道 这个syn+ack丢包了如果2次的话,那么client发现一直收到回复就重传了SYN段,那么server收到后,会知道自己的包丢了,就会再次重发syn+ack。假设这个包 client接到了,现在通信状态是OK的。不过这个假设是建立在server发完后没有立即发送数据段的前提下。
但是如果 server发完数据段,它认为是连通的,并立即发送一个数据,第一个syn+ack丢包了,client并不知道server的初始化序列号,突然收到了一个数据段,会发什么? 很简单,它误以为是上一个同一连接的延迟包,发送RST段,然后中断连接,直接雪崩!!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139583.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OpenResty 最佳实践学习–实战演习笔记(2)

    在前面一篇中已经介绍了Openresty的相关知识和一个简单的hello world的访问。本篇依然是延续上一篇进行讲解。 需要提前申明的是我环境有问题。重新安装了一次openresty,这次安装的目录和上一次不一样了。一:环境说明:虚拟机 :CentOs 6.3 32位OpenResty 安装目录 : /opt/openresty/版本: /opt/openresty/nginx/sbi

    2022年2月26日
    51
  • 哈理工 oj 2122 旅行(map + 最短路dij算法)

    哈理工 oj 2122 旅行(map + 最短路dij算法)旅行TimeLimit:1000MSMemoryLimit:32768KTotalSubmit:18(6users)TotalAccepted:3(3users)Rating:SpecialJudge:NoDescription“04.24,和Sakur

    2022年10月8日
    0
  • IDEA激活成功教程后一直提示JetbrainsAgent 相关的弹框问题

    IDEA激活成功教程后一直提示JetbrainsAgent 相关的弹框问题激活成功教程后打开IDEA就弹框,关闭之后会自动打开浏览器,隔一会也会弹出来 也是一样的问题一开始是说把txt 和 jar 文件放一个路径下之类的方法,几经波折,发现没任何用处~最后各种搜索排查,在设置下更改配置就不弹啦~settings设置下搜索agent 取消”Instrumenting agent(requires debugger restart)”在 Reload classes after compilation:选择第一个 Always…

    2022年8月20日
    9
  • OPENGL 教程网站

    1.http://nehe.gamedev.net/这个是我觉得全世界最知名的OpenGL教程,而且有网友将其中48个教程翻译成了中文http://www.owlei.com/DancingWind/。Nehe教程最大的特点是提供了针对不同平台、不同编译器、不同语言的各种版本。你

    2022年4月8日
    52
  • 史上最全的工作流引擎 Activiti 学习教程(值得收藏)

    史上最全的工作流引擎 Activiti 学习教程(值得收藏)点击关注公众号,实用技术文章及时了解一、工作流介绍1.1概念工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。1.2工作流系统一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什么…

    2022年7月21日
    16
  • 【转AekdyCoin】求小于等于N的与N互质的数的和「建议收藏」

    【转AekdyCoin】求小于等于N的与N互质的数的和「建议收藏」话说我以前求这样的问题都是先求与N不互质的数,把N分解质因数,然后用容斥原理,今天看了大牛的博客,顿时觉得弱爆了。。。以下内容转大牛文章:ifgcd(n,i)=1thengcd(n,n-i)=1(1反证法:如果存在K!=1使gcd(n,n-i)=k,那么(n-i)%k==0而n%k=0那么必须保证i%k=0k是n的因子,如果i%k=0那么gcd(n,i)=k

    2022年7月23日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号