IMS中如何区分initial INVITE和re-INVITE?

发布时间:2024年01月12日

这里就要先看下Dialog的定义。

dialog是两个UA之间持续一段时间的点对点 SIP关系。dialog通过SIP消息建立,例如对 INVITE request的 2xx response。dialog由Call-ID、local tag和remote tag来区分,也就是Call-ID 、from-tag和to-tag就可以确定一个dialog ID,用于区分不同的dialog。在intial INVITE收到non-failure response(例如 200 ok) 时,dialog就被创建,但是只有带有to-tag的 2xx 和 101-199 response(请求为 INVITE)才会建立dialog。 而对于之前的non-final response,这个期间的dialog 叫做early dialog,而什么是final response,在介绍transaction时会提到。

举例来说,dialog ID 由Call-ID 、from-tag、和to-tag确定,UAC在生成INVITE时,会生成Call-ID及From tag,在收到183?SESSION PROGRESS时就收到了UAS 的To tag,此时就可以确定dialog ID,根据这段描述,此时对应的是early dialog,而在收到final response即200 ok时,才算是final dialog。

而re-INVITE的定义如下

INVITE 过程成功后会在两个UA之间建立dialog期间也会通过协商建立session。 在session进行过程中,MO和MT可能需要修改session中的地址或端口、添加媒体流、删除媒体流等,这时可以在当前建立的dialog中重新发送一个INVITE实现,这就是所说的re-INVITE(即re-INVITE消息必须与intial INVITE消息处于同一dialog中)。也就是说re-INVITE是在当前dialog 中发送的,此时已经有Call-ID 、from-tag和to-tag。

到这里结合dialog的定义就可以看出INVITE和re-INVITE的区别就是re-INVITE会带to-tag,而initial INVITE因为还没有建立dialog,所以是不带to-tag,这也是区分两中INVITE的一个方法。

文章来源:https://blog.csdn.net/asd199086/article/details/135545462
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。