Nagle算法和延迟ACK

Nagle算法

是为了减少广域网上的小分组的数目,从而减少网络拥塞的出现。
该算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组ACK到达之前不能发送其他的小分组,tcp需要收集这些少量的分组,并在ack到来时以一个分组的方式发送出去,其中小分组的定义是小于MSS的任何分组。

该算法的优越之处在于它是自适应的,确认到达的越快,数据也就发哦送的越快;而在希望减少微小分组数目的低速广域网上,则会发送更少的分组;

延迟ACK

如果TCP对于每个数据包都发送一个ack确认,那么只是一个单独的数据包为了发送一个ACK代价比较高,所以TCP会延迟一段时间,如果这段时间有数据发送到对端,则捎带发送ACK,如果在延迟定时器出发的时候发现ACK尚未发送,则立即单独发送。
延迟ACK的好处:
(1)避免糊涂窗口综合征
(2)发送数据的时候将ACK捎带发送,不必单独发送ACK
(3)如果延迟时间内有多个数据段到达,那么允许协议栈发送一个ACK确认多个报文段

  1. 关闭Nagle算法:

使用TCP套接字选项TCP_NODELAY可以关闭套接字选项;

如下场景考虑关闭Nagle算法:

(1) 对端不向本端发送数据,并且对延时比较敏感的操作;这种操作没法捎带ack;

(2) 如上写-写-读操作;对于此种情况,优先使用其他方式,而不是关闭Nagle算法:

–使用writev,而不是两次调用write,单个writev调用会使tcp输出一次而不是两次,只产生一个tcp分节,这是首选方法;

–把两次写操作的数据复制到单个缓冲区,然后对缓冲区调用一次write;

–关闭Nagle算法,调用write两次;有损于网络,通常不考虑;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值