networking - 为什么要重新传输整个 TCP/UDP 数据包而不是丢失数据
问题描述
所以,这可能是一个愚蠢的问题,但据我了解,如果我通过 TCP 或 UDP 发送数据,如果构成该 TCP/UDP 数据包的任何一个 IP 数据包被丢弃,则重新传输整个 TCP/UDP 数据包,但我的问题是为什么我们不能只发送丢失的部分数据。目前,我这样做的唯一理由是,如果我们要为收到的每个 IP 数据包发送一个 ACK,这会增加网络拥塞。这是正确的还是有其他原因,当只有一个或几个 IP 数据包被丢弃时,我们必须重新发送 TCP/UDP 数据包中的所有数据?
解决方案
IP 分段和重组对上层透明地发生:上层没有意识到这一点。此外,TCP 的传输不一定是 IP。
TCP 堆栈跟踪 TCP 段的分派和重传。每个 TCP 段都有一个序列号。TCP 堆栈跟踪 TCP 序列号,并且只能重新传输整个 TCP 段。
如果一个 TCP 段被分片成多个 IP 数据报,TCP 堆栈不会意识到这一点,并且分片可能发生在中间跃点上。但是,通常不会发生 TCP 分段分段,因为 TCP 专门遵守MTU /MSS 以避免IP 级别的 TCP 分段分段。
推荐阅读
- json - React + Next js:组件中的交叉 json 值
- ios - AVAudioSequencer - 如何在播放结束时收到通知
- javascript - 如何将值返回到另一个 Vue 文件的脚本中?或者如何将返回值发送到另一个 Vue 文件中?
- ios - Firestore 在文档中的数组中搜索字符串
- node.js - 水平可扩展游戏状态nodejs
- python - Python - elif 语法错误 - 这有什么问题?
- flutter - Flutter:删除所有 SnackBar
- javascript - 使用 Google Apps 脚本隐藏行
- spring-boot - 无法让 Netbeans 项目承认现有的 Tomcat 或 Glassfish 服务器
- laravel-6 - Backpack 4.0 基础配置密钥“密码”