天天看点

SIP通过BGW穿越防火墙的问题

       今天,某个厂商和我聊了SIP穿越防火墙的问题。,所谓的BGW是指应用层网关,这是穿越防火墙的一种方式。在他们的BGW上,只能支持SIP的INVITE动态申请端口,并不支持Re-inivite,也就是说,SIP在话路建立后,申请端口后,就需要话路一直占有这个端口,过了一段时间间隔之后,如果不在使用这个端口,端口就会被释放,有可能被另外一个端口使用。        为了规避情况的出现,在保持的场景下,一旦发生穿越防火墙的问题下,厂商使用了有别于标准SIP定义的方式。传统方式下,保持有两种实现方式,一种是发送地址为0.0.0.0的SDP描述;一种是发送媒体属性为inactive的SDP描述。但在这两种情况下,事实上终端是不发送媒体流的。一旦保持时间过长,BGW上的申请的端口会被释放,导致媒体流接回的Reinvite发送后,穿越防火墙失败。        为了解决这个问题,厂商的方案是保持发送的Re-invite的地址是127.0.0.1。那么如果不需要通过防火墙,那么对端得到这个地址后,不发送媒体流。那么如果通过BGW,BGW将这个地址转换成BGW地址,所以在保持后,对端一直向BGW发送媒体流,保证BGW上通道一直被占用,直到对端挂断。  

继续阅读