设计简单的高层网络协议

一、背景

1、通信协议应用广泛。

2、通信协议大多基于TCP传输层。


二、主要目的

设计基于TCP传输层协议的简单的高层网络协议。


三、通信内容设计

(一)传输什么内容

可以是二进制文件。
可以是文本文件。


(二)设计什么架构

1、有客户端和服务端的请求响应模式。

2、有全双工的发送模式。

3、有半双工的命令响应模式。


(三)怎么设计内容格式

1、有头部和负载数据两部分。

协议基本单元的格式如下:

1字节类别  2字节负载数据长度  指定长度的负载数据

2、头部的类别设计
类别占据1个字节,可以设置255个值。

参考如下:

10   代表数据。
20   代表执行结果提示。
30   代表请求命令。
40   代表主动关闭。
50   代表接收确认。

3、负载长度
占据2字节。
这2个字节的十进制整数值代表后面的多少个字节属于本次通信单元。

4、负载数据
用来传递各种信息,长度可以变化。

每次最多不超过65535个字节。


四、负载内容设计

(一)多行文本字符串

传输的是文本文件。

每一行的格式如下:

字符串序列\r\n

此处每一行用回车符和换行符结尾。

每一行字符串连续传输。

需要在前面的负载长度设置本次字符串占用的字节数。


(二)二进制文件的分批传输

1、如果能一次性传输,就可以放在一个单元里传输。

2、如果文件太大,就需要分块来连续传输。

每一个数据块都使用一个协议单元。

需要在负载长度设置后面数据块的字节个数。


(三)命令设计

1、字符串类型
每个命令用字符串来传递。

每个命令用回车符和换行符结尾。

格式如下:

    命令名 空格 可选参数\r\n

命令名设计:

   start  代表开始
   stop  代表停止
   close  代表关闭
   open 代表打开

案例:

  // 打开23号灯光
  open  23 \r\n

2、二进制命令类型
每个命令用一个整数来代表。

命令的参数也用整数或者字符串来代表。

格式如下:

   2字节命令整数值   10字节命令参数

命令代表的整数设计参考:

    1 代表打开
    2 代表关闭
    3 代表调整亮度
    4 代表增加速度
    5 代表降低速度

实际上可以自定义设计命令的含义。


(四)执行结果或者请求结果

1、用状态码和描述字符来设计。

状态码是整数值,用来明确判断。
描述字符串可以用户自定义。

2、格式如下:
第一种:

 状态码  空格  描述字符串序列  \r\n

都是采用字符串的格式。

第二种:

 1字节状态码整数值  任意个数字符串的二进制序列   字节0

用值为0的字节来代表字符串的结尾。

第三种:

1字节状态码整数值  1字节字符串序列长度  字符串的二进制序列 

在字符串序列的前面用1个字节来说明后面的字符串有多少个字节。


五、总结

1、需要在通信单元的前面指定信息。

2、需要定义一些整数值,规定含义。

3、需要用数字来通知后面负载数据的长度。

4、需要用一些办法来分清楚本次数据的开始位置和结束位置。

5、需要约定一下通信结果的格式。

6、通信最可怕的是顺序出错,或者有漏洞,或者失去连接。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值