TCP是否可以接受乱序段?

网络工程 IPv4 tcp IPv6 IP地址 传输协议
2022-02-11 03:51:08

TCP是面向连接的协议,而IP不是面向连接的协议。在发送到传输层排序操作之前的任何数据包都必须在网络层完成。这就是为什么我们通过 TCP 在传输层获得有序数据包的原因。每当在 TCP 流控制中,一些数据包可能会丢失,并且有可能出现乱序交付。但我们总是得到有序的确认。我的问题是数据包丢失是TCP无连接的唯一原因吗?我正在努力理解这个概念。

2个回答

我仍然不完全理解这个问题,因此指出误解的来源。但是,这是否澄清了事情?

在此处输入图像描述

请注意,TCP 是基于流的,即在发送方(左)上层传递 TCP 分成数据包的字节流。在接收器上,TCP 从数据包中重新组装流并将字节传递给上层。

我将尝试一次一行地考虑这个问题。:

TCP是面向连接的协议,而IP不是面向连接的协议。

面向连接且可靠。

在发送到传输层排序操作之前的任何数据包都必须在网络层完成。

不,排序操作是通过 TCP 在传输层完成的。

这就是为什么我们通过 TCP 在传输层中对数据包进行排序的原因。

同样,数据包在进入传输层时没有按顺序排列,传输层将它们按顺序排列。它们在离开传输层和进入上层时按顺序排列。

每当在 TCP 流控中

流量控制还是拥塞控制?

一些数据包可能会丢失,并且有可能会出现订单交付。但我们总是得到有序的确认。

TCP 总是按顺序确认收到的最后一个数据包。如果数据包被乱序接收,TCP 会发送一个确认,其中确认号是对应于最后一个按顺序接收的数据包的编号。

换句话说,这不是指发生了什么,而是指 TCP 在确认号字段中写入的内容。

我的问题是数据包丢失是TCP无连接的唯一原因吗?

无连接?请改正?

不,数据包可以在网络中重新排序。一个经典的例子:在分组交换网络中,数据包可以遵循不同的路径(花费不同的时间)。他们将以不同的顺序到达。

TCP 拥塞控制将采取行动,在这种情况下是错误的。因为在所有数据包到达之前不可能区分这些情况,TCP拥塞控制会谨慎行事并承担损失。

我正在努力理解这个概念。

TCP是面向连接的协议,而IP不是面向连接的协议。

正确的。

在发送到传输层排序操作之前的任何数据包都必须在网络层完成。

传输层无法自行在任何地方获取其数据报/段。它需要在网络层完成路由服务。

那些为上层应用层提供按序交付的传输层协议(如 TCP)的乱序段重新排序取决于传输层协议本身。

这就是为什么我们通过 TCP 在传输层中对数据包进行排序的原因。每当在 TCP 流控制中,一些数据包可能会丢失,并且有可能出现无序交付。但我们总是得到有序的确认。

TCP 中的选择性确认也可以提供无序确认。为了避免性能问题,各种算法对此进行了不同的处理。

我的问题是数据包丢失是TCP无连接的唯一原因吗?

TCP始终是面向连接和有状态的。它提供可靠的、有序的、任意长度的传输,需要跟踪连接状态——在无状态模型中实现 TCP 的功能是非常困难的,甚至是不可能的。

对于常见的无连接和无状态传输协议,请查看 UDP。IP本身在网络层也是无连接无状态的。