freeswitch系列四 通过实例学习sip协议的注册、呼叫、挂断流程

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消息中新增参数:

  1. 认证摘要WWW-Authenticate给客户端
  2. 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
  • 16
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值