为什么 seqno、ackno 和 PSH 位不足以表示流的“开始”和“结束”

网络工程 tcp
2022-02-23 05:09:37

看我的网络,我可以告诉...

...一个数据包的开始,通过查看对我的某个数据包的响应,因为消息确认号与该启动数据包的序列号匹配。

...数据包的结尾,通过查看包含 PSH 位的数据包。

我知道 TCP 被认为是一种发送连续数据流的协议,而应用程序协议的任务是确定数据的开始和结束位置。

但是我不太明白,为什么它也不能在传输层上完成,似乎所有必要的信息都在那里。

1个回答

我知道 TCP 被认为是一种发送连续数据流的协议,而应用程序协议的任务是确定数据的开始和结束位置。

但是我不太明白,为什么它也不能在传输层上完成,似乎所有必要的信息都在那里。

仅仅是因为 TCP(传输层)不指示应用程序使用的数据在哪里启动/停止。它只跟踪传输层会话和段包含的有效负载。仅仅因为您知道段从哪里开始以及段有多大,并不意味着它与正在传输的数据的大小相匹配。

传输层有效负载可以包含应用程序所需的部分、全部或多条数据。换句话说,应用程序使用的数据可能完全适合单个 TCP 段的有效负载,可能大于 TCP 段的限制并需要多个段来传递,或者可能足够小以至于多个数据段可以包含在一个 TCP 段中。

此外,TCP 会话可用于传输一个“数据”、多个数据,甚至可以双向/交互使用。或者,来自应用程序的一个“数据”可以通过多个不同的 TCP 会话发送。

如果传输层要指示数据何时开始/结束,则它需要知道如何确定可用于传输的每种可能类型的数据的数据开始和结束位置。这根本没有必要,甚至没有实际意义。它只需要将数据传输到另一端并将其交给正确的应用程序。