关于tcp连接中timewait的作用

关于tcp连接中timewait的作用今天简单的谈一下tcp连接中timewait的作用,如果没有timewait会发生什么呢?我们知道首先请求关闭连接的一方会存在timewait状态。首先我们来看一下tcp四次挥手的过程示意图:客户端首先发起FIN请求,所以客户端会进入time_wait状态。如果没有time_wait或者用户自己通过调整tcp_tw_recycle缩短了time_wait的时间会出现生什问题呢?

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

今天简单的谈一下tcp连接中timewait的作用,如果没有timewait会发生什么呢?

我们知道首先请求关闭连接的一方会存在timewait状态。

首先我们来看一下tcp四次挥手的过程示意图:

关于tcp连接中timewait的作用

客户端首先发起FIN请求,所以客户端会进入time_wait状态。

如果没有time_wait或者用户自己通过调整tcp_tw_recycle缩短了time_wait的时间会出现生什问题呢?

1.我们都知道的是time_wait太短或者取消,可能会使上一个连接延迟的数据包(关闭连接,但是没有关闭完全),所以延迟的数据包可能被新的连接收到,从而影响到新连接的数据。我们结合图示:

关于tcp连接中timewait的作用

我们看到哦上一个连接的3号数据包并不是丢失而是在网络传输过程中由于某种原因发生了延迟,由于tcp的重传机制,发送端重新发送了新的3号数据包给接收端,随后发送端和接收端开始了四次挥手,这是因为系统回收time_wait太快,导致time_wait时间太短,引得连接建立后,上个连接在网络中延迟的数据包被新的连接收到了,从而破坏了新的tcp连接的可靠性。

在linux中,time_wait时间定死了为1分钟,也就是2MSL,这个时间会保证延迟的数据包在网络中消失,也会保证没有丢失的数据包在这个时间内到达指定端,所以在这个时间这样据不会存在上一个连接的数据包被新的连接收到的情况了。

2.第二个作用是采用正常的time_wait机制会防止最后一个对FIN的ACK丢失,我们看下面这张图:

关于tcp连接中timewait的作用

当最后一个ACK丢失后,服务端一直处于last_ack状态,因为没有收到客户端的ACK所以服务端就会认为这个连接还是有效的,就可能继续给客户端发送消息,而且当该服务端收到新的连接请求时,由于服务端还在等待上个连接的ACK,这时由于它等待的seq值和新的请求的seq不符,所以客户端会发送rst请求重新连接,所以新的连接无法建立,最终报错终止。

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

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

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


相关推荐

  • Unity 如何减少DrawCall「建议收藏」

    Unity 如何减少DrawCall「建议收藏」阅读目录前言:看看优化需要从哪里着手?CPU的方面的优化:GPU的优化内存的优化回到目录前言:刚开始写这篇文章的时候选了一个很土的题目。。。《Unity3D优化全解析》。因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的余地就少了很多。但又觉得这块是不得不提的一个地方,平时见到很多人对此处也给予了忽略了事,需

    2022年9月19日
    1
  • 修改hosts文件时提示无权限的解决办法

    修改hosts文件时提示无权限的解决办法修改 hosts 文件时提示无权限的解决办法问题描述当我们安装一些软件时 有时需要去 windows system32 drivers etc 中修改 hosts 文件 若直接以记事本打开 修改内容后保存时会提示我们没有操作权限解决办法将 etc 文件夹中的 hosts 文件复制到本地 我这里是复制到了桌面 开始 目录 搜索 记事本 管理员方式打开在记事本菜单栏中选择 文件 打开 找到复制下来的 hosts 文件在记事本中对 hosts 内容进行修改 修改完成后点击 保存 将文件保存到另外的地

    2025年7月2日
    3
  • C++ offsetof

    C++ offsetof这是一个宏,用于计算类中某个成员的地址相对于类实例的偏移量在C++11中,要求这个类standard_layout基本用法是这样子的:#include<stdio.h>/*printf*/#include<stddef.h>/*offsetof*/structfoo{chara;ch…

    2022年8月22日
    3
  • 什么是WSDL_wsdl文件详解

    什么是WSDL_wsdl文件详解WSDL(网络服务描述语言,WebServicesDescriptionLanguage)是一门基于XML的语言,用于描述WebServices以及如何对它们进行访问。wsdl:definitionsname=”nmtoken”?targetNamespace=”uri”>importnamespace=”uri”location=”uri”/>*

    2025年8月10日
    2
  • 矩阵组合matlab,matlab中矩阵的所有组合[通俗易懂]

    这是一个更简单(原生)的解决方案,包含perms和meshgrid:N=size(A,1);X=perms(1:N);%#PermuationsofcolumnindicesY=meshgrid(1:N,1:factorial(N));%#Rowindicesidx=(X-1)*N+Y;…

    2022年4月17日
    79
  • mac配置vscodec语言环境_vscodejava环境变量配置

    mac配置vscodec语言环境_vscodejava环境变量配置登陆终端输入java-version查看java的版本输入java-verbose查看java的安装环境路径没有的话,自己去搜一下怎么安装java的jdk,记得选1.18版本安装路径在这里安装完jdk后,输入/usr/libexec/java_home-V查看jdk版本复习什么是JDKJavaDevelopmentKit开发工具包包含Java开发工具和JREjava开发工具:编译工具javac.exe,jar.exe打包工具等。JRE=JVM+javaS

    2022年10月3日
    4

发表回复

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

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