【发布时间】:2011-09-26 20:55:04
【问题描述】:
我正在 C# 上开发服务器(使用 *Async 方法)。一切正常,直到一方违反协议(例如攻击服务器)。
客户端和服务器交换以下结构的消息:
- 前 4 个字节定义消息正文的长度 (N),以字节为单位
- 以下 N 个字节定义消息正文
如果有人传输了错误的长度 - 此客户端和服务器之间的所有通信都将变得不可预测。
所以这个想法是创建一个最简单的自同步协议。
我正在使用 TCP 协议,所以我的想法是将消息分成数据包,并且没有两条消息应该共享同一个数据包 - 这样我就可以忽略协议违规并恢复通信,如果出现问题错了。
我想为此使用 TCP,因此数据包将与 TCP 段相同。但是有几个问题:
- MTU(定义 MSS)可能不同,并且我可以使用的缓冲区大小没有预定义值(如果我错了,请纠正我)
- 我还没有找到直接操作 TCP 段的方法(没有“流”抽象)
我是套接字服务器编程的新手,所以我需要帮助。也许有人可以分享这个问题的通用解决方案(抗故障协议)或描述常见的陷阱,或者提供有用的链接。
我在 .NET 下开发,如果可以避免的话,我不想使用任何 P/Invokes。
【问题讨论】:
标签: .net sockets tcp client-server network-protocols