频道栏目
首页 > 资讯 > 其他综合 > 正文

sip模块

17-03-02        来源:[db:作者]  
收藏   我要投稿

sip模块:SIP协议,是现代VoIP通信的一个主要协议,是Freeswitch支持的一个核心协议。

Sofia-SIP:
    mod_sofia模块中实现的,使用了比较成熟的开源SIP协议栈Sofia-SIP
Endpoint:
    使用不同的控制协议跟其他的Endpoint通话
mod_sofia:
    实现了SIP中的注册服务器, 重定向服务器, 媒体服务器, 呈现服务器等
SIP Profile:
    相当于SIPUA,配置一个UA的行为, 有多个SIP Profile,每个SIP Profile都可以监听不同的IOP地址和端口
Gateway:
    网关,定义一个远端的SIP服务器,使Freeswitch可以与其他服务器通信,
    Freeswitch可以作为一个SIP客户端向远端的网关进行注册,或作为中继
本地SIP用户:
    SIP客户端向Freeswitch注册,Freeswitch通过用户目录中的配置信息对注册用户进行鉴权
来话,去话
    如果Alice向Bob打电话,
    Alice首先向Freeswitch发起呼叫,对Freeswitch而言,这路通话是来话
    Freeswitch再呼叫B,这路通话称为去话

2.Sofia配置文件

conf/autoload_configs/sofia.conf.xml
Sofia支持多个Profile, 每个Profile相当于一个SIP UA,在启动后它会监听一个"IP地址:端口"对
1) internel
    internel.xml定义了一个Profile, 它里面有大量的配置参数,
    由于Sofia Profile的参数比较多,因此默认把不同的Profile配置存放在单独的文件中
        一个Profile,可以配置多个网关,网关在gateways标签定义
        
            
        
    域Domain,可以是一个IP或DNS域名
        在默认的配置文件中,vars.xml中定义了名为domain的全局变量,默认追来自local_ip_v4
    Profile的几个重要参数
        Sofia的Profile有很多可配置参数,可以影响某一Profile所代表的SIPUA的行为,
        对于来话而言, 所有到达某一Profile的呼叫都会进行统一处理,下面我们就来说一下Profile中的一些主要参数
        inbound-bypass-media
            是否启用"媒体绕过"模式
2)external
    auth-call
        在internal默认是true, 在external默认是false
        也就是说发送到5060端口需要授权, 发往5080不需要授权

3) Gateway
    Freeswitch通过外部网关向外打电话, 这个外部网关就称为Gateway
    在external中,我们看到它使用预处理指令将external所有的XML配置文件都装入到该Profile的agteways标签
    
        
    
    这样的好处是,可以把每个网关配置写到不同的文件中,默认的配置包含了一个example.xml
    添加一个新网关只需要在external目录新建一个XML文件,
    
    

3.常用命令

mod_sofia提供了一个API命令, sofia
sofia status 会列出sofia的运行状态
1) 状态相关命令
    列出当前的运行状态
        sofia status
    列出某个Profile的状态
        sofia status profile internal
    列出某个Profile上所有已注册用户
        sofia status profile internal reg
    过滤某些符合条件的用户
        sofia status profile internal reg 1000
    列出某个特定用户
        sofia status profile internal user 1000
    列出网关状态
        sofia status gateway gw1
2) Profile相关命令
    启动某个Profile
        sofia profile internal start
    停止
        sofia profile internal stop
    重启
        sofia profile internal restart
    修改了某个Profile的某个参数,不需要重启,
    可以重新读取配置参数
        sofia profile internal rescan
    开启Profile的SIP跟踪功能抓SIP包
        sofia profile internal siptrace on
    清理注册的用户
        sofia profile internal flush_inbound_reg 100@192.168.1.7
        flush_inbound_reg,Freeswitch只是简单的清理本地数据库中用户的注册信息,
        无法防止客户端重新注册,如果不想让客户端再注册,应该给用户修改密码,或修改防火墙

3)SIP Capture
    Freeswitch内置了Homer Capture Agent 用于SIP抓包
    Homer由Capture Agent, Capture Node, webHomer三部分组成
        Captuer Agent运行与Freeswitch内部, 用于将收到的SIP包进行封装并发送到远端Capture Node上
        Capture Node 收到封装后的SIP包,进行分析并将分析结果存储到数据库中
        技术人员使用webHomer在浏览器查看各种统计和分析结果
    配置Captcher Node地址, sofia.conf.xml
    配置该功能默认情况下载Profile加载时打开还是关闭
        也可以在运行阶段通过命令动态开关
            sofia profile internal capture on
            sofia profile internal capture off
