首页 科普 资讯 养生 问答 找医院 相关问答
首页> 问答

TCP连接中TIME_WAIT状态的作用及优化

发布网友 发布时间:4小时前

我来回答

1个回答

热心网友 时间:4小时前

为什么需要TIME_WAIT状态?为什么TIME_WAIT的时长是2*MSL?原因1:防止连接关闭时四次挥手中的最后一次ACK丢失。TCP需要保证每一包数据都可靠的到达对端,包括正常连接状态下的业务数据报文,以及用于连接管理的握手、挥手报文,这其中在四次挥手中的最后一次ACK报文比较特殊,TIME_WAIT状态就是为了应对最后一条ACK丢失的情况。原因2:防止新连接收到旧链接的TCP报文。TCP使用四元组区分一个连接(源端口、目的端口、源IP、目的IP),如果新、旧连接的IP与端口号完全一致,则内核协议栈无法区分这两条连接。2*MSL的时间足以保证两个方向上的数据都被丢弃,使得原来连接的数据包在网络中都自然消失,再出现的数据包一定是新连接上产生的。

MSL(Maximum Segment Lifetime)报文最大生存时间在不同操作系统中的具体值:在Linux系统中,MSL = 60 s, 2 * MSL = 120 s,所以一条待关闭的TCP连接会在 TIME_WAIT状态等待 120秒(2分钟)。

TIME_WAIT对连接并发数的影响(TIME_WAIT过多的危害):当连接处于TIME_WAIT状态时仍会占用系统资源(fd、端口、内存),当系统的并发连接数很大时,过多的TIME_WAIT状态的连接会对系统的并发量造成影响。对于服务器的影响:由于服务器一般只需要监听一个固定的端口,所以服务器所能支持的最大并发出数的上限取决于系统套接字描述符fd的大小,以及服务器的内存大小。fd:Linux中一个进程所能打开的fd的最大数量默认为 1024 个,可通过 "ulimit -n (+指定数量)" 进行修改。Linux系统所能支持的fd最大值在 /proc/sys/fs/fd-max 文件中可以查看,系统当前的fd使用情况可以通过 /proc/sys/fs/fd-nr 查看。内存:假设每一个TCP连接需要开辟 “4k的接收缓冲区 + 4k的发送缓冲区 = 8k”,1W的并发连接需要80M内存,10W并发需要800M,100W并发需要8G内存。综上,服务器的并发数主要受限于系统内存的大小,当 TIME_WAIT 状态的连接过多时,会导致消耗的内存增加,这一点可以通过扩展服务器的内存来解决。

对于客户端的影响:客户端的并发数主要受限于端口数量。一种典型的场景是:高并发短连接。在这种场景下,客户端可能会消耗大量的端口,如果新建连接则需要使用另外的端口号,Linux系统的最大端口为65535,除去系统使用的端口号,假设网络进程可使用的端口有 6W个,由于TIME_WAIT状态下在 2*MSL(120秒)内无法再被使用,这就限制了客户端的连接速率为 60000 / 120秒 = 500 次/秒,这是一个非常低的并发率。

大量的TIME_WAIT连接同样会消耗客户端的内存,所以客户端的最大并发数取决于 端口号与内存 二者中的最小值。

