gpt4 book ai didi

sockets - TCP如何实现/保证数据的有序传输?

转载 作者:可可西里 更新时间:2023-11-01 02:30:27 24 4
gpt4 key购买 nike

我想知道 TCP 究竟是如何实现按顺序交付的。

假设这是事件列表

  1. 数据包 1 已发送,确认已收到。
  2. 数据包 2 已发送,确认未收到。
  3. 数据包 3 已发送。
  4. 数据包 4 已发送。
  5. 收到 ack4。
  6. 收到 ack3。
  7. 收到ack2。

你能给我描述一下到底发生了什么吗?

最佳答案

简短的回答是每个数据包都包含偏移量信息(伪装成序列号),指定其有效载荷在流中的位置。

假设发生了以下情况:收到数据包 1,未收到数据包 2,收到数据包 3 和 4。此时接收 TCP 堆栈知道将数据包 3 和 4 的内容复制到缓冲区的什么位置,并且它知道它仍然没有收到先前的数据,因此它会让数据包 1 的数据可供读取,但它不会在收到数据包 2 之前,数据包 3 或 4 数据可用。

传输 TCP 堆栈通常不会在发送下一个数据包之前等待对任何单个数据包的确认,但如果它没有收到对给定数据包的确认(并且 ACK 可以并且被捆绑在一个数据包中以提高效率) ,它将重新传输它直到收到 ACK。

事件的确切顺序取决于网络条件、TCP 堆栈实现、选择的 TCP 策略、套接字选项和其他因素。

关于sockets - TCP如何实现/保证数据的有序传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com