问题描述
我已经通过 TCP 实现了 SIP 调用。 现在我打算将它外推到 TCP 上的注册。
初始注册的序列号和确认号的逻辑:
A------------------------------------B Seq - Ack - 大小
REGISTER
-----------------------------------→ 1 - 1 - 709
100 Giving a Try
401 Unauthorized
REGISTER
-----------------------------------→ 710 - 818 - 931
100 Giving a Try
200OK
当前腿的序列号=(前一条同方向腿的序列号+前一条同方向腿的窗口大小。)
当前腿的确认数=(前一条腿的确认数){如果当前腿与前一条方向相同}
=(前一航段的序列号)+(前一航段的窗口大小){else}
我试图理解以下内容:
- 刷新实例应该是同一个 TCP 流的一部分吗? 那就是说刷新实例的Src和dest IP地址以及Src和Dest Port地址应该和初始注册的一样?
- 应该对 Seq 和 Ack 编号应用什么逻辑? 它们应该延续之前的消息(初始注册尝试),还是应该将这些值视为在给定设备之间生成新实例?
PS:我正在开发一种在设备之间生成调用的工具,因此 src 和 dest 消息代码在我的范围内。
解决方法
SIP 注册独立于使用的传输协议。如果您想更新通过 TCP 连接建立的现有 SIP 注册,您可以通过相同的 TCP 连接、另一个 TCP 连接甚至通过 UDP 发送注册更新请求。只要请求被发送到同一个注册商,更新请求就会被处理。
有关在 Registration section of RFC 3261 中使用序列号和 SIP 注册(更新)的更多信息。 更多信息 SIP 注册路径和 RFC 5626 中(不同的)传输协议的使用。