在前面几篇文章中我们介绍了建立p2p通信的一般协议,以及一种完整的NAT传输解决方案ICE, 但是对于多用户的通信情况,还有一些通用协议来实现标准化的管理,如之前提到过的SDP和SIP。
”
01
SDP介绍
前文提到的ICE信息的描述格式通常采用标准的SDP,其全称为Session Descrip tion Protocol,即会话描述协议. SDP只是一种信息格式的描述标准,不属于传输协议,但是可以被其他传输协议用来交换必要的信息,如SIP和RTSP等.
02
SDP信息
一个SDP会话描述包含如下部分:
会话名称和会话目的
会话的激活时间
构成会话的媒体(media)
为了接收该媒体所需要的信息(如地址,端口,格式等)
因为在中途参与会话也许会受限制,所以可能会需要一些额外的信息:
会话使用的的带宽信息
会话拥有者的联系信息
一般来说,SDP必须包含充分的信息使得应用程序能够加入会话,并且可以提供任何非参与者使用时需要知道的资源 状况,后者在当SDP同时用于多个会话声明协议时尤其有用.
SDP格式
SDP是基于文本的协议,使用ISO 106 46字符集和UTF-8编码.SDP字段名称和属性名称只使用UTF-8的一个子集US-ASCI I, 因此不能存在中文.虽然理论上文本字段和属性字段支持全集,但最好还是不要在其中使用中文.
SDP会话描述包含了多行如下类型的文本:
=
其中type是大小写敏感的,其中一些行是必须要有的,有些是可选的,所有元素都必须以固定顺序给出.固定的顺序极大改善了 错误检测,同时使得处理端设计更加简单.
03
SIP简介
SIP(Session Initiation Protocol), 是属于应用层的控制协议,主要用于在一个或多个参与者之间创建,修改和中止会话(sessions).会话的类型包括IP电话, 多媒体流分发和多媒体会议等.
SIP邀请(invitations)用于创建携带会话描述(如SDP信息)的会话,允许参与者使用一系列兼容的媒体类型. SIP使用一种叫代理服务器的元素来帮助对用户当前位置进行转发,对用户进行验证和授权,并为用户提供相应的功能. SIP同时也提供了注册函数以允许用户上传他们的当前地址供代理服务器使用.SIP协议运行在多个不同的传输协议之上.
SIP支持5个方面来建立和中止多媒体会话:
用户地址(User location): 决定了用来通讯的终端系统.
用户状态(User availability): 决定了被呼叫端的是否愿意加入通讯.
用户性能(User capabilities): 决定了多媒体类型和媒体使用的参数.
会话建立(Session setup): “响铃”,在呼叫端和被呼叫端建立起会话.
会话管理(Session management): 包括传输和中止会话,修改会话参数以及调用服务.
SIP不是一个垂直集成的通讯系统,而是作为一个组件与其他协议共同运作,如RTP等实时传输协议等.另外SIP不提供服务, 只提供可以用来实现各种服务的原语.比如,SIP可以定位用户并且传输一个不透明的对象到其当前地址.如果这个原语用来 传输SDP,终端就能得知会话的一些参数;如果同样的原语用来传输一张照片,那也可以实现一种”显示来电者头像”的服务. 由此可见,一种原语通常用来实现多种不同的服务。
SIP协议结构
SIP是一个分层的协议,这意味着其行为由一系列同级但独立的段(stage)描述. SIP的最底层为语法和编码,其中编码由 BNF语法(Backus-Naur Form grammar)指定; SIP第二层为为运输层(transport la yer),定义了客户端和服务端如何发送和接收 请求和响应;第三层为事务层(transa cti on layer),事务层是SIP的基础组件,一次事务包括发送的请求和对应的响应, 事务层处理应用层的重传,请求/响应匹配和超时等;事务层之上称为事务用户(TU, transaction user),每个SIP 实体(除了无状态的代理),都是一个TU.
所有的SIP元素,包括用户客户端(UA C),服务器(UAS),无状态(stateless)或者全状态(stateful)的代理, 以及注册商,都包含一个区分彼此的内核(core). 其中除了无状态的代理,其他元素的内核都是事务用户. UAC和UAS的内核行为依赖于方法,对于所有方法有一些通用规则,这里不细说. 对于UAC而言,这些规则支配 着请求报文的构造.
04
总结
本专题到此告一个段落, 其中有很多细节都没有深入, 如果要根据协议来设计实际的应用,还是需要仔细看一遍RFC协议镞的原文.
基于P2P通信的去中心化,一直是个很令人振奋的话题,无论是在信息技术上,还是在金融,政治上,都有无限潜力,了解作为区块链基础的P2P通信是学习区块链的必经之路。