传输控制协议 (TCP) 混乱

传输控制协议 (TCP) 混乱

我对 TCP 的实际工作方式感到困惑。我在几本书和文章中读到,TCP 负责在接收主机上重新排列传输的数据报。但是,我一直在阅读 RFC 793,却找不到这样的规范。另一方面,RFC 791(Internet 协议)明确指出,Internet 协议负责在接收主机上重新排列发送的数据包。有什么帮助吗?谢谢!

答案1

从 IP 的角度来看,数据包是单个数据单元。它在穿过具有不同 MTU(最大传输单元)的设备时可能会被分割成碎片,并负责在另一端将这些碎片重新组合在一起。因此,一个 1500 字节的数据包在穿过具有 300 MTU 的网络部分时可能会被分割成 5 个碎片,然后在另一端重新构建该数据包。

另一方面,TCP 处理由任意数量的 IP 数据包组成的数据流。因此,TCP 有责任确保 1) 数据流中数据包的顺序正确(当传递到下一层时),以及 2) 它们全部通过 - 否则指示错误

因此它们都负责各自层内的数据序列。

但是每个 ISO 层都不了解上层。因此,IP 根本无法按照 TCP 的正确顺序重新排列数据包 - TCP 期望数据包所处的顺序对 IP 毫无意义。同样,TCP 无法确保 HTTP 调用配置正确,以太网也无法知道 IP 数据包的寻址正确。

答案2

最重要的是,IP 协议不知道您的数据顺序如何。IP 数据包是彼此无关的独立实体。IP 协议的唯一职责是将数据包从 A 点传送到 B 点。它可以处理由于传输过程中的 MTU 小于发送方而发生的数据包碎片,并在接收方将碎片重新组合在一起,但它没有工具来对您的数据进行排序。

TCP 是与 IP 协议合作的协议。TCP 协议提供 TCP/IP 套件中所谓的传输层。传输层由 TCP 和 UDP 协议组成。TCP 提供通过 IP 发送的状态和交付确认数据包。UDP 是无状态的,实际上只提供 IP 地址到端口号的轻量级映射,它在流媒体应用程序或快速和小巧比可靠性更重要的场合得到广泛使用。

TCP 提供了一些关键功能,可确保您收到所有数据包。一旦两个客户端建立 TCP 连接,它们之间发送的每个数据包都会根据序列号和数据包长度在到达时进行记录。这是通过滑动窗口数据传输和确认系统

该系统的关键在于,接收方发出的每个确认数据包仅确认从发送方连续收到的最后一个数据包。因此,如果数据包 1、2 和 4 到达发送方,它们将从 IP 传递到 TCP,无需任何处理。但是,TCP 将仅确认收到最多 2 个数据包(隐式地包括 1 个数据包),因为它可以根据序列号和数据包长度判断应该有一个 3 个数据包。

根据发送系统中 TCP 的实现,再次发送数据包 3 和 4,以确保它们被接收。重新发送之前的时间基于计算机上 TCP 实现中内置的计时,并且可以根据网络速度和链路性能而变化。随着时间的推移,如果链路不可靠,则在没有确认先前数据包的情况下发送的数据包数量将变得越来越少。

再说一遍,底线是,IP 不知道你的数据包属于什么顺序。我只知道如何将数据包从这里传到那里。

相关内容