sip 事务、

本文深入探讨SIP协议中的Dialog和Transaction概念。Dialog创建于接收到200OK响应,并通过Call-ID,To-Tag和From-Tag标识。早期内部创建的Dialog在非200响应后会终止,而成功应答需由呼叫方发送ACK确认。Transaction分为客户端和服务器角色,分别负责INVITE请求和响应的重传。注册过程中的branch和CSeq行为也有详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、dialog

       call-id,to-tag,from-tag

       只有收到200ok,dialog才正式创建,否则就是early,收到非回复会被取消,但是会回复ack,非200ok不会带to-tag

      就是不成功回复会不断重发,直道收到ack.

引用       http://network.51cto.com/art/201009/226948.htm

********************

SIP使用UDP传输协议来传送INVITE消息时,要使用逐 跳重传机制保证INVITE的最终传送,即用户代理UA和sip代理proxy都要保证INVITE到达下一跳,下一跳收到时会返回一个临时应答 (proxy返回100Trying,UA返回100Trying和180ringing),代理在限定时间内收不到应答即会重传INVITE。

临时应答(100~199)用于阻止逐跳INVITE重传,没有端到端的可靠传输,也就是说当被叫方返回180应答时,如果在路径中途丢失,也不会重传。

最终应答(200~699)能被保证到达它们想要去的目的地。

成 功应答(200~299)被可靠地传送到呼叫方UA,但不是使用逐跳重传机制。只有呼叫方UA能为最终成功应答发送一个ACK(直接发送到被叫方UA), 如果成功应答在路径中途丢失或者UA发出的ACK丢失,那么被叫方会在限定时间内收不到ACK时重新发送最终应答,直到收到ACK的确认。

非成功最终应答(300~699)使用和INVITE一样的逐跳机制。被叫方用户代理将持续重传非成功应答(给前一跳),直到收到ACK为止(proxy也可以为非成功应答发送ACK)。

***********************************

引用http://www.ideawu.net/blog/archives/1001.html

*******************************

Client: 定期重复发送 INVITE 直到收到响应。
Server:收到 INVITE 后,定期重复发送响应,直到收到 ACK。
Client:收到响应后回复 ACK,认为会话已经建立。这时如果再次收到响应,回复一个 ACK。
Server:收到 ACK,认为会话已经建立。这时如果再次收到 INVITE 或者 ACK,丢弃。

里面有两个“定期发送”,其实就是超时重传的意思。当然,超时重传有最终次数限制。

程序看到上面的话,实现起来就简单了。

**********************************

register的过程,callid 和 from-tag不变好像??

 

2、transaction

      branch

     invite的非200回复会导致ack的branch和invite相同,200的就是新的branch

    bye发送,无需超时重发

     register的每次注册都是新的branch,注册不成功的后发送的register更新branch

 

3、cseq  小于2的31次访

      在客户端register的过程,注册成功或不成功,都会增加,从1开始一直增加。如果重发过程中,重发次数达到32后会增加。

      message都是20,不变化。

      invite、ack是相同的,bye增加

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值