【问题标题】:Is there a way to prevent sending multiple SIP messages in a single TCP packet?有没有办法防止在单个 TCP 数据包中发送多个 SIP 消息?
【发布时间】:2019-10-19 05:51:11
【问题描述】:
  1. 我正在测试一个 SIP 服务器(只是一个 PBX)与另一个 PBX 的集成。
  2. 来电进入 PBX 并发送到我的 SIP 服务器。
  3. 一旦呼叫到达我的 SIP 服务器,它就会再次发送回注册到我的 PBX 的用户。在这里,我们有 2 个呼叫支路——一个从呼叫者到 PBX,另一个从 Sip 服务器到被叫方。
  4. 通话设置正确,音频也没有问题。
  5. 当被叫方释放呼叫时,我的 SIP 服务器在同一个 TCP 数据包中向被叫方和主叫方发送 BYE 消息。

在运行 Wireshark 跟踪时,我发现来自我的 SIP 服务器的 BYE 消息到达被叫方但从未到达呼叫者。 我知道我的 SIP 服务器和 PBX 之间有防火墙。

问题: 是否有一个选项可以防止单个 TCP 数据包中出现多个 SIP 消息?除了使用UDP还是对抗FW?

>> BYE 从 SIP 服务器到被叫方,得到 200 OK:

11:39:03.163:发送 [31,TCP] 462 字节到 10.cc.dd.ddf:5060 >>>>>

BYE sip:+xxxxxxxxx@10.xx.cc.vv​​:1122;transport=tcp SIP/2.0

呼叫 ID:003BA5CE-58A9-1D9C-ACEB-886231C0AA77-57379@1xx.vv.vv.vvv

<.......>

>> BYE 从 SIP 服务器到呼叫者,它永远不会到达 PBX:

11:39:03.163: 发送 [31,TCP] 448 字节到 10.cc.dd.ddf:5060 >>>>>

再见 sip:+420702252645@10.cc.cc.bb:5060;transport=tcp SIP/2.0

呼叫 ID:acda8080-da917a0e-5a26b-8a61610a@10.xx.cc.vv​​b

【问题讨论】:

    标签: sockets tcp sip sip-server


    【解决方案1】:

    是否有一个选项可以防止单个 TCP 数据包中出现多个 SIP 消息?

    虽然您描述的设置令人困惑(带有设置和消息流的图像可能会更清楚)并且问题本身可能偏离主题(与编程无关),但可以回答问题的这个特定部分: SIP 中没有这样的选项。虽然您特定但未知的端点或 PBX 可能有这样的选项,但不太可能。如果发送方将多个 SIP 消息打包到同一跳(即 SIP 端点或 SIP 代理)到同一 TCP 连接中,它们也可以在同一数据包中结束,因为这就是 TCP 的工作方式,则发送方完全符合规范。如果收件人对此有问题,那么这是收件人中的一个错误,应该在那里修复,而不是在每个可能的对等方中解决它。

    【讨论】:

    • 嗨,Steffen,有没有规定可以在同一个 TCP 数据包中包含多个 SIP 消息的规范?
    • @user1491636:数据包与 TCP 无关,因为从应用程序的角度来看,一切都是字节流。这不需要额外的 SIP 特定规范,因为这正是 TCP 的工作方式。如果多个消息可以在同一个 TCP 连接中彼此紧随其后(它们可以),那么它们也可以在同一个数据包中结束。任何盲目假设发送者的单个send 将匹配接收者的单个recv 的应用程序都被破坏了 - 虽然这对于 UDP(数据报)是正确的,但对于 TCP(流)不是正确的。
    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 2022-06-24
    • 2021-07-23
    • 2020-03-13
    • 2018-01-20
    • 2023-03-30
    • 2023-03-27
    • 2020-10-10
    相关资源
    最近更新 更多