问题描述

  1. 对端呼入当前freeswitch,地址为10.1.1.146
  2. fs回复183,回复200ok,收不到ack

image.png

问题分析

根据对端工程师给的答复是我们发送的183信令里面没有rseq字段,导致他们收到183应答后,无法发送prack信令。
根据网上查到的rseq信令的描述:

RSeq

RSeq 头字段用于临时(1xx类)对INVITE的响应,以请求可靠的传输。

仅当INVITE请求包含Supported:rel100头字段时,才可以使用头字段。

  • 如果存在于临时响应中,则UAC应该使用PRACK方法来确认接收到响应。
  • RSeq头字段包含作为由UAS随机初始化的整数的可靠序列号。
  • 对于该对话可靠发送的每个后续临时响应将具有单调递增的RSeq数。
  • UAS将重传可靠发送的响应,直到接收到具有包含可靠序列号和CSeq的RAck的PRACK。

地址:链接

可以得出结论,首先他们发来的invite消息中需要携带100rel字段,我们在发送临时应答183的时候,才会携带上rseq字段。

问题解决

在对端invite消息加上100rel之后,信令一切正常,如下:
image.png

参考链接

SIP 仅响应报头字段
在SIP消息中PRACK的含义和使用