我正在C#上开发一个服务器(使用*异步方法)。一切正常,直到一方违反协议(例如服务器攻击)。协议错误套接字服务器
以下结构的客户端和服务器交换消息:
- 前4个字节定义以字节
- 消息体的长度(N)以下的N个字节定义消息体
如果有人发送错误的长度 - 此客户端和服务器之间的所有通信变得不可预测。
所以这个想法是创建一个最简单的方法自同步协议。
我正在使用TCP协议,所以我的想法是将消息分解成数据包,并且没有两个消息应该共享相同的数据包 - 这样我就可以忽略协议违规并恢复通信,如果有的话出错。
我想为此使用TCP,因此数据包将与TCP段相同。但也有少数渔获:
- 的MTU(其定义了MSS)可能会有所不同,并没有为缓冲区大小没有规定值I可以使用(纠正我,如果我错了)
- 我不能” t找到直接处理TCP段的方法(没有“流”抽象)
我是socket服务器编程的新手,所以我需要帮助。也许有人可以共享这个问题的常见解决方案(防故障协议),或者描述常见的陷阱,或者提供有用的链接。
我在.NET下开发,如果可以避免,我不想使用任何P/Invokes。
好的,如果有人在传输中插入几个破碎的字节,我应该怎么做。例如,在“方法索引”和“消息长度”之间 – dipyalov
除非你打算进行比CRC校验更奇妙的事情(例如[错误检测和校正编码](http://en.wikipedia.org/wiki/) Error_detection_and_correction)),那么我不知道如何检测插入的字节不是预期的消息索引或消息长度。 –