一直想让单片机(尤其是51)联网,感觉这样很好玩。但是没有非常轻量的ip实现,而且本人不太想让单片机用ip网络(占地址)。于是设计了非常轻量的网络协议栈,称为zxdnet(简称znet)。他可以工作对mtu的最小要求是48字节,所以可以在很多链路上,例如串口和红外。他很适合爱好者用来玩,也可以用于学习网络原理。znet适用于构建完全私有的组织内网络而不是公共网络。
报文中所有字段都是大端序的。
znet和ip一样是采用分层架构的分组交换网络,数据包可以经过多个路由器转发后到达目的地。
首先介绍下znet的网络层协议zp的报头:
(参见图1)
介绍下各字段:
BF(2bit):基本标志。前1bit表示目标地址类型,如果是0目标地址为普通地址,如果是1目标地址为组播地址(目前还没设计组播)。后1bit表示无错误标志,如果此位为1,在发生错误的时候就不会通过zcp协议回报错误(类似ip中的icmp错误回报)
Proto(4bit):上层协议号
0: ZARP (ZXDNET 地址解析协议)
1: ZCP (ZXDNET 控制协议)
2: TUDP (简单用户数据报协议)
3: UDP (用户数据报协议)
4: TCP (传输控制协议)
5: IPoZP (IP over ZP)
6: RAW
7-15: 用户自定义
Time To Live(8bit):TTL
这个字段定义了数据报允许的最大跳数。发送方初始化这个值,每个路由节点在处理时将其减一。如果TTL在数据报到达目的地之前变为零,数据报会立即被丢弃。这个机制防止了无限路由循环。
Extra Flag(16bit):额外标志。用户自定义,一般用于qos。
Total Length (16bit):报文总长度(字节),包括网络层头(16字节)及其数据。
Header Checksum(16bit):首部校验和。
仅对头部字段计算校验和。由于某些头部字段(例如生存时间)在传输过程中可能会改变,因此每个处理头部的节点都必须验证和重新计算这个校验和。
校验和字段是头部中所