TCP/IP 第19章 TCP的交互数据流

本文探讨了TCP通信中交互数据的高效管理策略,通过Nagle算法等手段减少网络负载,提升数据传输效率。

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

第19章 TCP的交互数据流

一些有关TCP通信量的研究如发现,如果按照分组数量计算,约有一半的TCP报文段包含成块数据,另一半则包含交互数据。如果按字节计算,则成块数据与交互数据的比例约为90%和10%。换句话说,交互数据,字节少,但是却很耗网络负载,采用哪些手段可以减少交互数据所耗负载呢。

从上面两图可以看出,正常来讲,一个指令发出,然后确认,回显,再确认,需要四条消息,但往往确认和回显会放到一起,并且,ack往往会有一定延时,如果有数据要发送,则可以喝数据一起放到一条消息中,减少网络负载。
上面说所的方法就是ack尽量延时发送(当然这里有个200ms的定时器,定时器溢出,则直接发送ack),尽可能的捎带数据过去,省时省力。

Nagle算法:该算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。相反,TCP收集这些少量的分组,并在确认到来时以一个分组的方式发出去。该算法的优越之处在于它是自适应的,确认到达得越快,数据也就发送得越快。而在希望减少微小分组数目的低速广域网上,则会发送更少的分组。简单点说,就是确认到达之前,这边不发送下一分组数据,并且,积攒将要发送的分组,一旦确认来了,则将积攒的分组一次发送出去,减少网络负载。如下图所示,不像以往那样,一次仅发一个字节,而是多个字节一齐发送,并且很少有仅发送一个ack的情况。



一个例子:下图一个是是使用nagle算法,一个是不使用nagle算法,可以看出使用nagle算法,数据发送序列很规整,同时网络利用率高,没有重传,而不使用nagle算法的,则不等待对方对上一个数据的确认,有数据则发送,虽然发送数据快,但是一旦对端未及时处理数据或网络丢包,还要重传,反而降低网络利用率。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值