常见TCP参数

本文介绍了TCP参数中的关键设置,如ReceiveBufferSize、SendBufferSize、NoDelay、TTL、ReuseAddress和LingerState,及其对服务器连接的影响。特别讨论了服务器作为断开连接方进入TIME_WAIT状态的问题,指出在高并发场景下过多TIME_WAIT可能占用资源,并提示可能需要调整此状态的等待时间来优化服务器资源管理。

常见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值,以求快速释放资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值