优化TIME_WAIT的方法:方法1:修改内核参数 tcp_tw_reuse。注意: tcp_tw_reuse 内核参数只在调用 connect() 函数时起作用,所以只能用于客户端(主动连接的一端)。tcp_tw_reuse 的作用是:在调用connect()函数时,内核会随机找一个处于TIME_WAIT状态 超过1秒 的连接给新连接复用。(超时时间由 tcp_timestamp设置,默认为 1秒)。这种方式可以缩短 TIME_WAIT 的等待时间。方法2:修改内核参数 tcp_max_tw_buckets。net.ipv4.tcp_max_tw_buckets 参数的默认值为18000,当系统中处于 TIME_WAIT 状态的连接数量超过阈值,系统会将后面的TIME_WAIT连接重置。由于这种方法会直接重置连接,因此需要谨慎使用。方法3:设置套接字选项 SO_LINGER。SO_LINGER选项用于设置 调用close() 关闭TCP连接时的行为,注意 SO_LINGER选项会使用RST复位报文段取代 FIN-ACK四次挥手的过程,设置了SO_LINGER选项的一方在调用close() 时会直接发送一个RST,接收端收到后复位连接,不会回复任何响应。这样做的弊端是导致TCP缓冲区中的数据被丢弃。正常情况下,调用close后的缺省行为是:如果有待发送的数据残留在发送缓冲区中,内核协议栈将继续将这些数据发送给接收端后才关闭连接,走正常的四次挥手流程;设置SO_LINGER后,立即关闭连接,通过RST分组,发送缓冲区如果有未发送的数据,将会被丢弃,主动关闭的一方跳过TIME_WAIT状态,直接进入CLOSED(也跳过了FIN_WAIT_1 和 FIN_WAIT_2)。SO_LINGER的另一种更温和的实现方式是设置一个超时时间(so_linger.l_linger),而不是直接关闭。应用程序调用close后进入睡眠,内核协议栈负责发送缓冲中残留的待发送数据,如果在 l_linger 超时时间内发送完毕,则走正常的四次挥手流程;如果超时未发送完,则发送RST强制关闭连接,并丢弃发送缓冲区中其余的数据(接收端收到RST后也会丢弃接收缓冲区中的数据),并且发送端close()函数返回 EWOULDBLOCK。综上,如果只是单纯为了规避 TIME_WAIT 状态,使用 SO_LINGER并不是一个好主意,因为它会在调用close关闭连接时 使用RST强制关闭连接,这可能会导致 发送缓冲区、接收缓冲区 中还未处理完的数据被丢弃。方法4:设置套接字选项 SO_REUSEADDR。SO_REUSEADDR 选项用于通知内核:如果端口忙,并且端口对应的TCP连接状态为TIME_WAIT,则可以重用端口;如果端口忙,并且端口对应的TCP连接处于其他状态(非TIME_WAIT),则返回 “Address already in use” 的错误信息。设置SO_REUSEADDR的风险是可能会导致新连接上收到旧连接的数据(复用了旧连接的端口,导致新旧连接的四元组完全一致,内核协议栈无法区分这两个连接)。SO_REUSEADDR 选项并没像 tcp_tw_reuse 那样同时提供一个 tcp_timestamp 参数可以设置 TIME_WAIT的等待时长。综上,对TIME_WAIT状态的优化思路是尽量缩小等待时长,而不是暴力的直接关闭(可能会引起新连接收到旧连接数据的风险),也不要直接发送RST复位连接(可能会引起发送、接收缓冲区中的数据丢失),所以使用修改内核参数 tcp_tw_reuse 参数是最保险的方式,通过根据实际网络情况和应用场景适当的调节 tcp_timestamp 的值,可以达到缩小 TIME_WAIT 等待时长,进而减少系统中同一时刻处于 TIME_WAIT 状态的连接数量的目的。
艾灸多功能熏蒸仪可以治疗头晕吗 请问比亚迪秦在深圳摇号政策中是电动车还是普通小汽车? 请问比亚迪秦在深圳摇号中是电动车还是普通小汽车? 北京比亚迪秦可以不用摇号上牌吗 一个单位的毛囊只长一根头发吗 梦と现実歌词(中文+罗马音) そこで见る梦は现実以上の现実だとその研究者は主张していました。这... 暧昧だった梦と现実の 境界线は浓くなった 意思? ...保胎四天,后面还是放弃了,现在一共出血二十五天了,还有少量血... 自然流产后22天才没出血,过了12天又有血,是月经还是没流干净啊_百度知... 自然流产做了清宫九天了有几天没出血了怎么今天又出了点血请问这是怎 ... ...出血9天干净后查b超正常,又过五天又有少量出血是怎么回事 河南财经政法大学14级新生宿舍 增值税普通发票 软件开发 窗口开票 税率 多少? 佛 为何有神通 按键精灵脚本:下面这段程序怎么样在循环后跳出循环,就是找不到图片后... 按键精灵 游戏多开 试着写了一段代码 但是不知道哪里错了 按键精灵这一段是哪儿出错了? (高悬赏)按键精灵9里这段命令哪里错了,希望大神指出并修改。在线等 怎样把微信公共号放在微信界面上? 新衣服洗了就这样了,这要怎么洗掉啊 求解 求解这个衣服上的颜色怎么去掉啊,我这是消毒84染成这个颜色的 上面的小9个十字是怎么回事啊,怎么去除,求解… 衣服流汗后那些黑点怎么可以洗掉啊???求解 长沙科技大学算985还是211大学 煲汤可以中途加水吗蒸发的是水啊 天津市人民医院(关于天津市人民医院的基本详情介绍) VOB转AVI出现的黑边问题 vob格式转换成其他视频格式用什么软件? vob的视频怎么裁掉黑边 电脑如何强制关机(电脑如何强制关机重启) 得了带状疱疹,表面已经恢复好了,可是里面还是很痛,求怎么根治后遗症呢... ...已三十五天,疱疹已结痂,但是后遗神经痛,怎么治疗疼痛最快?_百度知 ... 熔火犬皮哪里有 我是射击LR熔火恶犬怎么抓不了啊! WOW,猎人的熔岩犬在哪抓,部落的,具体方法,具体位置,要红色的?_百度知 ... 《魔兽世界》盘点因为副本关闭而绝版的坐骑 想应聘药店的营业员,可是没药店经验的不用,我特别想有这样的工作怎么办... 网传李白的《逍遥记》虽非真作,倒也好玩。其中“棍鮕不堪摧烛风”何意... 三台到绵竹的班车每天几点从三台出发 奇骏万向节如何更换 万向有哪些 万向节工作原理 重大交通事故重新鉴定次数 事故责任认定有次数限制吗 事故责任认定是否有次数限制? 做梦梦到死了的舅舅我去追他什么意思? 做梦梦到死去的舅舅 ...字的,叫伟<~>什么的。。最后一个字要带火的谢谢了。。。 大家帮帮忙。求一个五字的诗句,有内涵的,要有现代色彩的。非主流... 服务端 TCP 连接的 TIME_WAIT 过多问题的分析与解决 普通人怎么才能考监理证需要什么条件 报考监理证条件 金茶花如何插扦 猫咪为什么会感染疥癣? 为什么有人可以秒回我的说说,他是用什么软件,还是什么东西求教_百度... 秒回的QQ聊天或其它聊天 朱野顺子朱野顺子-特点 女孩子js是什么意思 神经再造综合疗法概述 能拍4k60帧的3d相机 索尼a7r5拍4k60帧有裁切吗 BNT脑神经递质导融激活疗法疗法原理 BNT脑神经递质导融激活疗法疗法的六大特点 BN脑神经平衡介入疗法效果怎? ...事件要有时间在叙述一两句,就O了,寒假作业要交的 2011年天津各大高职院校 寒假的开学时间是什么时候 有一个就回答一个... [综恐]这什么鬼东西!/what the fuck ! 89 综恐 这什么鬼东西80 [综恐]这什么鬼东西!百度 TIME_WAIT 的原理和实践 彻底理解并解决服务器出现大量TIME_WAIT 聊一聊TCP协议的TIME_WAIT与性能优化 说说TIME_WAIT和CLOSE_WAIT区别 为什么我的word一打开就闪退了呢? ...一打开就提示“word 2003 已停止工作,找不到某某文件...”字样,求... ...WPS的时候打开方式那里找不到EXCEL,有WORD的就是没有EXCEL的... 胃病患者生活宜忌与调治内容简介 如何调养胃病? 辅食加盐宝宝真的会更有力气吗?会有哪些危害? ...以安全模式启动word是怎么回事。卸载重新安装还是不行。_百度... ...自动关闭的,这是怎么回事?帮忙解决下,谢谢! word2003无法打开打开后自动关闭是为什么? 我家的word2003打开时怎么会出现这种情况,然后就打开了,打开后又出现了... 健康管理师怎么报名/有什么条件/考试时间什么时候 (一步到胃)idea配置tomcat IDEA部署Tomcat(超详细) 物体整体应变和应变片贴的应变会差别很大吗 小米波轮洗衣机下水堵塞 学习基础差的孩子,父母应该怎么做?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com