栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux内核网络TIME

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux内核网络TIME

目录

四次挥手过程

出现的现象

如何查看信息

TIME_WAIT状态等待的时间 

TIME_WAIT 的作用

TIME_WAIT副作用

解决方法

1、将系统值(net.ipv4.tcp_max_tw_buckets)调小

2、调低TCP_TIMEWAIT_LEN

3、SO_LINGER

4、net.ipv4.tcp_tw_reuse

5、SO_REUSEADDR


四次挥手过程

        TCP 连接终止时,主机 1 先发送 FIN 报文,主机 2 进入 CLOSE_WAIT 状态,并发送一个 ACK 应答,同时,主机 2 通过 read 调用获得 EOF,并将此结果通知应用程序进行主动关闭操作,发送 FIN 报文。主机 1 在接收到 FIN 报文后发送 ACK 应答,此时主机 1 进入 TIME_WAIT 状态。

过了2MSL时间之后,主机 1 就进入 CLOSED 状态。

出现的现象

1、大量短连接存在TIME_WAIT

2、Too Many Open Files异常,服务崩溃等

如何查看信息
//查询 TCP 连接状态
netstat -nat |grep TIME_WAIT

//查看统计信息
$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 1254
TIME_WAIT 1640

TIME_WAIT状态等待的时间 
#define TCP_TIMEWAIT_LEN (60*HZ) 

MSL,Maximum Segment Lifetime,“报文最大生存时间”

TIME_WAIT 停留持续时间是固定的,一般称之为 2MSL。

进入时机:发送了第四次握手的ACK包后,就进入了TIME_WAIT状态。

必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个 ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后,可以再发一个ACK应答包。

在 TIME_WAIT 状态时,两端的端口不能使用,要等到2MSL时间结束,才可继续使用。(IP 层)

当连接处于2MSL等待阶段时,任何迟到的报文段都将被丢弃。

只有发起连接终止的一方会进入 TIME_WAIT 状态。


TIME_WAIT 的作用
  1. 确保对方能够正确收到最后的ACK,帮助其关闭
  2. 防迷走报文对程序带来的影响

TIME_WAIT副作用
  1. 第一是内存资源占用,比较小
  2. 端口资源占用,如果 TIME_WAIT 状态过多,会导致无法创建新连接。

解决方法

        让服务器能够快速回收和重用那些TIME_WAIT的资源

1、将系统值(net.ipv4.tcp_max_tw_buckets)调小

TIME_WAIT的连接一旦超过此值,系统将会对所有的TIME_WAIT连接状态重置。

tcp_max_tw_buckets - INTEGER
	Maximal number of timewait sockets held by system simultaneously.
	If this number is exceeded time-wait socket is immediately destroyed
	and warning is printed. This limit exists only to prevent
	simple DoS attacks, you _must_ not lower the limit artificially,
	but rather increase it (probably, after increasing installed memory),
	if network conditions require more than default value.

2、调低TCP_TIMEWAIT_LEN

        重新编译内核

3、SO_LINGER

        设置套接字选项

int setsockopt(int sockfd, int level, int optname, const void *optval,

        socklen_t optlen);

4、net.ipv4.tcp_tw_reuse
  •         可以复用处于 TIME_WAIT 的套接字为新的连接所用。
    •         适用于连接的发起方
      •         对应的TIME_WAIT状态的创建时间超过1s才可以被复用。

文档说明:

tcp_tw_reuse - INTEGER
	Enable reuse of TIME-WAIT sockets for new connections when it is
	safe from protocol viewpoint.
	0 - disable
	1 - global enable
	2 - enable for loopback traffic only
	It should not be changed without advice/request of technical
	experts.
	Default: 2

5、SO_REUSEADDR

setsockopt设置SO_REUSEADDR这个方法;是解决端口复用的问题,并不是解决TIME_WAIT,这个是告诉内核,即使TIME_WAIT状态的套接字,可以继续使用它做为新的套集字使用。

参考

https://course.0voice.com/v1/course/intro?courseId=2&agentId=0


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/964843.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号