通过 TCP 和进度指示器发送大数据

通过 TCP 和进度指示器发送大数据

据我了解,当您打开 TCP 连接来发送数据时,接收端的 TCP 层会保留所有数据包,直到传输完成,然后将所有数据发送给应用程序。

来自 wikipedia 上关于 tcp 的内容:

由于网络拥塞、流量负载平衡或其他不可预测的网络行为,IP 数据包可能会丢失、重复或无序传送。TCP 会检测这些问题,请求重新传输丢失的数据,重新排列无序数据,甚至帮助最大限度地减少网络拥塞以减少其他问题的发生。一旦 TCP 接收器重新组装了最初传输的八位字节序列,它就会将它们传递给接收应用程序。因此,TCP 从底层网络细节中抽象出了应用程序的通信。

但是,当您下载大文件时,浏览器会跟踪,知道已发送了多少数据,知道传输的速度有多快等等。如果传输尚未完成并且因此尚未传递给接收应用程序,它如何知道所有这些?

我在这里遗漏了什么?

答案1

您忽略的是,这并不要求在将数据传递给接收应用程序之前接收所有数据。它只是要求它重新组合到目前为止的数据序列。

换句话说,如果它丢失了一个段或者一个段损坏了,它将请求重新传输该段并等待接收它然后再传递数据。

简单来说,假设我的计算机请求的数据将以 10 个段的形式到达。它接收的段如下:1、2、3、5、6、7、4、8、10。

当它接收到这些段时,它可以直接将 1-3 传递给应用程序。由于 4 是乱序的,它必须等待 5-7 直到它也接收到 4。然后它可以传递 8,但它不会收到 9(或已损坏),因此必须等待 10 直到它可以请求重新传输段 9 并也接收到它。

相关内容