TCP延迟确认定时器:
TCP延迟确认定时器是指在一个TCP连接中,当一方收到另一端的数据之后,并不是立马返回ACK进行确认。而是等待200ms(在linux-2.6.38内核实现中应该是40ms),如果这段时间内有新的数据要发往对方,本地将ACK和数据封装在一个数据包中一起发送,称作捎带确认机制。超时后即使没有新数据的话也要将ACK发给对方。
TCP延迟确认定时器是指在一个TCP连接中,当一方收到另一端的数据之后,并不是立马返回ACK进行确认。而是等待200ms(在linux-2.6.38内核实现中应该是40ms),如果这段时间内有新的数据要发往对方,本地将ACK和数据封装在一个数据包中一起发送,称作捎带确认机制。超时后即使没有新数据的话也要将ACK发给对方。
这样做的好处是减少了一次数据传输带来的消耗,但是在另一方面增加了延迟。可以通过设置快速确认模式关闭该定时器。
sock结构在初始化时将tcp_delack_timer注册为延迟确认定时器的处理函数。tcp_send_delayed_ack函数会启动延时确认定时器发送延迟ACK,主要的代码如下:
/* Stay within the limit we were given */
timeout = jiffies + ato; //超时时间根据ato设置
/* ...... */
icsk->icsk_ack.pending |= ICSK_ACK_SCHED | ICSK_ACK_TIMER; //设置ICSK_ACK_SCHED和ICSK_ACK_TIMER标志位
icsk->icsk_ack.timeout = timeout;
sk_reset_timer(sk, &icsk->icsk_delack_timer, timeout); //重设延迟确认定时器

TCP延迟确认机制旨在减少传输消耗,但可能导致延迟增加。在Linux内核中,tcp_delack_timer作为延迟确认定时器处理函数,通过tcp_send_delayed_ack启动,以发送延迟ACK。
最低0.47元/天 解锁文章
2683

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



