c/c++ developer
https://github.com/PengShiqiu

导航

 

 

抓包文件下载地址:https://files.cnblogs.com/files/veryStrong/PPT%E5%8F%8A%E6%8A%93%E5%8C%85%E6%96%87%E4%BB%B6.rar?t=1649605023

1、RTP协议

数据传输协议RTP,用于实时传输数据。RTP全名是Real-time Transport Protocol(实时传输协议)

 

 

 

  • V: RTP协议版本号,2位

  • P: 填充标志,占1位,如果P=1,则在该报文的尾部将填充一个或多个额外的八位组,它们不是有效载荷的一部分

  • X: 扩展标志,占1位

  • CC: CSRC计数器,占 4位,指示CSRC 标识符的个数。主要用于多流组合传播,比如说5个人发送rtp到网关边缘,边缘把5个rtp转发给另外一个边缘,然后解出原始流

  • M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始

  • PT:有效载荷类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等

  • 序列号:占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。接收者通过序列号来检测报文丢失情况,重新排序报文,恢复数据

  • 时戳 (Timestamp):占32位,时戳反映了该RTP报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。

  • 同步信源(SSRC)标识符:占32位,用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC。

  • 特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源。

2、wireshark分析RTP流

抓包过滤条件:

ip.src == 192.168.100.97 && ip.dst == 192.168.100.103 && rtp.p_type == 102

抓包分析点:

  • 丢包 查看seq是否连续

  • 是否有mark位,查看时间戳

  • ssrc是否一直,源地址->目的地址

  • 乱序,查看seq

 

如果不是从建立媒体连接开始抓包,wireshark无法自动进行解包。

需要选中协议包右键手动设置协议格式。

 

 

 

 

3、SIP协议

SIP(Session Initiation Protocol,会话初始协议)广泛应用于CS(Circuit Switched,电路交换)、NGN(Next Generation Network,下一代网络)以及IMS(IP Multimedia Subsystem,IP多媒体子系统)的网络中,可以支持并应用于语音、视频、数据等多媒体业务,同时也可以应用于Presence(呈现)、Instant Message(即时消息)等特色业务

会话一般存在2种会话模式:

  • Session Model

  • Pager Model

3.1、 Session Mode

会话中,对于消息内容,大于1300字节时,一般采用Session Model。会话过程:

  •  

     

     

    步骤1:主叫方A发送INVITE请求到代理服务器

  • 步骤2:代理服务器发送100 Trying 响应 主叫方A

  • 步骤3~6:代理服务器搜索被叫方B的地址,获取地址后转发INVITE请求

  • 步骤7~9:被叫方B生成的180 振铃响应,返回给主叫方A

  • 步骤10~12:被叫方B生成的200 OK响应,返回给主叫方A

  • 步骤13~17:主叫方A收到被叫方B200 OK响应后,向被叫方B发送一个ACK,会话建立

  • 步骤18~20:会话结束后,任何参与者(A或B)都可以发送一个BYE请求来终止会话

  • 步骤21~23:主叫方A发送200 OK响应来确认BYE,会话终止

3.2、 Pager Model

 

 

 

  • 步骤1:User1发送MESSAGE请求到代理服务器

  • 步骤2:代理服务器转发User1的MESSAGE请求给USER2

  • 步骤3:User2收到User1的消息后,回复200 OK给代理服务器

  • 步骤7~9:代理服务器转发200 OK回复给User1

3.3、SIP消息体格式

SIP消息体结构 与 HTTP协议类似,均由3部分组成:

  • 请求行(request-line)or 状态行(status-line)

  • 消息头(header)

  • 正文(body)


请求行request-line

请求行格式:Method Request-URI SIP-Version CRLF 请求行举例:INVITE sip:bob@zte.com SIP/2.0 /r/n

  • Method方法:

Method方法说明
REGISTER 注册联系信息
INVITE 发起会话请求
ACK INVITE 请求的响应的确认
CANCEL 取消请求
BYE 终结会话
OPTIONS 查询服务器能力
MESSAGE RFC3428对Sip协议的扩展,增加了MESSAGE方法。采用Pager Model进行通信,传递不超过1300字节的数据。MESSAGE方法详细可参考 “SIP-RFC3428” https://tools.ietf.org/html/rfc3428
  • Request-URI

指示请求的用户或者服务的地址信息

  • SIP-Version

请求和响应消息都需要包含SIP版本信息


状态行status-line

状态行格式: SIP-Version Status-Code Reason-Phrase CRLF 状态行举例:SIP/2.0 200 OK /r/n

  • Status-Code状态码 状态代码由3位数字组成,表示请求是否被理解或被满足。 状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类

第一个数字有五种可能的取值:

状态码含义
1xx 临时响应、表示请求消息正在被处理
2xx 成功响应、表示请求已被成功接收完全理解并接收
3xx 重定向响应、表示需采取进一步完成请求
4xx 客户机错误、表示请求消息中包含语法错误信息或服务器无法完成客户机的请求
5xx 服务器错误、表示服务器无法合法完成请求
6xx 全局故障 、表示任何服务器都无法完成该请求

常用的状态码举例:

状态码msg含义
100 Trying 试呼叫
180 Ringing 振铃
181 Call is、 Being Forwarded 呼叫正在前转
200 OK 成功响应
302 Moved Temporarily 临时迁移
400 Bad Request 错误请求
401 Unauthorized 未授权
403 Forbidden 禁止
404 Not Found 用户不存在
408 Request Timeout 请求超时
480 Temporarily Unavailable 暂时无人接听
486 Busy Here 线路忙
504 Server Time-out 服务器超时
600 Busy Everywhere 全忙

消息头 发送MESSAGE消息给user2

MESSAGE sip:user2@domain.com SIP/2.0
Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
Max-Forwards: 70
From: sip:user1@domain.com;tag=49583
To: sip:user2@domain.com
Call-ID: asd88asd77a@1.2.3.4
CSeq: 1 MESSAGE
Content-Type: text/plain
Content-Length: 18

user2, come here.

Header 字段含义说明:

Header含义说明举例
Call-ID 由本地设备(Client)生成,全局唯一,每次呼叫这个值唯一不变 Call-ID: asd88asd77a@1.2.3.4
From 表示请求的发起者 From: sip:user1@domain.com;tag=49583
To 表示请求的接收者 To: sip:user2@domain.com
Via Via头域是被服务器插入request中,用来检查路由环的,并且可以使response根据via找到返回的路 Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
Max-Forwards 用于表示这个包最多可以传送多少跳,每经过一跳都会减一当Max-Forwards==0系统会返回483。默认为70 Max-Forwards: 70
Contact 包含源的URI信息,用来给响应方直接和源建立连接用 Contact: sip:192.168.100.1:1111
Content-Type 指明消息体的类型 (SDP会话描述协议) Content-Type: text/plain;Content-Type: application/sdp; Content-Type: application/cpim;
Content-Length 指明消息体的字节大小 Content-Length: 18

 

抓包示例:

 

 

TODO:参考博文https://www.cnblogs.com/xiaxveliang/p/12434170.html

posted on 2022-04-10 23:35  Pengshiqiu  阅读(478)  评论(0编辑  收藏  举报