MTP2消息格式如下:
图-MTP 消息格式
MTP2消息格式分为三种:消息信令单元MSU, 链路状态信令单元LSSU, 链路填充单元FISU。其中MSU是真正传输上层的信令消息的;LSSU是用来通知链路对端自己的状态改变信息(比如block住一条链路),SF域用来标明当前状态;FISU用来填充链路空闲时刻(没有消息传送),此外还能用来纠错。
MSU, LSSU, FISU消息单元从前向后每个域解释如下:
F(Flag of Synchronization):同步标志。
填充” 0111 1110”,它用来标识上一个消息单元的结束,一个新的消息的开始。为了避免信令单元里同样存在” 0111 1110”,从而引起混乱,协议规定,在信令传输过程发送端每遇到”11111”就增加一个“0”,接收端一旦发现”11111”,便删除后面的”0”,这样便能保证不能出现的假的同步标志。
BSN(Backward Sequence Number):后向序列号。
后向序列号(BSN)用于信令单元的接受证实,向对端信令点确认相应信令单元已正确接受。 BSN中就是其证实接受的信令单元的序列号。它是利用MSU“捎带”发送确认信息,这点和TCP发送ACK不一样。
BIB(Backward Indicator Bit): 后向指示位
后向指示位(BIB) 当被置位时即向对端指示了一个负(错误)的证实信号。
FSN(Forward Sequence Number): 前向序列号
前向序列号(FSN)是信令单元的序列号。接收端受到这个FSN后,将会填入到接收端的BSN字段,这样就形成了一个发送-确认的关系。
FIB(Forward Indicator Bit): 前向指示位
FIB和BIB一样用于出错时恢复之用。当一个信令单元准备传送时,信令点将其FSN(forward sequence number) 加1 (FSN = 0..127),同时CRC (cyclic redundancy check)也重新计算并加在前向消息之后。当接受到消息后,接受端首先校验CRC码,然后将其FSN号复制入准备向源端发送的下个后向消息的BSN字段。如果CRC校验正确,后向消息即被发送;如果校验出错,在发后向消息之前,信令点会将BIB置位以表示一个负(错误)指示。源点接受到这个负指示标志后,它会将从出错的消息序列号开始的所有消息重新传送,并且这些消息的FIB为1。
由于7 bit 的FSN 的值是0~127,所以信令点在接受到第一个证实消息前,能连发最多128个消息。BSN 号指示了对端正确接受的最后一个消息的序列号,它证实了序列号BSN之前的所有消息已正确接受。如果信令点在收到消息其BSN=5之后又收到消息BSN=10(而且BIB未置位),则后个消息表示了FSN从6到9的消息也都正确接受了。
BSN, BIB, FSN, FIB四个字段构成了MTP2 帧的纠错重传功能。
LI (Length Indicator): 这个字段有两个作用:一个是指示当前帧里包含数据的长度,另外一个是用长度的值来判定帧的类型。
如果LI=0,那么此帧是FISU;如果LI=1或2的话,那么此帧是LSSU;如果LI>2,那么此帧是MSU。由于LI的长度是6,所以LI最大值为63.
如果帧里净载荷(payload)的值小于63,那么里面的值就是净载荷的长度;如果净载荷是63,那么代表的意义是消息的长度等于或大于63(最多273 字节)。信令单元长度最大为279字节: 273 字节 (数据) + 1 字节 (flag) + 1 字节(BSN + BIB) + 1字节 (FSN + FIB) + 1字节 (LI + 2 bits spare) + 2 字节 (CRC)。
SIO(service indicator Octet)
MSU中的业务消息段SIO 由4 bit子业务字段和 4bit业务指示组成。FISU和LSSU并不含有SIO。子业务字段subservice field 中,Network Indicator用来标明国内或国际消息,Spare Bits在北美用来标识消息优先级(0~3,3级别最高), 消息优先级只在网络拥塞发生时使用,并不影响正常时消息传送时的顺序,在网络发生拥塞时,低优先级的消息会被丢弃,如信令链路测试消息比呼叫建立消息具有更高的优先级;在欧洲这个字段空闲。
业务指示Service Indicator 表示MTP上层使用者类别(如图 6),依此对SIF中的数据进行解码。如下图所示:
图-MTP2 SIF 格式
SIF(Signaling Information Field):信令消息正文段。它包含了真正的上层的用户数据以及路由信息,接收端对消息的解析是根据SIO里的SI来判断对应的消息种类。
CK (check bits),又叫CRC(Cyclic Redundancy Check),它用来纠正对传输时产生的错误进行检错及纠错的。
在LSSU消息了,SF(status Field)字段用来标明信令端的状态变化值,它只用了低三位,其他部分为0,如图所示。
图-MTP2 SF格式
参考资料列表,请参看:
http://hi.baidu.com/sunwater007/blog/item/d9ebf900349c0b08738da5e7.html