4)global相关
    用户经常搞不清楚对哪个Profile进行抓包, Freeswitch加入了global参数,使siptrace对所有Profile有效
    打开,关闭全局SIP消息跟踪
        sofia global siptrace on
        sofia global siptrace off
    打开,关闭全局SIP捕获
        sofia global capture on
        sofia global capture off
5)debug相关
    协议栈更底层的原因引起问题, 由于受到或发送非法的消息导致协议栈出错, 可能会导致消息丢失
    这种情况下,Freeswitch日志及SIP跟踪也查不到原因,需要打开更低级别的调试器
        sofia loglevel all 9
        控制台上打印日志,级别0~9,如果你对sofia比较熟悉,也可以开相关模块的日志
        sofia loglevel nua 9
    默认Sofia的日志级别是console
        直接打印相关信息到控制台,而不会写到日志文件中
        如果需要写到日志文件中,可以为这些日志指定一个级别
            sofia tracelevel debug
            sofia tracelevel notice
        关闭这些调试
            sofia loglevel all 0
6)其他命令
    返回注册用户的username
        sofia_username_of 1000@192.168.1.123
    返回注册用户的联系地址
        sofia_contact 1000@192.168.1.123
    在允许多点注册的情况下(开启multiple-registrations), 计算有多少客户端注册了
        sofia_count_reg 1000@192.168.1.123
    返回其他服务器的服务地址和端口号
        sofia_dig 192.168.1.123
    显示Presence数据
        sofia_presence_data status 1000@192.168.1.123
    列出用户的user_agent信息
        sofia_presence_data user_agent 1000@192.168.1.123
7)其他
    修改IP地址和端口号相关的参数,一般需要重启, 中断现有通话

4.NAT穿越

用户网络环境可能是五花八门, 不可避免的遇到NAT问题,
适当解决在NAT网络环境下的内,外网通信问题,就称为NAT穿越

NAT, Network Address Translation(网络地址转换), 克服IPv4网络地址不足出现的技术
    规定一些私有的IP地址,它们形成一个私有网络,称为内部网,当需要与外界IP通信时, 通过路由器提供的NAT
    转换成一个合法的外网IP与外界通信,不同内网彼此独立,因而可以服用这些私有IP地址
SIP一般用UDP承载,UDP无连接协议,在NAT穿越方面就更加困难,
    更复杂的是,媒体数据在RTP包传递,它与SIP路径不同,
典型NAT结构
    路由器有两个网络接口,一个用于连接外网,IP是1.2.3.4,一个用于连接内网,IP是192.168.0.1
    它们把192.168.0.1作为网关, 即所有与外网的通信都需要经过192.168.0.1转发,
    如果内网主机要与外界通信,路由器会将内网主机请求转成外网IP地址,不管哪个内网主机与外界通信,看起来都是1.2.3.4发出的,
    路由器会维护一个地址与内网主机间的映射关系,保证回来的IP能达到相应的主机,
    这个映射关系好像在NAT设备上打洞,该洞是有生命周期的,一段时间没有数据通话,洞会自动消失
1)NAT的类型
    静态NAT
        每个主机都永久映射成外部网络中某个合法地址
    动态NAT
        动态分配映射到网络内部
    网络地址端口转换 NAPT
        把内部地址映射到外部网络一个IP地址的不同端口上
        前两种类型不能节省IP地址,我们就不讨论了,网络地址端口转换是常用的方式

....
3)NAT是怎么影响SIP/RTP通信的
    假设SIP话机的IP地址是192.168.0.2, 路由器外网IP是1.2.3.4,Freeswitch的IP是1.2.3.5
    如果话机向Freeswitch注册,它将发送以下REGISTER消息
        REGISTER 1000@1.2.3.5 SIP/2.0
        Contact: 1000@192.168.0.2:5060
    由于Freeswitch收到请求后会认为该消息是1.2.3.4:5060发出
    这是如果有人呼叫1000就发现电话打不通

    如果SIP走通后,RTP不通, 就出现电话打通但没有声音的情况(或单通)
    Freeswitch是无法向192.168.0.2发送RTP包的,这个问题可以由客户端通过STUN解决,也可以由Freeswitch解决,
    Freeswitch在收到第一个RTP包时,得知该RTP对应的外网IP和端口号,以后所有的RTP流发送到这个外网上,就能听到声音了.

5.小结

NAT无处不在, 所有人都可能遇到,如果遇到NAT问题, 那么尝试修改参数看能否解决
解决NAT问题比较有效的方法是抓包分析,比较。
相关TAG标签
上一篇:CloudFlare遭「滴血攻击」:若你注册了这些网站,请立即修改密码
下一篇:韩国检察机关决定以贿赂罪起诉三星大股东、公司实际掌舵人李在镕
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站