首页 理论教育BACnet报文分段技术简介

BACnet报文分段技术简介

【摘要】:为了实现长报文的传输,BACnet采取了应用层报文分段的机制来对报文进行分段。在BAC-net中只有有证实请求和复杂确认报文可能需要分段。APDU最大长度的确定在BACnet报文中,APDU的最大长度不是固定的,其具体值是下列各长度值中的最小值:1)设备所能发送的APDU的最大长度。

为了实现长报文的传输,BACnet采取了应用层报文分段的机制来对报文进行分段。在BAC-net中只有有证实请求(Confirmed-Request)和复杂确认(Complex-ACK)报文可能需要分段。

1.报文分段规则

(1)APDU数据流的分段规则

每个BACnet报文都是一个由标记符和数据组成的序列,这个序列是按照给定编码规则进行编码而形成的。对于APDU数据流进行分段的规则如下:

1)一个完整的报文尽可能作为一个APDU发送。

2)当一个完整的报文不可能作为一个APDU发送时,则应分段成最少个数的多个APDU发送。

3)对报文进行分段时,必须以1B(8bit)作为最小的分割单位。

(2)APDU最大长度的确定

在BACnet报文中,APDU的最大长度不是固定的,其具体值是下列各长度值中的最小值:

1)设备所能发送的APDU的最大长度。这个长度一般与本地设备的缓冲区大小等因素有关。

2)BACnet互联网所能传输到远程设备的APDU的最大长度一般由本地、远程以及中间传输网络的数据链路所允许的网络层协议数据单元(NPDU)的最大长度所决定。

3)远程设备所能接收的APDU的最大长度,其值不能小于50B。

如果报文的发送设备是请求方BACnet用户,也就是说要发送的APDU是BACnet有证实请求PDU(BACnet-Confirmed-Request-PDU)或者是BACnet无证实请求PDU(BACnet-Unconfirmed-Request-PDU),这时远程设备所能接收APDU的最大长度由远程设备对象的最大APDU长度支持属性所确定。或通过向远程设备发送一个Who-Is服务请求,使其回复一个I-Am服务响应,通过读取其中的‘最大APDU长度支持(Max APDU Length Accepted)’参数来获得该属性值。

如果报文的发送设备不是请求方BACnet用户,也就是说要发送的APDU是BACnet复杂确认PDU(BACnet-Complex-ACK-PDU),这时远程设备所能接收的APDU的最大长度由本报文所响应的那个BACnet有证实请求PDU中的‘最大APDU长度支持’参数所确定。

2.分段协议控制信息(PCI)

在BACnet协议栈及数据流流向的分析中知道,上一层的数据单元送到下一层时,整体作为下一层的数据部分,然后再加上改层的控制信息,形成本层数据单元。

如果报文经编码处理后生成的APDU的长度小于或等于允许最大可传输长度的值,则‘报文分段’和‘后继’两个参数都应设置为FALSE。

由有证实请求报文或复杂确认报文的每个分段所生成APDU的头部,还有两个条件参数:第一个条件参数是‘序号’,这个8位二进制无符号整数被报文分段的发送方用来指定当前分段在整个报文分段序列中的位置;另一个条件参数是‘预设窗口尺寸(Proposed Window Size)’,它同样是一个8位二进制无符号整数。报文分段的发送方用该参数来指明,在收到一个分段确认(SegmentAck)报文之前,它预备发送的最大报文分段数。

起始分段中的“序号”参数应设置为0。报文分段接收方在收到一个或一组报文后,会向发送方发送一个包含有“序号”参数的分段确认PDU。序号的大小,等于最近一次成功接收到的分段的“序号”参数值。这样,这个分段确认PDU不但用来请求发送方继续发送后一个或一组分段,还用来对先前一个分段或者是先前所有未被确认的分段(当Window Size值大于1时)确认。

当然,在分段传输交互过程中的任何一方如果想中止交互过程,只要发送一个中止PDU(Abort-PDU)即可。