传统电话是电磁波的通信,当电话技术发展到IP技术时代,SIP协议成为了电话通信标准协议,不仅可以通电话、还可以收发信息、视频、开会、放PPT。事实上,今天的通信业已全面采用SIP协议作为通信标准,无论是固定电话、还是移动电话,其后台都是以SIP协议完成通话、交换的。 很多软件也采用SIP协议进行通信,如:Windows Messenger。
学习多天,记录如下:
一、从打电话的过程,理解SIP协议
(一) 分析一下打电话的过程
两个电话之间的一次通话称为一个会话(Session),
首先,通话双方必须有一个电话号码, 通话步骤如下:
1, 电话A拨打电话B的号码, 邀请B通话 (Invite)
2, 电话B振铃(Ring), 同时电话A可以听到电话B在振铃
3, 电话B提机表示确认应答, 双方通话开始
4, 双方通话
5, 通话过程中,如有任何一方挂电话,则通话结束。
上述会话过程 图示如下:
图中箭头表示传递信号的方向。 图中假设B先挂机
在传统电话网中,上述每个信号都是一个电磁波信号.
(二)SIP协议,英文为 Session Initiation Protocol, 中文翻译为会话发起协议。顾名思义,就是在网络上发起会话。
协议(Protocol)是计算机与计算机之间的语言。SIP协议的目的就是在IP网络中实现电话功能。
在IP网络中,通话两端的不是电话机,而是运行在计算机上的软件电话(软电话)。
同传统电话,用SIP协议打一个电话,过程是一样的。两个软电话之间,也有电话号码,也需传递信号。
这时的电话号码是SIP帐号。这时的信号不是一个电磁波信号,而是一个IP数据包(称为SIP消息)。
1, 首先,通话双方都要有一个SIP帐号(也称为URI, 是网络上的电话号码),
不同于全数字的传统电话号码, SIP帐号采用 URI 表示方法,例如:
sip:peter@company.com:5060
其中:
(1) sip: 表示采用sip协议
(2) peter是用户名, 也称为帐号. 用字母和数字均可。
(3)company.com 是帐号所属的服务器域名( 也可以用IP地址,例如: sip:peter@192.168.1.100)
(4) 最后的5060是端口号。 SIP协议默认端口为5060, 默认采用UDP传输
:5060的意思是,客户端在名为 company.com的服务器的5060端口号上等待对方连接
如果端口号是 5060,也可以省略不写。
则,上述SIP帐号写为: sip: peter@company.com
除了sip:这几个字母,SIP帐号就像一个邮件帐号
没错,SIP协议设计者的意图就是让SIP帐号与邮件帐号一致,方便与邮箱服务整合。
对用户来说方便,你要打电话给我,我的电话号就是邮箱号。
2, SIP 消息
上面讲过,一个通话过程,两端要传递多种信号。在SIP协议中,这些信号是一种约定格式的IP数据包,称为SIP消息。
SIP消息有好几种,让我们看一个通话过程理解一下
1, 软电话A 向 B 发送一个 SIP消息 INVITE, 邀请B通话
2, 软电话B振铃,向A 回复一个SIP消息 RING, 通知 A 正在振铃中,请A等待
3, 软电话B提机,向A发一个SIP消息 OK, 通知 A 可以通话了
4,软电话A 向 B回复一个回应消息 ACK,正式启动通话
5,接下来,双方通话
6,软电话B挂机,向 A发一个SIP消息 BYE, 通知 A 通话结束
7, 软电话A 向 B 回复一个消息 OK, 通话结束
可以看到,这个过程与人打电话的过程是一模一样的。只不过是采用IP数据包(SIP消息)的形式传递信号而已。
通话过程中有多种SIP消息,每一种消息都是一个IP数据包。
这就是SIP协议,它约定了会话的发起过程 、结束过程。
二、实操查看 SIP协议通话过程
为了深入SIP协议通话过程,我改编了一个Java软电话程序, 名为sip_test (可在这里下载),这个程序用来显示SIP消息的实际过程。 打开sip_test.exe运行程序,界面如下图:
我的电脑IP是192.168.31.131, 软件自动占用端口54320. 生成了一个SIP帐号:sip:some@192.168.31.131:54320
在本机上运行两次sip_test, 则形成两个软电话。这两个软电话可以相互通话了。
把两个软电话窗口左右排列,把左边软件电话的 SIP帐号(My URI那个文本框)复制到右边软电话的 Callee URI(Callee 就是被叫的意思),在右边窗口中点击按键Call开始通话(则右边的软电话是主叫,左边是被叫)。下图红字显示了操作步骤:
呼叫开始后,每个软电话均将显示一个小窗口,如下图,再点击左边软电话小窗口中的按键Pickup(提机)接听电话。下图红字显示了操作步骤
德有多高,艺有多深。