了解sip和rtp是什么
SIP 和 RTP 是互联网实时通信(如语音和视频通话)中两个至关重要、相辅相成的协议。
简单来说:
SIP 负责 建立、管理和终止 通话(信令协议)。
RTP 负责 传输 通话中的音频和视频数据流(媒体传输协议)。
可以把它们想象成一次电话呼叫:
SIP 就像是打电话时的 拨号、振铃、接听和挂断 这一系列控制过程。
RTP 就像是电话接通后,双方实际 说话和交流 的内容。
一、SIP(会话初始协议)
SIP是一个应用层的信令控制协议,用于创建、修改和终止包含一个或多个参与者的多媒体会话。
主要特点
文本协议:类似于HTTP,人类可读,易于调试。
客户端/服务器架构:但同时也支持点对点通信。
不传输媒体数据:只负责会话的信令和控制。
使用端口:通常使用5060(非加密)或5061(TLS加密)。
SIP在通话中的作用
注册(Registration):用户代理(如IP电话、软电话)向SIP服务器注册其当前位置。
邀请(Invitation):主叫方发送INVITE请求给被叫方,发起一个会话。
协商(Negotiation):通过SDP(会话描述协议)交换媒体能力(如使用什么编解码器)。
会话管理:处理呼叫转移、保持、继续、会议等。
终止(Termination):任何一方发送BYE请求来结束会话。
一个简单的SIP呼叫流程
主叫方 (UAC) SIP服务器 被叫方 (UAS)|--- INVITE --------------->| || |--- INVITE ------------>|| |<-- 100 Trying ---------||<-- 100 Trying ------------| || |<-- 180 Ringing --------||<-- 180 Ringing -----------| || |<-- 200 OK -------------||<-- 200 OK ----------------| ||--- ACK ------------------>| || |--- ACK --------------->||********** 此时RTP媒体流建立并开始传输 *************|| |<--- BYE ---------------||<-- BYE -------------------| ||--- 200 OK --------------->| || |--- 200 OK ------------>|
二、RTP(实时传输协议)
RTP是一个网络协议,用于通过IP网络传输音频和视频等实时数据。
主要特点
传输媒体数据:专门用于传输实际的音频、视频流。
实时性:包含时间戳,允许接收方按正确时序重建数据。
无序和丢包处理:包含序列号,用于检测丢包和数据包乱序。
使用动态端口:通常使用偶数端口号(范围16384-32768),其对应的RTCP使用下一个奇数端口。
RTP数据包结构
一个RTP数据包主要包括:
载荷类型(Payload Type):标识音频/视频编解码器(如G.711, H.264)。
序列号(Sequence Number):用于检测丢包和乱序。
时间戳(Timestamp):用于同步和回放。
同步源标识(SSRC):标识数据流来源。
实际媒体数据:编码后的音频或视频帧。
相关协议:RTCP(RTP控制协议)
伴随协议:总是与RTP成对出现,使用RTP端口号+1的奇数端口。
功能:提供媒体传输的质量反馈(QoS),包括:
数据包计数
丢包率
延迟
抖动
不传输媒体数据,只传输控制统计信息,帮助应用程序调整传输质量。
三、SIP和RTP如何协同工作
这是理解两者关系的关键:
协同工作流程
SIP发起呼叫:用户A使用SIP协议向用户B发送INVITE请求。
SDP协商:在SIP消息体中,通过SDP描述媒体信息:
“我想用RTP发送音频”
“我支持的编解码器是:G.711, G.729”
“我的RTP准备在端口20000接收数据”
SIP建立连接:双方通过SIP交换SDP信息,商定共同的编解码器和各自的IP/端口。
RTP开始传输:SIP通话建立后,双方直接在协商好的IP和端口上开始RTP媒体流传输。
SIP管理通话:通话期间,任何控制(如保持、转接)仍通过SIP处理。
SIP结束通话:当一方挂断,SIP发送BYE请求,RTP流随之停止。
关键点
分离的信令和媒体:SIP和RTP的路径甚至可以是不同的网络路径。
SIP负责“通话”,RTP负责“说话”。
NAT穿透问题:由于RTP是独立建立的,穿越防火墙/NAT通常需要STUN、TURN或ICE等辅助技术。
四、实际应用
使用场景
VoIP电话系统(如Asterisk, FreeSWITCH)
视频会议系统(如Zoom, Teams的底层协议)
即时通讯应用的音视频功能
IP监控摄像头的流媒体传输
