做过SIP的人都知道RFC3261中的定义了Invite Client、Invite Server、NON-Invite Client、NON-Invite Server四个Transaction层状态机并用清晰的FSM图来说明,而Dialog层(或叫Transaction User层?)则只是用文字描述了其EARLY和CONFIRMED的状态及其转换,且没有清晰的FSM图。     我调查过一些开源SIP协议栈的Dialog层的状态处理,却各有不同。比如oSIP的Dialog State只包括:EARLY、CONFIRMED、CLOSE三种状态。RFC4235中却描述了五种状态。     请问大家了解Dialog层的FSM是否有特定标准或定义?或相关论述说明?

解决方案 »

  1.   

    FSM似乎不必要有标准定义,即使在标准中出现,那也只是方便你的实现。具体状态机有几个状态,那是内部实现相关的。当然了,在标准中画出状态机图,可能也方便大家对协议交互的理解,但也只是出于直观示意,做参考。本质上可以不算协议得一部分,2个厂家的产品做交互测试,应该不会以这个作为基准。 在你具体实现时,可能你会根据具体情况减少一些状态或增加一些状态。(RFC4235就是细化,增加了实际创建dialog之前的2个状态Trying 和 Proceeding) 
    千里孤行