1. 概述
本文通过tcpdump对真实环境里的软电话的注册、呼叫、挂断流程进行抓包,通过真实的例子学习SIP协议。本文主要包括以下方面:
- A. 详解软电话的注册时的SIP包和流程图
- B. 详解软电话之间呼叫、挂断的SIP包和流程图
- C. 详细介绍了协议中各个字段的意义
2. 案例环境说明
软电话使用x-lite,使用freeswitch的默认的两个号码1008和1018。
freeswitch部署在服务器的私网地址是172.23.4.92,公网地址115.aa.aa.aa。
1008的测试机器在私网上(IP为10.240.80.69),通过115.aa.aa.aa:5060注册freeswitch,但是出去后的公网地址是59.bb.bb.bb。
1018的测试机器在私网上,通过115.aa.aa.aa:5060注册freeswitch,但是出去后的公网地址是123.cc.cc.cc
在172.23.4.92上,使用tcpdump捕获通信过程中的所有包
为了安全,本文把真实环境的公网地址,全部使用假的地址进行替换
3. SIP注册流程
1008 向115.aa.aa.aa:5060 进行注册
3.1. 注册流程图
下文的流程图如下:
3.2. SIP注册交互过程协议
A. 1008 向freeswitch第一次发起注册
No. Time Source Destination Protocol Length Info
201 8.599836 10.240.80.69 115.aa.aa.aa SIP 599 Request: REGISTER sip:115.aa.aa.aa:5060 (1 binding) |
Frame 201: 599 bytes on wire (4792 bits), 599 bytes captured (4792 bits) on interface 0
Ethernet II, Src: Giga-Byt_bf:ae:ce (40:8d:5c:bf:ae:ce), Dst: CiscoInc_53:c8:c2 (e8:65:49:53:c8:c2)
Internet Protocol Version 4, Src: 10.240.80.69, Dst: 115.aa.aa.aa
User Datagram Protocol, Src Port: 59531 (59531), Dst Port: 5060 (5060)
Session Initiation Protocol (REGISTER)
Request-Line: REGISTER sip:115.aa.aa.aa:5060 SIP/2.0
Message Header
Via: SIP/2.0/UDP 10.240.80.69:59531;branch=z9hG4bK-524287-1---671b073f870cfe63;rport
Max-Forwards: 70
Contact: <sip:1008@10.240.80.69:59531;rinstance=b22023be9ce02608>
To: "1008"<sip:1008@115.aa.aa.aa:5060>
From: "1008"<sip:1008@115.aa.aa.aa:5060>;tag=9a71ed3c
Call-ID: 84253M2Q3MDQyZDY0Y2I2NTg1MGE3ZTExODQ0ODIyNDNkYTE
CSeq: 1 REGISTER
Expires: 3600
Allow: SUBSCRIBE, NOTIFY, INVITE, ACK, CANCEL, BYE, REFER, INFO, OPTIONS, MESSAGE
User-Agent: X-Lite release 4.9.8 stamp 84253
Content-Length: 0
协议中字段的说明:
B. freeswitch返回 401 未认证消息
freeswitch在返回sip消息中新增参数:
- 认证摘要WWW-Authenticate给客户端
- CSeq序号变成1
No. Time Source Destination Protocol Length Info
202 8.604062 115.aa.aa.aa 10.240.80.69 SIP 727 Status: 401 Unauthorized |
Frame 202: 727 bytes on wire (5816 bits), 727 bytes captured (5816 bits) on interface 0
Ethernet II, Src: CiscoInc_53:c8:c2 (e8:65:49:53:c8:c2), Dst: Giga-Byt_bf:ae:ce (40:8d:5c:bf:ae:ce)
Internet Protocol Version 4, Src: 115.aa.aa.aa, Dst: 10.240.80.69
User Datagram Protocol, Src Port: 5060 (5060), Dst Port: 59531 (59531)
Session Initiation Protocol (401)
Status-Line: SIP/2.0 401 Unauthorized
Message Header
Via: SIP/2.0/UDP 10.240.80.69:59531;branch=z9hG4bK-524287-1---671b073f870cfe63;rport=35646;received=59.bb.bb.bb
From: "1008" <sip:1008@115.aa.aa.aa:5060>;tag=9a71ed3c
To: "1008" <sip:1008@115.aa.aa.aa:5060>;tag=va161eH7mmgNc
Call-ID: 84253M2Q3MDQyZDY0Y2I2NTg1MGE3ZTExODQ0ODIyNDNkYTE
CSeq: 1 REGISTER
User-Agent: FreeSWITCH-mod_sofia/1.6.19-36-7a77e0b~64bit
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
WWW-Authenticate: Digest realm="115.aa.aa.aa", nonce="1118e141-6f6d-4cee-a7d7-5061f8d8a2da", algorithm=MD5, qop="auth"
Content-Length: 0
C. 1008第二次发起注册请求
1008收到401未认证消息,会重新发起注册请求,并加上根据收到的认证摘要和1008的用户名密码生成的认证消息(Authorization头)。另外CSeq序号变成2
No. Time Source Destination Protocol Length Info
203 8.606034 10.240.80.69 115.aa.aa.aa SIP 859 Request: REGISTER sip:115.aa.aa.aa:5060 (1 binding) |
Frame 203: 859 bytes on wire (6872 bits), 859 bytes captured (6872 bits) on interface 0
Ethernet II, Src: Giga-Byt_bf:ae:ce (40:8d:5c:bf:ae:ce), Dst: CiscoInc_53:c8:c2 (e8:65:49:53:c8:c2)
Internet Protocol Version 4, Src: 10.240.80.69, Dst: 115.aa.aa.aa
User Datagram Protocol, Src Port: 59531 (59531), Dst Port: 5060 (5060)
Session Initiation Protocol (REGISTER)
Request-Line: REGISTER sip:115.aa.aa.aa:5060 SIP/2.0
Message Header
Via: SIP/2.0/UDP 10.240.80.69:59531;branch=z9hG4bK-524287-1---726c884045c07c61;rport
Max-Forwards: 70
Contact: <sip:1008@10.240.80.69:59531;rinstance=b22023be9ce02608>
To: "1008"<sip:1008@115.aa.aa.aa:5060>
From: "1008"<sip:1008@115.aa.aa.aa:5060>;tag=9a71ed3c
Call-ID: 84253M2Q3MDQyZDY0Y2I2NTg1MGE3ZTExODQ0ODIyNDNkYTE
CSeq: 2 REGISTER
Expires: 3600
Allow: SUBSCRIBE, NOTIFY, INVITE, ACK, CANCEL, BYE, REFER, INFO, OPTIONS, MESSAGE
User-Agent: X-Lite release 4.9.8 stamp 84253
[truncated]Authorization: Digest username="1008",realm="115.aa.aa.aa",nonce="1118e141-6f6d-4cee-a7d7-5061f8d8a2da",uri="sip:115.aa.aa.aa:5060",response="1cd1bea82808566209948ba2eb53c9f1",cnonce="7761e8692660d5ee8467fc4a3974afe3",nc=
Content-Length: 0
D. Freeswitch注册成功返回200
Freeswitch收到请求后,对请求进行核实,如果认证通过,则返回200 OK消息。此时1008在freeswitch注册成功。freeswitch会将1008在SIP消息中的联系地址(contact字段)记录下来。如果有人呼叫1008,则freeswitch会向该地址发送SIP消息建立呼叫
补充,如果认证失败,则返回403 Forbidden消息
No. Time Source Destination Protocol Length Info
204 8.611684 115.aa.aa.aa 10.240.80.69 SIP 711 Status: 200 OK (1 binding) |
Frame 204: 711 bytes on wire (5688 bits), 711 bytes captured (5688 bits) on interface 0
Ethernet II, Src: CiscoInc_53:c8:c2 (e8:65:49:53:c8:c2), Dst: Giga-Byt_bf:ae:ce (40:8d:5c:bf:ae:ce)
Internet Protocol Version 4, Src: 115.aa.aa.aa, Dst: 10.240.80.69
User Datagram Protocol, Src Port: 5060 (5060), Dst Port: 59531 (59531)
Session Initiation Protocol (200)
Status-Line: SIP/2.0 200 OK
Message Header
Via: SIP/2.0/UDP 10.240.80.69:59531;branch=z9hG4bK-524287-1---726c884045c07c61;rport=35646;received=59.bb.bb.bb
From: "1008" <sip:1008@115.aa.aa.aa:5060>;tag=9a71ed3c
To: "1008" <sip:1008@115.aa.aa.aa:5060>;tag=XKtZ391ajX67Q
Call-ID: 84253M2Q3MDQyZDY0Y2I2NTg1MGE3ZTExODQ0ODIyNDNkYTE
CSeq: 2 REGISTER
Contact: <sip:1008