电子书链接: TCP/IP illustrated Volume 1: 19. TCP Interactive Data Flow
我们注意到的第一个更改是所有3个字节在准备就绪时发送(段1,2和3)。没有延迟 - Nagle算法已被禁用。
我们在tcpdump输出(段4)中看到的下一个数据包包含来自服务器的带有ACK 4的字节5.这是错误的。客户端立即响应ACK 2(它没有被延迟),而不是ACK 6,因为它不期望字节5到达。看来数据段丢失了。我们用图19.8中的虚线显示了这一点。
我们如何知道这个丢失的段包含字节2,3和4以及ACK 3?我们期望的下一个字节是字节编号2,如段5所公布的。(每当TCP接收到超出下一个预期序列号的无序数据时,它通常会响应一个确认,指定下一个字节的序列号)期望收到。)此外,由于缺少的段包含字节2,3和4,这意味着服务器必须已收到段2,因此丢失的段必须指定ACK 3 (序列服务器期望接收的下一个字节的数量。)最后,注意重传段6包含来自丢失段和段4的数据。这称为重新包装,
作者让我感到困惑,来自服务器(vangogh.login)的ACK 2在哪里? 我认为该语句应该是“这意味着服务器必须已经收到了段1,所以丢失的段必须指定了ACK 2”
答案 0 :(得分:0)
首先,slip期望从vangogh.login获取第二个字节,但它得到第5个字节;
其次,我们可以得出结论,从vangogh.login到slip的传输中丢失了第2,第3,第4个字节;
第三个,第二个,第三个字节被转移形式的段1()通过slip发送,第4个字节被转移为段2,而段1,段2被vangogh.login接收。
第四,所以缺失的段必须根据段2(2:3(1))指定ACK 3.