TCP/IP的TCP调优优化

本文探讨TCP/IP的TCP调优,主要介绍Nagle算法和Delayed ACK的作用与冲突,以及如何通过调整Socket选项来优化。在非交互式场景中,关闭TCP_NODELAY可提高吞吐量;而在高度交互场景中,开启TCP_NODELAY能降低延迟,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 优化目标

降低网络拥塞。总是有效吗?并不是,它们有特定的使用场景。

2 Nagle算法和Delayed ACK算法

在TCP/IP协议中,每一个报文都是由报文头(header)和报文体(payload)组成。就像我们网上买的书到了,书是装在一个袋子里,然后会贴一个标签,上面包含了一些关键信息,比如:发件人姓名、发件人电话、发件人地址、收件人姓名、收件人电话、收件人地址、物品简介。这里书类似报文体,标签上的关键信息类似报文头。

如果一个报文的报文体尺寸非常小,甚至比报文头还小,没有有效利用带宽,在网络流量很大是,这种报文会给网络带来更多的负担。比如你在同一家网店买30本书,如果分为30个快递邮寄给你,那么店家会下单30次,快递员会分拣送货30次,你也会拆30次快递,整个流程就会很低效,快递成本也会增加很多。因此最好将这30本书合并为一个快递邮寄给你。TCP报文头最多可占用40 Byte,每次只发送1 Byte的数据的程序是很常见的。如果系统立刻发送这种报文,那么一个报文总共有41 Byte,但是只有1 Byte是应用要发送的数据。我们的卡车本次只运输了一双拖鞋,这太低效了,会增加交通拥堵。发送报文时,Nagle算法会合并同一TCP流中的多个报文,保证合并后报文的报文头与报文体的比例处于合理范围,提高带宽利用效率,降低网络拥塞。Nagle算法延迟了报文的发送,增加了延迟,对于一些强调交互的场景,会降低用户体验。

延迟ACK(Delayed ACK) 是降低拥塞的另一种方案。在TCP协议中,报文接收方会对收到的每个bit发送确认,就像我们在淘宝上确认收货一样,发送方才会继续发送后续的报文。如下图,ACK报文只有报文头,报文体为0 Byte,如果报文特别多,频繁进行确认,大量的ACK报文占用了带宽,造成网络拥塞。延迟ACK的策略就是设置一个定时器(200~500ms),延迟ACK收到的报文,待定时器超时后对这些报文一次性进行批量ACK。有缺点,有些场景下会增加程序网络延迟,比如这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值