- 论坛徽章:
- 0
|
回复 1# Huntsmen
我觉得解释的比较明白了吧.
14是对12的确认,12延迟大的原因可能是服务器比较忙,产生了delayed ack,所以只是一个ack报文,单很快又响应了一个数据报文13,可以看到client收到13和12的间隔只有0.0002秒。虽然在14发送之前收到了13,这个时候14已经组装好了(14是在收到12之后就准备组装发送的,恰好发送之前收到了13),所以先发送14,然后通过15再对刚收到的13进行确认,同时发送后续字节。在这里必须有一个对12进行确认的过程,即使你在收到13之后取消了14的发送,最终还是要发送新的14进行确认,与其这样何不按照上述直接发送呢,所以以上的处理是合理的。
因此14,15是和上一个会话关联的,不能只看14,15的关系,对14,15的确认(再加上17)在下面的16,18中体现。你可以再往后看看,16,18没有完全确认收到的字节数为3(14,15,17一共发送了3+1+3共7个字节,16,18只确认了3+1共4个字节,还有3个未确认),对于未确认的字节,最终体现在18响应的window size大小中,可以看到这个时候的window为8189,比最大值8192小3个字节,这就是上面那3个未确认的字节。
其实不是client不按标准的标准的Nagle进行一问一答,而是server由于本身的原因没有正常应答,client这种处理保证了最高的传输效率,试想你不对12确认,那么server是不是要再重传一次呢?或者你在14之后不发15,那么server的13是不是需要重传一次呢?所以针对12,13这中模式,必然存在14,15这种应答机制。 |
|