不同节点网络层对等实体之间的通信是通过网络层协议数据单元的交互完成的。其格式如下:
(1)、地址信息N_AI标识了网络层之间进行信息交互的对等实体。 N_AI的地址信息由消息地址组成,这些地址信息标识了交互消息的类型以及发生数据交换的接收端与发送端。
(2)、协议控制信息N_PCI标识了相互交换的N_PDU类型;同时,它还可以用于通信网络层实体之间其它控制参数的交换。关于N_PDU的分类,可以分成以下四类:单帧( SF N_PDU)、首帧( FF N_PDU)、后续帧( CF N_PDU)及流控帧( FC N_PDU)。其类别区分就是通过N_PCI这一信息进行区分的,具体如下:
(3)、数据场N_Data用来传输服务用户的数据,其大小取决于N_PDU类型及选定的地址格式。
在上面小节关于协议控制信息(N_PCI)的介绍中,我们已经知道了四种协议数据单元类型及其区分(通过第一个字节高位);接下来我们就针对这四种类型进行进一步的介绍。
单帧报文的N_PCI由第一个字节表示;其格式如下:
其中,SF_DL表示服务用户数据(N_Data)字节的数量;其取值只能为0-7(且只有该协议数据单元是标准地址的形式才能是7;若为扩展或混合地址,该值最大只能为6)。
关于首帧SF_DL的出错处理如下:若接收到的单帧的SF_DL为0或者大于7(若为扩展或混合地址且该值大于6)的情况;网络层应忽略该单帧信息。
当我们要发送超过7个字节信息的数据时,则只能通过报文分割将要发送的数据拆分为多个网络协议数据单元(N_PDU)去发送;其中,第一个协议数据单元叫做首帧;接下来的协议数据单元叫做后续帧。接下来,我们就对首帧的格式进行分析。
首帧报文的N_PCI由第一、二个字节表示;其格式如下:
其中,FF_DL表示服务用户数据(N_Data)字节的数量;由12位构成(最低位为N_PCI第2个字节中的第0位),即最大可支持4095个用户数据字节。注意该值正常范围为0x8-0xFFF(若为扩展编址或混合编址模式下FF_DL范围可为0x7-0xFFF);小于这个值的FF_DL是无效值(因为小于这个值就变成单帧的FF_DL了)。
关于首帧FF_DL的出错处理如下:
(1)、如果接收到一个FF_DL大于接收端可用缓存大小(这种情况被当作一个错误条件)的首帧( FF)。那么网络层应终止消息接收,并发送一个流状态( FlowStatus)参数为溢出( Overflow)的FC N_PDU(流控制)。
(2)、如果接收到一个FF_DL小于8且使用标准地址(或者小于7且使用扩展或混合地址)的首帧( FF),那么网络层应忽略接收该首帧,且不必发送FC N_PDU(流控帧)。
其中,SN表示后续帧的帧序号;关于SN需注意如下规则:
(1)、紧跟在首帧( FF)之后的第一个后续帧( CF)的SN为1(虽然首帧( FF)中的N_PCI场没有包含一个明确的序列号,但是首帧( FF)的SN仍被当作0);
(2)、在分段消息传输过程中,每发送一个新的CF, SN的值应加1;
(3)、SN的值不会受到流控帧的影响;
(4)、当SN的值计到0xF时,SN的值在发送的下一个后续帧时重置为0。再依次往上计数。
在前面小节里我们介绍了多个网络协议数据单元的发送(首帧、后续帧);对于接收端,其需要将自身的接收能力反馈给到发送端;防止发送端发送得太快自己接收处理不过来的情况。这一小节介绍的流控帧,正是用于这个功能的;用于接收端调节发送端的数据传输以适应自身接收能力。
(1)、FS(FlowStatus)参数表示接收端告知发送端网络实体能否继续执行消息的传输。FS的有效取值定义如下:
FS值 | 值描述 | 定义 |
---|---|---|
0 | ContinueToSend (CTS)/继续发送 | 告知发送端可继续发送后续帧(还表示接收端已准备好接收最大数量为BS的后续帧) |
1 | Wait (WT)/等待 | 告知发送端应继续等待新的流控帧,并重新设置N_BS定时器 |
2 | Overflow (OVFLW)/溢出 | 发送端应终止发送分段消息,并通过调用 |
且需注意FS为2(即OVFLW)的这种情况只允许在紧跟首帧之后的流控帧中进行传输;并且,仅当在接收的首帧中的FF_DL超过了接收端实体缓存大小的情况下才能使用。
(2)、BS(BlockSize)参数的大小表示每个数据块中CF N_PDU的数目。其取值范围及定义如下:
BS值 | 定义 |
---|---|
0x00 | 告知发送端在其发送分段消息期间,接收端不会发送后续的FC;发送端网络应一次性把所有后续帧发送出去,而不用停下来等待接收端网络实体发送的FC |
0x01-0xff | 告知发送端,其在没有接收到接收端的流控帧期间;最多能发送的连续帧数量 |
(3)、STmin(SeparationTime)参数用于表示发送相邻的后续帧所允许的最小时间间隔(一个后续帧发送完开始,到请求下一个后续帧时的间隔时长)。其取值范围及定义如下:
STmin值 | 定义 |
---|---|
0x00-0x7F | 该范围内的值单位为ms;即对应表示0ms–127ms |
0x80-0xF0 | 预留 |
0xF1-0xF9 | 该范围内的值单位为us;且0xF1表示100us,0xF2表示200us…,0xF9表示900us |
0xFA-0xFF | 预留 |
如果发送端接收到的流控帧消息中,STmin参数值为预留值,那么发送端网络实体应使用127ms(最长的ST值)来替代从接收端网络实体接收的值,并在后续分段消息传输中使用该时间间隔。
经过前面的介绍,我们已经了解了四种网络层协议数据单元类型(单帧、首帧、后续帧、流控帧)的格式。那么,接下来,我们就来看下单帧传输及多帧传输的情况下,其传输模型是怎样的。
若要发送的用户数据字节数不大于7个的情况下(标准地址格式);则可通过发送一个网络层协议数据单元,我们称之为单帧( SF)。关于单帧的传输示意图如下:
当我们要发送超过7个字节信息的数据时,则只能通过报文分割将要发送的数据拆分为多个网络协议数据单元(首帧、后续帧)去发送;在发送期间,接收端还需要通过发送流控帧去调节发送端的数据传输,以适应自身的接收能力。关于多帧传输的传输示意图情况如下:
需注意,在首帧后面,接收端需回复一个流控帧;然后发送端根据接收到的流控帧中FS(是否继续发送)、BS(应该发送多少个后续帧)、STmin(每个后续帧的发送间隔)的信息;去进行后续帧的发送。若BS不为0,则在对应BS个后续帧发送完成后;此时接收端再进行流控帧的发送。除最后一个数据块以外,其余数据块包含协议数据单元的数量为BS。