reudp

1.3.0 • Public • Published

Reliable UDP implementation for Node

协议定义

术语定义

逻辑包:从上层应用中接收到的 buffer 物理包:对逻辑包按固定大小(500Byte)进行分割 发送端: 发送数据包的端点 接收端: 接收数据包的端点

数据包定义

所有的 UDP 包都有以下头部:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        CHECKSUM(16)           |    TYPE(8)    |               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            ID(32)                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

其中,

  • CHECKSUM 为简单的校验和,主要用来过滤掉无效的 UDP 包
  • TYPE 为下面表格里列出的包类型值
  • ID 为逻辑包的 id

TYPE

Type Value Description
UDP_PSH 0x01 数据包,用于发送端发送数据(物理包
UDP_REQ 0x02 控制包,用于接收端请求未接收到的物理包
UDP_FIN 0x03 控制包,用于通知发送端所有物理包已接收完毕
UDP_ACK 0x04 控制包,用于通知发送端已成功接收到控制包
UDP_ERR 0x05 控制包,用于发生错误时

UDP_PSH 类型包的其他部分:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           SEQ(16)             |      SEQ_SINGLE_TOTAL(16)     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         SEQ_TOTAL(16)         |         DATA(* lte 500)     ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

其中,

  • SEQ 为物理包的序号 id
  • SEQ_SINGLE_TOTAL 为一次并行发送的物理包的数量
  • SEQ_TOTAL 为一个逻辑包里包含的物理包的数量
  • DATA 为物理包的内容(这里固定为 500Byte,当小于 500B 时为实际大小)

UDP_REQ 类型包的其他部分:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      REQ_SEQ_ARRAY(*)                       ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

其中,

  • REQ_SEQ_ARRAY 为接收端请求其他未收到的物理包的序号(SEQ)的数组

UDP_FIN 类型包只有头部

UDP_ACK 类型包的其他部分:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  ACK_TYPE(8)  |
+---------------+

其中,

  • ACK_TYPE 为 UDP_REQ | UDP_FIN | UDP_ERR 等值

UDP_ERR 类型包的其他部分:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         ERR_TYPE(16)          |
+-------------------------------+

其中,

  • ERR_TYPE 为错误的类型

Readme

Keywords

Package Sidebar

Install

npm i reudp

Weekly Downloads

0

Version

1.3.0

License

GPL-3.0

Last publish

Collaborators

  • zbinlin