SIP: From ,Contact, Via 和 Record-Route/Route head
From: 如果一个SIP消息中没有Contact或者Record-Route头域,那么callee就会根据From头域产生后续的Request。比如:如果 Alice打一个电话给Bob,From头域的内容是 From:Alice<sip:alice@example.org>。那么Bob打给Alice时就会使用 sip:alice@example.org作为To头域和Request-URI头域的内容。
Contact: 后续Request将根据Contact头域的内容决定目的地的地址,同时将Contact头域的内容放到Request-URI中。它还可以用来指示没 有在Record-Route头域中记录的Proxies的地址。同时它还可以被用在Redirect servers和REGISTER requests 和responses。 Record-Route/Route: Record-Route头域一般是被proxies插入到request中的,这样后续的Request如何有着和前面一样的call-id就会被路由 到这些proxies。它也会被User Agent作为发送后续request的依据。这套机制很像source-route,Record-Route头域的信息被复制到Route头域中。并 且Request-URI头域会被设置为第一个Route头域的内容。 Via: Via头域是被服务器插入request中,用来检查路由环的,并且可以使response根据via找到返回的路。它不会对未来的request 或者是response造成影响。 总的来说,如果有Route,request就应该根据Route发送,如果没有就根据Contact头域发送,如果连Contact都没有,就根据From头域发送。
SIP中3个很重要的概念,就是dialog, session和transaction。
以下是我学习中对这三个概念的心得,贴出来和大家探讨。 dialog的建立是收到UAS的响应(To tag)时开始建立的。收到180响应时建立的 dialog叫做早期对话(early dialog),收到2XX的应答开始才是真正的dialog建立。 session 是媒体交换之后才建立的。具体而言就是通过offer/answer方式交换sdp的媒体。 session的建立可以使INVITE-200 也可以是200-ACK。这要看媒体的交换发生的时间。 具体来说,INVITE 中的消息体用sdp语言来描述自己可处理的媒体类型,200OK中 带回UAS端可处理的媒体类型。这个时候媒体交换就算是完成了。也就是session建立起 来了。 dialog是end-point对end-point的关系。而transaction 是hop by hop的关系。dialog通过 From tag, To tag(应该说local tag, remote tag--这两个tag随着UAC和UAS而不同。)以及 Call-ID 来判别。而transaction是一个SIP entity和下一个SIP entity之间请求和应答关系,(无状态代理服务器不再此列) 是通过对Via里的branch来判别的。 Transaction:维护hop to hop状态,包括一个请求和其触发的所有响应,包括若干暂时响应和一个最终响应。生命周期从请求产生到收到最终响应。 Dialog:维护peer to peer状态,目前只有invite和subscribe请求会触发dialog。其生命周期贯穿一个端到端会话的始终。
1xx = 通知性应答
100 正在尝试 180 正在拨打 181 正被转接 182 正在排队 183 通话进展 2xx = 成功应答 200 OK 202 被接受:用于转介 3xx = 转接应答 300 多项选择 301 被永久迁移 302 被暂时迁移 305 使用代理服务器 380 替代服务 4xx = 呼叫失败 400 呼叫不当 401 未经授权:只供注册机构使用,代理服务器应使用代理服务器授权407 402 要求付费(预订为将来使用) 403 被禁止的 404 未发现:未发现用户 405 不允许的方法 406 不可接受 407 需要代理服务器授权 408 呼叫超时:在预定时间内无法找到用户 410 已消失:用户曾经存在,但已从此处消失 413 呼叫实体过大 414 呼叫URI过长 415 不支持的媒体类型 416 不支持的URI方案 420 不当扩展:使用了不当SIP协议扩展,服务器无法理解该扩展 421 需要扩展 423 时间间隔过短 480 暂时不可使用 481 通话/事务不存在 482 检测到循环 483 跳数过多 484 地址不全 485 模糊不清 486 此处太忙 487 呼叫被终止 488 此处不可接受 491 呼叫待批 493 无法解读:无法解读 S/MIME文体部分 5xx = 服务器失败 500 服务器内部错误 501 无法实施:SIP呼叫方法在此处无法实施 502 不当网关 503 服务不可使用 504 服务器超时 505 不支持该版本:服务器不支持SIP协议的这个版本 513 消息过长 6xx = 全局失败 600 各处均忙 603 拒绝 604 无处存在 606 不可使用 |
SIP: From ,Contact, Via 和 Record-Route/Route head
最新推荐文章于 2024-07-17 16:27:31 发布
本文深入解析SIP协议中的关键概念,如From、Contact、Record-Route/Route和Via等头域的作用,以及dialog、transaction和session的区别。并介绍了SIP应答的状态码及其含义。
摘要由CSDN通过智能技术生成