SIP客户端应该向INVITE发送回复?

时间:2012-12-09 23:52:53

标签: sip

假设有一个SIP客户端在100.0.0.100:5059收听。

它接收来自10.0.0.101:5060的UDP数据包,内部有INVITE,带有某些标头。例如:

  • Contact: <sip:100.0.0.102:5060>
  • Record-Route: <sip:100.0.0.103:5060>(此类标题中的第一个)
  • Route: <sip:100.0.0.104:5060>
  • Via: <sip:100.0.0.105:5060>(第一个标题)

它应该在哪里发送“ACK”,“Tryinng”,“Dialog Establishment”,“BYE”等内容? 100.0.0.what?

(背景:尝试编写“单个TCP连接中的整个SIP”包装器,将SIP中看到的所有地址转换为自身,但获取“请求超时”,“检测到循环”,“转发frobidden”错误使对话持续只有15秒......可能是因为封装器出错了...为什么在header和application / sdp中有这么多令人困惑的IP地址?..)。

1 个答案:

答案 0 :(得分:0)

RFC 3261 section 18.2.2告诉你该怎么做。算法的第三步是适用的步骤:

  o  Otherwise (for unreliable unicast transports), if the top Via
     has a "received" parameter, the response MUST be sent to the
     address in the "received" parameter, using the port indicated
     in the "sent-by" value, or using port 5060 if none is specified
     explicitly.  If this fails, for example, elicits an ICMP "port
     unreachable" response, the procedures of Section 5 of [4]
     SHOULD be used to determine where to send the response.
  o  Otherwise, if it is not receiver-tagged, the response MUST be
     sent to the address indicated by the "sent-by" value, using the
     procedures in Section 5 of [4].

[4]指的是here

通过TCP接收请求是一种更简单的情况:如果可以,您可以通过打开的连接发送请求。否则,您打开与最顶层received的{​​{1}}参数中的IP地址的TCP连接(如果存在),或者如果不存在,则打开该标头的Via令牌。如果尝试失败,则必须回到上面提到的RFC 3263中的算法。