计算机网络的一些不明白的地方
题主对 ACK 的意义可能有些偏差。 ACK x,意义是 x 之前的数据都已经收到了。你要注意的是,作为接收方,你没有上帝视角,你是无法知道,一个分段到底是丢了,还是只是会稍微晚些到。这个非常好理解,比如你上淘宝剁了两次手,结果后买的东西先送到了,这个时候你是无法判断先买的那个包裹只是送得慢,还是已经丢失了。
我们从接收者的角度来看,假设前 80 字节已经全部接收完毕,那么我就会发送 ACK 80。这个时候,突然收到了一个序号为 120 长度为 40 的分段。此时,由于 [80, 120) 这个区间内的数据还没收到,因此我会继续等待。反过来从发送者角度来看,我发出了 [80, 120) 和 [120,160),但是一直没有收到对方回复,等到超过一定忍耐限度的时候,我就会重发这两个分段。 如果接受者接到了,就会立刻 ACK 160,这样通信就能正常继续下去了。
另外,为了获得较佳性能,收方不一定要对每一个分段都发送 ACK,可以“攒”几个分段,然后一次性 ACK 掉,这样可以节省发包数量。同时,像题主提到的这个情况,[80, 120) 还没来,[120, 160) 却先来了,那么收方是可以在稍等一小段时间,如果还没见到 [80, 120),可以立刻发送 ACK 80;这样发方会连续收到两个 ACK 80,就会意识到发生了丢包,于是不等己方定时器超时,就立刻重传 [80, 120) (当然有的时候按照策略,也可能把 [120, 160) 也一起重传了)——这个就是快速重传。
【计算机网络的一些不明白的地方】 说一些题外话:事实上,TCP 为了提高性能,在不违背协议本身的规定的时候,不同的实现可以对诸如“发送分段的时机”、“容忍最多有多少分段没有被确认”、“发送确认的时机”等等作出不同的优化策略。这个就是“拥塞控制算法”。
推荐阅读
- 吉娜·爱丽丝|网友偶遇吉娜逛街不见郎朗,衣着随意似路人,6月孕肚不明显
- 关于人工智能虚拟人的一些问题
- 售假|跨越4省抓捕6人!泰州警方捣毁一售假团伙
- 济南易途和青岛的思途各方面比较哪个更好一些
- 有谁知道关于 厂子里的一些信息 或介绍一些只有进了厂子才能知道的经历
- 有啥搜索引擎可以替代Google(外语)
- 衰老|身体各器官衰老时间表!如果能及早预防,衰老就会来得慢一些
- “刷单炒信”扰乱市场 刷出来的店真值得去吗?
- 花椒|厨房常见1物,或是“祛湿高手”,泡脚水里放一些,止痒又助眠
- VR电影的创作能否用人的注意力幻象去解决一些关于焦点的理论问题类似变魔术,误导关注点但别的信息在变
