SIP是一个对等的协议,类似P2P。它和HTTP不一样,其不是客户端服务器结构的;也不像传统电话那样必须有一个中心的交换机,它可以在不需要服务器的情况下进行通信,只要通信双方都彼此知道对方地址(或者只有一方知道另一方的地址)即可,这种情况称为点对点通信。
Bob给Alice发送一个INVITE请求,说“Hi,一起吃饭吧…”,Alice说“好的,OK”,电话就接通了。
INVITEsip:alice@192.168.0.8SIP/2.0
SIP/2.0200OK
Bob
Alice
UA用户代理
在SIP网络中,Alice和Bob都称为用户代理(User Agent,UA)。UA是在SIP网络中发起或响应SIP处理的逻辑实体。UA是有状态的,也就是说,它维护会话(或称对话)的状态。UA有两种:一种是UAC(UA Client),它是发起SIP请求的一方,比如图7-1中的Bob;另一种是UAS(UA Server),它是接受请求并发送响应的一方,比如图7-1中的Alice。由于SIP是对等的,当Alice呼叫Bob时,Alice就称为UAC,而Bob则实现UAS的功能。一般来说,UA都会实现上述两种功能。
设想Bob和Alice是经人介绍认识的,而他们还不熟悉,Bob想请Alice吃饭就需要一个中间人(M)传话,而这个中间人就叫代理服务器(Proxy Server)。还有另一种中间人称为重定向服务器(Redirect Server),它以类似于这样的方式工作──中间人M告诉Bob,我也不知道Alice在哪里,但我爱人知道,要不然我告诉你我爱人的电话,你直接问她吧,我爱人叫W。这样,M就成了一个重定向服务器(把Bob对他的请求重定向到他的爱人,这样Bob接下来要直接联系他的爱人),而他的爱人W是真正的代理服务器。这两种服务器都是UAS,它们主要是提供一对欲通话的UA之间的路由选择功能。
还有一种UAS称为注册服务器。试想这样一种情况:Alice还是个学生,没有自己的手机,但它又希望Bob能随时找到她,于是当她在学校时就告诉中间人M说她在学校,如果有事找她可以打宿舍的固定电话;如果她要回家,也通知M说有事打家里电话;或许某一天她要去姥姥家,也要把她姥姥家的电话告诉M。总之,只要Alice换一个新的位置,它就要向M重新“注册”,以让M能随时找到她,这时候M就相当于一个注册服务器。
背靠背用户代理
还有一种特殊的UA称为背靠背用户代理(Back-to-Back UA,B2BUA)。需要指出,其实RFC 3261并没有定义B2BUA的功能,它只是一对UAS和UAC的串联。FreeSWITCH就是一个典型的B2BUA,事实上,B2BUA的概念会贯穿本书始终,。
背靠背代理实际就是一端连接UAS 一端连接UAC
SBC
边界会话控制器(Session Border Controller,SBC)。它主要位于一堆SIP服务器的边界,用于隐藏内部服务器的拓扑结构、抵御外来攻击等。SBC可能是一个代理服务器,也可能是一个B2BUA。
基本方法
基本方法
说明
注册联系信息
REGISTER
初始化一个会话,可以理解为发起一个呼叫
INVITE
对INVITE消息的最终响应
ACK
取消一个等待处理或正在处理的请求
CANCEL
终止一个会话
BYE
查询服务器和能力,也可以用作ping测试
OPTIONS
SIP必须包含的头域
名称
描述
用于区分不同会话的唯一标志
CaLl-ID
顺序号,用于在同一会话中区分事务
cSeg
说明请求来源
From
说明请求接受方
To
限制跳跃点数和最大转发次数
Max-Forwards
描述请求消息经过的路径
Via
配置
查看网关状态
呼叫
注册用户
在 /usr/local/freeswitch/conf/directory/default/ 下有默认的 1000-1019 共 20 个帐号,可以
通过 copy 并修改其中的 user_id 来实现增加新的号码。
免费软电话
yate
http://docs.yate.ro/wiki/Download
linphone
口视频
先进
音频
通话和聊天
网络
用户界面
SIP账户
语言
语言
简体中文
路径
选择助手
邀请您的朋友
账户助手
创建或管理您的Linphone账户
在Linphone上邀请您的朋友
邀请
助手
使用sip账户
欢迎
该助手会帮助你配置并使用你的SIP账户
使用LINPHONE账户
创建一个LINPHONE账户
获取远程配置文件
使用一个SIP账户
使用SIP账户
显示名称(可选)
用户名
SIP域
密码
交通工具
UDP
返回
使用
查看注册信息
originate
FreeSWITCH中使用originate命令发起一次呼叫
呼叫字符串
“user/1000”称为呼叫字符串(Dial String,有时也叫CallURL)。“user”是一种特殊的呼叫字符串,在后面我们还会看到其他的呼叫字符串。
外呼SIP网关
如果你在某个运营商拥有SIP****账号,你就可以配置上拨打外部电话了。该SIP账号(或提供该账号的设备)在 FreeSWITCH 中称为SIP网关(Gateway)。添加一个网关只需要在 etc/freeswitch/sip_profiles/external/ 创建一个XML文件,名字可以随便起,如gw1.xml。
如果你的SIP网关还需要其它参数,可以参阅同目录下的 example.xml,但一般来说上述参数就够了。你可以重启 FreeSWITCH,或者执行以下命令使用之生效。
然后显示一下状态:
如果显示 gateway gw1 的状态是 REGED ,则表明正确的注册到了网关上。你可以先用命令试一下网关是否工作正常:
uuid_bridge
至此,alice和bob终于可以通话了.我们也可以用另一种方式建立他们之间的通
话,具体步骤如下:
originateuser/alice
park
park
originateuser/bob
showchannels
uuid_bridge<aliceuuid
bob
uuid
在这里,我们分别呼叫alice和bob,并把他们暂时park到一个地方.通过命令show
channels我们可以知道每个Channel的UUID,然后使用uuidbridge命令将两个
Channel桥接起来,而上一个方式实际上是先桥接,再呼叫bob.
参考
http://www.coder55.com/article/7187
https://www.cnblogs.com/yjmyzz/p/zoiper-and-yateclient-turotial.html
https://blog.csdn.net/wlg9527/article/details/106247292
本文同步分享在 博客“羊羽”(other)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。