服务器端主动关闭连接, 产生的TIME_WAIT状态为啥会占用服务端大量端口
写回答…1. 对的。2. 并没有占用「端口」。3. 不会,除非你的客户端都在少数几个IP上(比如连接是通过应用层负载均衡进来的,这种情况下你干嘛不复用连接?)。TIME_WAIT 状态到底会占用什么?随意 Google 一下就可以得到答案:tcp - What is the cost of many TIME_WAIT on the server side?被占用的是一个五元组:(协议,本地IP,本地端口,远程IP,远程端口)。对于 Web 服务器,协议是 TCP,本地 IP 通常也只有一个,本地端口默认的 80 或者 443。只剩下远程 IP 和远程端口可以变了。如果远程 IP 是相同的话,就只有远程端口可以变了。这个只有几万个,所以当同一客户端向服务器建立了大量连接之后,会耗尽可用的五元组导致问题。
■网友
为什么高并发的短连接生成的TIME_WAIT会导致服务器端口不够用?只有主动关闭的一方才会进入TIME_WAIT状态,那这种情况也就是高并发连接都是服务端主动关闭。那么端口不够用就是文件描述符不够用了,因为文件描述符只有在从TIME_WAIT状态转换到CLOSE状态后才会真正被系统收回。TIME_WAIT状态会持续2MSL的时间才会转换到CLOSE状态,一般是1-4分钟。如果在这段时间内文件描述符都被用完了,而关闭的连接处于TIME_WAIT状态导致文件描述符并没有被真正释放,就会出现这种情况。
■网友
1.知道"套接字对(socket pair)"是啥咩? "返回并未占用服务器新的端口" 这句话是错的(或者说整句话都是错的)2.保留端口负责接收那些因为没有收到ack包而重发fin包的套接字 如果没有TIMEWAIT 指定端口在短时间内被重新分配给其他套接字 读着数据 写着数据 突然收到一个FIN包!(师爷你好 师爷再见)3.可以被分配的端口也就2~3W(有具体的数字 我就偷个懒不搜了) 不够用很奇怪么?这种问题搜下咩 一堆一堆的比我写的好的答案..
■网友
Cannot assign requested address.
一般就是五元组time_wait满了
■网友
服务器是不是代理,也就是说会作为client端请求其他服务器连接。如果是端口不够用,只能是作为client主动关闭了链接。值得check下。
■网友
涉及到两个数据结构,这里起个名字分别叫做npcb(假设有3
个,分别叫做npcb1,npcb2,npcb3)
和lpcb(假设有8个,从lpcb1到lpcb8)
。
比如来了一个新的连接,用了npcb1,比如这个npcb1的端口存在了lpcb1里。
此时有个假设,连接存在的时间(比如发送了一个很小的文件,比如花费1分钟)远小于2msl(比如花费20分钟)。
这种情况下只能连续发送8个文件。第九个文件要等到某个lpcb从timewait变为closed才能开始传输。也就是从第8个文件发送完成后12分钟才开始传输第9个文件。
理解的关键在于 npcb即便在timewait也能再次被使用。而lpcb只有变为closed后才能被使用。
【服务器端主动关闭连接, 产生的TIME_WAIT状态为啥会占用服务端大量端口】
推荐阅读
- 大连:发生阳性感染者街道已全部关闭室内休闲娱乐场所
- 电信主动上门维修是咋回事
- |高颜值低油耗,标配主动刹车!这台日系车不输迈腾和雅阁!
- 想做手机网游代充,请问要去哪里找货源
- “我把我爸爸杀死了!”深夜,杭州一男子主动投案
- 双11阿里云搞活动,买了一个ecs云服务器,能做啥呢
- 基因是主动表达还是受某种场的影响被动表达,又或两者都有有没有隔绝所有电磁场来研究基因表达的实验
- 为啥腾讯要关闭ios端的赞赏,而不是将支付费用直接乘以1.43倍
- 趣头条|将消费者放首位,威马起火主动召回态度引好评
- 让一个网游(或手游)连接自己的服务器或pc
