首页 > 解决方案 > 为什么要重新传输整个 TCP/UDP 数据包而不是丢失数据

问题描述

所以,这可能是一个愚蠢的问题,但据我了解,如果我通过 TCP 或 UDP 发送数据,如果构成该 TCP/UDP 数据包的任何一个 IP 数据包被丢弃,则重新传输整个 TCP/UDP 数据包,但我的问题是为什么我们不能只发送丢失的部分数据。目前,我这样做的唯一理由是,如果我们要为收到的每个 IP 数据包发送一个 ACK​​,这会增加网络拥塞。这是正确的还是有其他原因,当只有一个或几个 IP 数据包被丢弃时,我们必须重新发送 TCP/UDP 数据包中的所有数据?

标签: networkingtcpudprouterpacket

解决方案


IP 分段和重组对上层透明地发生:上层没有意识到这一点。此外,TCP 的传输不一定是 IP。

TCP 堆栈跟踪 TCP 段的分派和重传。每个 TCP 段都有一个序列号。TCP 堆栈跟踪 TCP 序列号,并且只能重新传输整个 TCP 段。

如果一个 TCP 段被分片成多个 IP 数据报,TCP 堆栈不会意识到这一点,并且分片可能发生在中间跃点上。但是,通常不会发生 TCP 分段分段,因为 TCP 专门遵守MTU /MSS 以避免IP 级别的 TCP 分段分段


推荐阅读