提示
X
本案例来自tskb,请前往tskb修改源内容:立即前往
'>

五、高阶排查:SIP协议常见处理方法

|

问题描述

SIP协议常见问题处理方法

有效排查步骤

一、SIP与ALG的关系
1、 SIP是一个用于建立、更改和终止多媒体会话的应用层控制协议,其中的会话可以是IP电话、多媒体会话或多媒体会议。SIP是通过各种头域里的信息的交互来管理会话的。

2、SIP应用中的语音和视频数据需通过信令消息中的IP地址和端口号来实现目的地寻址,因此信令消息在地址穿透中不仅需要对TCP/UCP层的端口信息以及IP层的源地址和目的地址进行变换,还需对IP包载荷中的相关地址信息进行变换。同时,对于SIP应用来说,是在控制信息中动态地协商媒体流端口,信令协议中的IP地址也是私有的,因此要准确把握相关的地址和端口信息,并进行正确的转换。

3、SIP消息采用文本方式编码,包括请求消息与响应消息两类。
SIP请求消息包括如下六种。
(1)    INVITE:用于邀请用户加入一个呼叫。
(2)    ACK:用于对请求消息的响应消息进行确认。
(3)    OPTIONS:用于请求协商能力信息。
(4)    BYE:用于释放已建立的呼叫。
(5)    CANCEL:用于释放尚未建立的呼叫。
(6)    REGISTER:用于向SIP注册服务器登记用户位置等信息。

4、SIP终端设备会周期性地发送Register消息到注册服务器上,由于不断有信令消息经过NAT设备,致使NAT设备对通过的消息流始终保持一个确定的端口;同时,当Register消息经过ALG,ALG就会记录信令穿透NAT时经NAT转换后的IP地址和端口等信息,并将此信息与NAT后面的终端用户ID(如890010098)等信息进行绑定。这样,当一个信令到来,ALG将通过NAT上正确的地址和端口发送给被叫方。      
5、当信令穿透NAT后,NAT后面的SIP终端就可以收到来自外网的呼叫请求。这时呼叫方的Invite消息和响应方的200(OK)消息中都携带了用于描述与会话相关的信息及与流媒体相关参数的SDP(Session Description Protocol)消息体。当该消息通过ALG时,ALG将通过与该媒体流相关的呼叫——会话层消息中的用户ID(如890010098)识别出NAT上的IP地址和端口并进行相应的转换,这样当呼叫方收到200(OK)消息时就能从SDP消息体中获取该IP地址和端口等信息并发送ACK确认消息,从而完成一个会话的建立。      
6、SIP响应消息用于对请求消息进行响应,指示呼叫或注册的成功或失败状态。      
在请求与响应报文中需要进行ALG处理的地址字段类型主要有:Via、Record_Route、Contact、SDP。
7、ALG处理流程为如下三个步骤:  
       首先,ALG根据会话标识的协议类型对报文进行解码,若解码发现报文为不需要做ALG或解码发现为错误字段时退出,解码发现需进行字段转换时进一步处理;  
       其次,ALG查找接口上的NAT配置,根据NAT配置转换报文中的IP地址、端口、call-id等信息并建立关联表,关联表记录了载荷地址的转换关系;      
      最后,ALG调整报文载荷中的长度字段,如sip message header的content-length字段标识message body的长度,ALG对message body中的地址转换后,message body长度可能变化,content-length字段值需要置为变化后的值。

二、ALG的实现方式
1.终端SIP穿越方式      
       当用户有视频/音频经过防火墙的需求时,先确认下终端设备支不支持自身穿越,能用自身穿越的就不需要使用AF的ALG功能。      
       此时注意视频终端的数据端口(RTP之类),AF做好端口映射的工作。SIP自身是支持穿越的,所以使用不了可以与支持的终端厂商沟通,想办法开启该功能。

2.防火墙ALG方式
对应SIP协议数据进过AF时,检查特定参数地址进行ALG转换。
SIP协议需要检查下面几个参数:call-id、contact和request-uri三个参数。
call-id包含一个全局的唯一标志,用来唯一标志这个呼叫,通过随机字串和softphone的自己名字或者IP抵制混和产生的。通过TO TAG, FROM TAG和CALL-ID完整定义了两个终端的端到端的SIP关系,并且表示这个是一个对话性质的关系。
contact在request:INVITE这个数据包里面,contact域主要是用来告诉服务器注册用户信息地址。request-uri在request:INFO里面。指示请求的用户或者服务的地址信息。

三、常见案例
1、ALG转换成功
配置了ALG功能,需要转换对应地址。
防火墙LAN口抓的包,其中SIP协议待转的字段比较重要的Contact


在下图防火墙WAN口抓包的时候需要被转换成防火墙的WAN口地址



2、ALG未转换成功
检查INVITE(邀请请求)看里面的contact字段在内外网口是否转换成功
内网接口:


外网接口:
从上面两个数据包中可以看到,内外网口的数据包里面的hostIP没有变,代表alg功能没生效。

此时需要配置ALG功能

3、相关案例贴
【AF】映射SIP视频会议服务器,正常连接一段时间后自动断开
http://tskb.sangfor.com/forum.php?mod=viewthread&tid=11729
【AF】SIP协议拨号不成功
http://tskb.sangfor.com/forum.php?mod=viewthread&tid=13836
【AF】语音电话无法听到声音,服务器主动发起连接未做源地址转换

注意事项:
1、非标准端口环境下,如要做ALG则需要手动添加对应端口;
如SIP服务器端口改成了9902,AF将SIP服务器的端口映射到公网9902,控制台默认的SIP端口需要改成9902


2、修改端口配置后,旧的连接跟踪要断开新设置的才生效;
在控制台更改了ALG相关配置后,一定要等到连接跟踪都消失后(需要断开客户端与服务端)才会使用生效。

解决方案

按以上排查

我要分享
文档编号: 217075
作者: admin
更新时间: 2023-01-05 17:29
适用版本: