短连接怎么编程(短接怎么操作软件有哪些)


1.time_wait状态存在的理由

a.可靠地实现tcp全双工连接的终止,在进行关闭连接四次挥手协议时,最后的ack是由主动关闭端发出的,如果这个最终的ack丢失服务器将重发最终的fin,因此客户端必须维护状态信息允许它重发最终的ack,如果不维持这个状态信息,那么客户端将响应rst分节,服务器将此分节解释成一个错误,因而要实现tcp全双工连接的正常终止,必须处理终止序列四个分节中任何一个分节丢失的情况,主动关闭的客户端必须维持状态信息进入time_wait状态。

b.允许老的重复分节在网络中消失,tcp分节可能由于路由器异常而迷途,在迷途期间,tcp发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后也会被送到最终的目的地,这个原来迷途的分节就称为lost duplicate。在关闭一个tcp连接后,马上又重新建立起一个相同的ip地址和端口之间的tcp连接,后一个连接被称为前一个连接的化身,那么有可能出现这种情况,前一个连接的迷途重复分组在前一个连接终止后出现,从而被误解成从属于新的化身。为了避免这个情况,tcp不允许处于time_wait状态的连接启动一个新的化身,因此time_wait状态维持连续2MSL,就可以保证当建立一个tcp连接的时候,来自连接先前化身的重复分组已经在网络中消失。

2.大量time_wait造成的影响

在高并发短连接的tcp服务器上,当服务器处理完请求后立刻主动正常关闭连接,这个场景下会出现大量socket处于time_wait状态,如果客户端的并发量持续很高,此时部分客户端就会显示连接不上。主动正常关闭tcp连接,都会出现time_wait。

为什么我们要关注这个高并发短连接呢,有两个方面需要注意。

1.高并发可以让服务器在短时间范围内同时占用大量端口,而端口有个0~35535的范围,并不是很多。

2.在这个场景下,短连接表示 业务处理+传输数据的时间 远远小于time_wait超时的时间

总结:长连接不需要考虑time_wait状态,持续的到达一定量的高并发短连接,会使服务器因端口资源不足而拒绝为一部分客户服务,同时这些端口都是服务器临时分配的,无法用so_reuseaddr选项解决这个问题。

关于time_wait的反思:

存在即合理,既然tcp协议能盛行四十多年就证明它的设计合理性,所以我们尽可能的使用其原本功能依靠time_wait状态来保证我的服务器程序健壮,服务功能正常。可以采用负载均衡来抗衡高并发的短请求。

如何尽量处理time_wait过多?简单来说就是打开系统的time_wait重用和快速回收

编辑内核文件 /etc/sysctl.conf加入以下内容
net.ipv4.tcp_syncookies = 1 //表示开启syn cookies 当出现syn等待对列溢出时,启用cookies来处理
net.ipv4.tcp_tw_reuse = 1//表示开启重用 允许time_wait sockets重新用于新的tcp连接
net.ipv4.tcp_tw_recycle=1//表示开启tcp连接中time_wait socket的快速回收
net.ipv4.tcp_fin_timeout=1 //修改系统默认的timeout时间
socket编程【time_wait】
文案策划

秦志强:利用文案策划在家兼职年赚50万+的秘密>>>>
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ15101117,本站将立刻清除。