TCP关闭问题详细介绍

作者:lqh 时间:2022-07-26 16:58:02 

摘要: 三次握手,四次挥手

意思是tcp建立连接时需要三次交互来完成,A发起连接


A ---  SYN  --> B
A <-- SYN + ACK --- B (1)
A ---  ACK  --> B

而关闭tcp连接需要四次交互,A发起关闭


A --- FIN --> B
A <-- ACK --- B (1)
A <-- FIN --- B
A --- ACK --> B (2)

这里在(1)时B开始处于CLOSE_WAIT状态,一直到收到ACK后B才转为CLOSED ,而A就处于TIME_WAIT状态,一直到2MSL(Max Segament Lifetime)才转为CLOSED

为什么需要2MSL才真正转为CLOSED?是因为需要缓冲时间万一B丢失ACK重发FIN的话还可以回复ACK,还有就是2MSL后“迷失”在网络上的包全部失效

大量的 TIME_WAIT 和 CLOSE_WAIT 会造成服务器的连接资源被浪费甚至占满后导致服务器服务拒绝,怎么解决?

解决TIME_WAIT


net.ipv4.tcp_tw_recycle = 1 #开启快速回收,默认0

net.ipv4.tcp_tw_reuse = 1 #开启重用,默认0

net.ipv4.tcp_fin_timeout = 30 # 减小fin_timeout,默认60,单位s

系统参数的配置可以解决time_wait,但是close_wait就没那么简单了

解决CLOSE_WAIT

一般都是服务端的代码问题。

绝大多数都是客户端发起关闭,这样可知HTTP服务器应该会有很多TIME_WAIT,不过当http使用keep-alive后服务端会主动断连。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

来源:https://my.oschina.net/alexqdjay/blog/803993

标签:TCP,关闭
0
投稿

猜你喜欢

  • 在Pycharm中对代码进行注释和缩进的方法详解

    2023-09-27 23:55:26
  • Python下的常用下载安装工具pip的安装方法

    2021-08-31 05:05:35
  • Oracle 随机数

    2009-06-04 10:01:00
  • Python的Django框架中的select_related函数对QuerySet 查询的优化

    2022-09-02 06:06:46
  • python频繁写入文件时提速的方法

    2023-11-11 01:48:40
  • 在Linux下安装Oracle

    2010-07-30 12:46:00
  • pygame画点线方法详解

    2023-04-17 16:36:23
  • mac系统安装Python3初体验

    2023-11-27 07:33:16
  • JavaScript 图片变换效果(ie only)

    2010-01-20 12:40:00
  • Python常见库matplotlib学习笔记之多个子图绘图

    2023-02-17 19:40:14
  • 一文读懂Python 枚举

    2023-02-16 16:12:46
  • 设计角色的分工和配合

    2008-10-20 12:08:00
  • python判断完全平方数的方法

    2023-07-12 06:43:13
  • js自定义网页右键菜单方法

    2007-11-28 12:50:00
  • 简单了解Python字典copy与赋值的区别

    2022-07-16 11:35:52
  • python 异常的传递性及主动抛出学习

    2021-03-19 05:02:38
  • Python开发.exe小工具的详细步骤

    2021-07-11 10:49:30
  • Python爬虫简单运用爬取代理IP的实现

    2021-08-25 23:26:42
  • 如何给Python代码进行加密

    2021-08-24 16:24:30
  • python-opencv在有噪音的情况下提取图像的轮廓实例

    2023-01-10 08:48:36
  • asp之家 网络编程 m.aspxhome.com