C# Tcp通讯协议规划
1. 实现目标
实现一个服务端,多个客户端的稳定,可靠的TCP/IP通讯方式。
2. 功能规划
认识:
开发模式和统一入口同样重要
功能:
实现上参考分层模型,概念上将Socket连接和应用协议进行分层,职责分离,实现上将连接,发送,接收,处理进行分离,简化结构。
- 连接管理功能包括
服务端自活监控
连接
断开连接
重连策略制定
重连
发送
接收
- 协议实现功能包括
发送确认(单次ACK)
重发策略
内容分段
重复控制
连接探测
消息转发
粘包处理
3. 协议定义
发送最大长度: 1024字节(以太网)
功能名称 |
字节数量 |
起始位置 |
结束地址 |
描述 |
消息头 |
8 |
0 |
7 |
FF FE FD FC FC FD FE FF |
版本号 |
4 |
8 |
11 |
8~9: 大版本 10~11: 小版本 |
消息编号 |
6 |
12 |
17 |
ACK确认字段 12~15: 递增消息标识 16~17: 消息段数 |
消息段数 |
2 |
18 |
19 |
总消息段数 |
控制位 |
2 |
20 |
21 |
1: 发送消息探测 2: 返回探测成功 3: 发送数据 4: ACK |
源IP地址 |
8 |
22 |
29 |
22~23:192 24~25:168 26~27:40 28~29:172 |
目标IP地址 |
8 |
30 |
37 |
30~31:192 32~33:168 34~35:40 36~27:172 |
预留 |
50 |
38 |
87 |
预留内容 |
数据长度 |
4 |
88 |
91 |
数据长度 |
数据内容 |
数据长度 |
92 |
数据长度 + 91 |
数据内容 |
校验 |
8 |
数据长度 +92 |
数据长度 +92+7 |
部分校验(CRC8):版本号+消息编号+目标IP地址+数据长度 |
消息尾 |
8 |
数据长度 +92+8 |
数据长度 +92+8+7 |
FF FE FD FC FC FD FE FF |
4. 实现方式
- 连接管理:连接,发送,接收,断开
- 协议的使用,以类的形式进行封装
- 协议管理:生成,解析