我正在尝试在两台服务器之间通过 tcp/ip 发送消息。我想发送一条 30KB 的消息。但我想把它作为一个整体发送。我不希望 tcp 协议将其分成段。
我正在使用 2 个 Windows Server 2008 R2 之间的通信。客户端和服务器使用 C# 编码。我尝试使用
tcpclnt.SendBufferSize = 100000;
tcpclnt.Client.DontFragment = true;
在服务器上也是如此。
我还尝试配置服务器的窗口大小(编辑注册表)。
我正在尝试在两台服务器之间通过 tcp/ip 发送消息。我想发送一条 30KB 的消息。但我想把它作为一个整体发送。我不希望 tcp 协议将其分成段。
我正在使用 2 个 Windows Server 2008 R2 之间的通信。客户端和服务器使用 C# 编码。我尝试使用
tcpclnt.SendBufferSize = 100000;
tcpclnt.Client.DontFragment = true;
在服务器上也是如此。
我还尝试配置服务器的窗口大小(编辑注册表)。
我强烈建议您需要对IPv4和TCP以及以太网和千兆以太网(尤其是巨型帧)进行进一步研究。
本质上,对您的问题的简短回答是,您不能发送包含 30kb 的 TCP 有效负载的单个 IP 数据报,尽管 IP 标头允许完整数据报的最大大小为 64kb。
这样做的原因是底层网络(很可能是以太网或千兆以太网)将具有较小的帧大小,因此需要对 IP 数据报进行分段,以便在其帧大小限制内通过物理网络传输该数据报。网络。
TCP 协议确实保证了完整的、未损坏的数据报的成功交付(通过自动重组、损坏数据报的自动检测以及丢失或损坏数据报的自动重传),因此除非您有高度专业化的要求,否则您应该能够让TCP 堆栈将您的消息分段并代表您重新组合它。