本文描述了针对sip问题的三种常见解决方法,以下是对于sip协议相关的一些简单介绍:
SIP是一种基于请求/响应模型的协议,类似于HTTP。
常见的SIP请求方法包括:
a. INVITE:用于发起一个新的会话或邀请用户加入一个现有会话。
b. ACK:确认对INVITE请求的响应。
c. BYE:终止一个会话。
d. CANCEL:终止一个等待处理或正在处理的请求。
e. REGISTER:注册用户的当前位置。
f. OPTIONS:查询服务器的能力。
SIP还定义了一些扩展方法:
a. SUBSCRIBE:订阅方法
b. NOTIFY:事件通知方法
c. MESSAGE:即时消息方法
响应包括状态码,类似于HTTP,分为1xx(信息性)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)和6xx(全局错误)。具体如下:
a. 1XX:请求已经收到继续处理请求
b. 2XX:行动已成功的接收到
c. 3XX:为完成呼叫请求还需采取进一步动作
d. 4XX:请求有语法错误不能被服务器端执行,客户端需修改请求,再次重发
e. 5XX:服务器出错不能执行合法请求
f. 6XX:任何服务器都不能执行请求
建立会话步骤:
a. 客户端向服务器发送INVITE请求,请求建立会话。
b. 服务器返回1xx响应,表示正在处理请求。
c. 服务器返回2xx响应,表示会话建立成功。
d. 客户端发送ACK消息,确认会话建立。
遇到sip业务异常(如监控视频播放不出来黑屏等问题),可以尝试按照如下三种方式修改配置
Sip协议在防火墙上的相关配置较少,一般来说用户为了让外部用户(UAC)访问内部服务器(UAS),会配置sip的nat server映射,将内网服务器的私网地址和端口映射为公网地址和端口(sip协议的默认端口为5060),对外提供媒体流服务。由于端口的转换,以及sip作为多通道协议的特殊性,此配置就有可能导致相关业务访问异常。
体现在wireshark的流程图上可能是这样的(交互不完整):
对于常见的sip问题有如下几种解决方案:
1、port-mapping
sip协议默认端口号为5060,采用udp传输,如果使用默认端口5060,防火墙设备能够正常识别协议,正常处理业务报文。但如果使用nat server映射的端口号不是5060,业务访问时就有可能出现第一次访问不通,第二次访问才能正常的情况,这就是由于转换后的端口未被防火墙识别为SIP协议而未进行正确的处理造成。此时我们就需要在防火墙上配置port-mapping,将转换后的这个端口映射为SIP协议。其他多通道协议同理,如FTP协议、RTSP协议等,出现首次访问不通后续访问正常的情况,同样可以通过配置port-mapping解决。
2、Reversible
在配置nat server时,可以添加一个reversible参数,表示允许方向地址转换,即在某方向上发起连接已成功建立地址转换表项的情况下,允许反方向发起的连接使用已建立的地址转换表项进行地址转换,此参数不关心端口,需要时只需在对应地址转换的nat server配置后面添加此参数即可。
在SIP、FTP等这种多通道协议中,实际报文交互过程往往比较复杂,如客户端主动发起控制通道的连接,后续数据通道的建立有可能需要服务器端主动发起,而nat server的配置是单向的,只允许外部的客户端主动向内部服务器的公网地址发起连接,此时如果没有nat outbound的源地址转换,内部服务器是无法向外部的客户端主动发起连接的,即使存在nat outbound配置,内部服务器通过源地址转换的端口也是随机端口,转换为数据通道对应端口的可能性极小(若存在nat outbound还有可能存在反向会话导致数据通道无法建立的情况,如果遇到需要先清除反向会话再排查),因此就有可能导致数据通道无法建立。如果遇到多通道协议的业务不正常的问题,比如ftp能够建立连接但是无法正常传输数据,比如视频业务能够建立连接但是视频播放卡顿或黑屏,比如话机通话卡顿等问题,就可以在防火墙上查看是否存在对应端口的反向会话,若存在则清除反向会话,再在配置的对应nat server规则上加上reversible参数,观察业务是否正常。
3、ALG
ALG(Application Level Gateway,应用层网关),主要完成对应用层报文的解析和处理。对于普通的NAT技术,只能转换报文的网络层和传输层的IP地址和端口,无法对应用层的数据载荷进行转换,造成数据连接无法建立的问题,此时就需要ALG技术。ALG可以对多通道协议的应用层数据进行解析和地址端口转换,保证后续数据通道的正常建立。
多通道协议控制通道报文的应用层数据中往往携带着数据通道建立的相关信息,而ALG可以识别到报文的应用层信息,并且将应用数据中的IP地址和端口进行转换,同时在防火墙上的关联表中记录转换前后的对应关系(关联表通过命令display session relation-table ipv4查看)。但存在一种特殊情况:私网服务器发出控制报文的应用层数据中携带的地址并非服务器的真实地址,而是其对外发布的公网地址,这时若NAT ALG开启,应用层载荷中的IP地址不需要进行转换,仅转换端口,外网客户端向此公网地址的转换后的端口发送SYN报文建立数据连接,命中关联表以后端口转换但地址并未转换,被NAT丢弃,此时 数据通道无法正常建立,业务依然会出现问题。这时就需要将对应协议的NAT ALG关掉,从抓包或关联表中找到数据通道所使用的端口,在防火墙上另外配置一条nat server,将这个私网端口映射出去。
判断是否要开启NAT ALG方法:
(1) 查看对应抓包中的具体字段——地址转换前的INVITE报文中,消息体(Message Body)中对应的Connection Information(包含真正流媒体使用的IP地址)与Media Description(包含数据通道使用的端口)
举例:如下图,2.2.2.1用来建立数据通道的IP就是自己的私网IP地址,端口为34872,此时就需要开启NAT ALG,若Connection Information字段为公网地址3.3.3.1,则不需要开启NAT ALG,且需要将内网使用的数据通道端口34872通过nat server映射出去
(1) 在wireshark中选中报文右键追踪流,如下:
在其中找对应的字段,c=IN IP4后的地址为真实私网地址则需要开启NAT ALG,为公网地址则不需要开启NAT ALG,并将m=audio后的端口通过nat server映射出去,如下:
port-mapping、reversible和NAT ALG
该案例暂时没有网友评论
✖
案例意见反馈
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作