本人主要用于工作笔记,如果有什么写的不对的地方欢迎大家批评指正,如有侵权,请联系本人。我写的是IP话机在注册到SIP服务器的流程。

什么是Sip?

两个话机需要通信,但是只知道对方的号码,这就需要一个服务器充当媒介,服务器负责接收一方的通信请求并通知另一方,直到他们建立通信,同样的,在一方请求结束通信,服务器应该回复请求,并且通知另一方。

但是实际上,通信流程中有很多坑,我来列举两个大家特别需要注意的地方。

1. 一般IP话机在建立通信以后,会变成直接连接,他们直接传输音频或者视频报文,但是有的IP话机会直接发给服务器,需要服务器转发,这就无形之中增加了建立服务器的难度。

2. 在结束通信的时候,一般客户端应该会给服务器发送BYE消息,然后让服务器转发,但是有的IP话机会直接发送给对方,不会过服务器,可能你们觉得这样会省很多事,这不是有利的吗?没错,大部分情况会对我们有利,但是有些不同品牌的IP话机会出现报文不识别的情况,这个时候,需要服务器进行处理,但是,BYE消息又不过我们服务器,这个时候,是不是又增加了一级难度。

SIP注册流程 

            sip注册主要分两种,带密码注册和不带密码注册 

        

          不带密码注册的流程为:

         

sip 注册 wireshark_IP

 

            带密码注册流程为:

       

sip 注册 wireshark_sip 注册 wireshark_02

 

下面为带密码注册的交互流程

 服务器IP: 100.1.21.252

 话机 IP :100.1.21.11

1. 话机会向服务器发送一条不带认证信息的REGISTER

REGISTER sip:100.1.21.252 SIP/2.0 
CSeq: 5 REGISTER
Call-ID: 69a76edc7fe2b2d33ec@100.1.21.11
Contact: <sip:8043524@100.1.21.11>;expires=300
Content-Length: 0
From: <sip:8043524@100.1.21.252>;tag=772b1332371e956b
To: <sip:8043524@100.1.21.252>
Via: SIP/2.0/UDP 100.1.21.11;branch=z9hG4bK20cd98777
User-Agent: Huawei-MC820/1.0.0
Supported: 100rel
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,PRACK,UPDATE
Expires: 300
Max-Forwards: 70

Call-ID:是由话机自己生成的,唯一的,后续注册流程都需要它 

CSeq:本端,连续发送相同事务的报文,该值需要递增

expires:生存周期

 

2. 服务器返回401

SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 100.1.21.11;branch=z9hG4bK20cd98777;received=100.1.21.11
From: <sip:8043524@100.1.21.252>;tag=772b1332371e956b
To: <sip:8043524@100.1.21.252>;tag=as0fcd59f0
Call-ID: 69a76edc7fe2b2d33ec@100.1.21.11
CSeq: 5 REGISTER
Server: Asterisk PBX 1.6.2.22
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO
Supported: replaces, timer
WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="6bc0fb8a"
Content-Length: 0

algorithm=MD5  使用MD5进行密码编码

realm="asterisk" 主机名

nonce="6bc0fb8a" 由服务器自己生成的字符,一次性有效,用于对注册密码的编码和解码

 

3.话机发送带有认证信息的register发送给服务器
 

REGISTER sip:100.1.21.252 SIP/2.0
CSeq: 6 REGISTER
Call-ID: 69a76edc7fe2b2d33ec@100.1.21.11
Contact: <sip:8043524@100.1.21.11>;expires=300
Content-Length: 0
From: <sip:8043524@100.1.21.252>;tag=772b1332371e956b
To: <sip:8043524@100.1.21.252>
Via: SIP/2.0/UDP 100.1.21.11;branch=z9hG4bK02bc951e0
User-Agent: Huawei-MC820/1.0.0
Supported: 100rel
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,PRACK,UPDATE
Expires: 300
Authorization: Digest username="8043524",realm="asterisk",nonce="6bc0fb8a",uri="sip:100.1.21.252",response="ac24d103329a4313e5a24975e19db6ab",algorithm=MD5
Max-Forwards: 70

response="ac24d103329a4313e5a24975e19db6ab" 用MD5方式编码得到的 一般的方式为

MD5(username:realm:password)     MD5一般的编码方式

 

4. 服务器返回200 OK代表注册成功

SIP/2.0 200 OK
Via: SIP/2.0/UDP 100.1.21.11;branch=z9hG4bK02bc951e0;received=100.1.21.11
From: <sip:8043524@100.1.21.252>;tag=772b1332371e956b
To: <sip:8043524@100.1.21.252>;tag=as0fcd59f0
Call-ID: 69a76edc7fe2b2d33ec@100.1.21.11
CSeq: 6 REGISTER
Server: Asterisk PBX 1.6.2.22
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO
Supported: replaces, timer
Expires: 300
Contact: <sip:8043524@100.1.21.11>;expires=300
Date: Thu, 01 Jan 1970 00:07:15 GMT
Content-Length: 0

sip的抓包和我整理的一些资料存放在这里了SIP资料整理,如果没有积分下载,可以跟我联系。