常见TCP参数
一、ReceiveBufferSize
指定操作系统读缓冲区大小
二、SendBufferSize
指定操作系统写缓冲区大小
三、NoDelay
是否采用Nagle算法发送数据、TCP默认会使用Nagle算法,socket.NoDelay=true;则可以关闭Nagle算法,保证数据发送的实时性,同时也失去了Nagle带来的流量节省
四、TTL(Time To Live)
TTL是IP头部的一个值,该值表示一个IP数据报能经过的最大的路由跳数,当数据报经过TTL个路由还没被接收时就会被丢弃,避免路由浪费
五、ReuseAddress
Sokcet socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.TCP);
socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress.true);
尽管端口复用能解决服务端立即重启的问题,但它存在安全隐患。主动关闭方有可能在下次使用时收到上一次连接的数据包,包括关闭连接响应包或者正常通信的数据包,有可能会出现奇怪的现象。
六、LingerState
socket.LingerState=new LingerOption(true,10);
其中 LingerOption包含两个参数
1、LingerState.Enabled代表是否启动LingerState
2、LingerState.LingerTime,指定超时时间,在超时时间内会尝试发送数据,如果发送时间超过了超时时间,操作系统还是会强制关闭链接。==如果LingerTime设置为0,则会不断尝试发送,直至发送完毕才会关闭连接。
服务器作为断开连接方会进入TIME_WAIT的问题
断开连接的一方会进入TIME_WAIT状态,服务端断开连接的情况也同理。一般情况下,当服务端判断客户端发来的数据包不合法时,它会主动断开与客户端的连接。比如玩家的旋转角度值取值范围是0~360°,如果客户端发送一个不在此范围内的数据,很有可能是数据错乱或者客户端作弊,服务端会调用Close断开连接。服务端进入TIME_WAIT状态后,会等待一段时间再释放资源(Windows下默认为4分钟)。对于高并发的服务端,过多的TIME_WAIT会占用系统资源,不是一件好事。有时候需要减小服务器的TIME_WAIT值,以求快速释放资源。
本文介绍了TCP参数中的关键设置,如ReceiveBufferSize、SendBufferSize、NoDelay、TTL、ReuseAddress和LingerState,及其对服务器连接的影响。特别讨论了服务器作为断开连接方进入TIME_WAIT状态的问题,指出在高并发场景下过多TIME_WAIT可能占用资源,并提示可能需要调整此状态的等待时间来优化服务器资源管理。


被折叠的 条评论
为什么被折叠?



