0

关于 TCP 的几个问题。

我知道如果数据包到达具有较低 MTU 等的网络设备,数据包将被“拆分”或碎片化。但我遇到的问题是了解如何在应用程序中“重建”我的有效负载。(我现在已经尝试了 2-3 个小时,但似乎无法做到正确)

第一件事。发送数据包时,以下两个选项的优缺点是什么;

NetworkStream ns = client.GetStream();
ns.Write(BitConverter.GetBytes(100));
ns.Write(BitConverter.GetBytes("Test"));

或者

NetworkStream ns = client.GetStream();
byte[] payload = BitConverter.GetBytes(100).Concat(BitConverter.GetBytes("Test"));
ns.Write(payload); //, 0, payload.Length);

以及如何在 recv 处重建有效负载。部分是否已拆分?我喜欢用勺子喂这个,因为我似乎错过了我当前应用程序中一些非常重要但不那么明显的部分。

4

1 回答 1

5

您根本不关心 MTU 或碎片。重新组装分段数据包是操作系统的 TCP/IP 堆栈的责任。

您必须记住,它是一个 TCP“”,因此您如何读取或写入它并不重要;它只是一个持续的数据流。提供通过该流传递的数据结构取决于您对数据包的定义。

在许多结构化协议中,有一个用户定义的标头,第一个字段指定数据包的长度。因此,您首先读取 X 字节,其中 X 是标头的大小。您解释该标头,以便您知道数据包的其余部分有多大。然后您读取适当数量的字节以获取数据包的其余部分。

所以,在你的两个例子中,这并不重要。选择最简单的方法(在这种情况下,是第一个。)

于 2012-11-04T20:14:21.307 回答