SIP报头
报头是传达关于消息的信息的SIP消息的组件。它被构造为头字段序列。
SIP头字段在大多数情况下遵循与HTTP头字段相同的规则。标题字段定义为 Header:字段,其中Header用于表示标题字段名称,字段是包含信息的标记集合。每个字段包含一个字段名称,后跟冒号(“:")和字段值(即字段名称:字段值)。
SIP 报头 - 紧凑型
许多常见的SIP报头字段具有紧凑形式,其中报头字段名称由单个小写字符表示。 一些例子如下:
报头 | 紧凑型 |
---|---|
To | T |
Via | V |
Call-ID | I |
Contact | M |
From | F |
Subject | S |
Content-Length | I |
SIP 报头格式
下图显示了典型SIP报头的结构:
根据其在SIP中的用法,报头被分类如下:
SIP 请求和响应报头字段
Accept
Accept头字段用于在消息正文中指示可接受的消息Internet媒体类型。
- 标题字段描述使用通常在因特网中使用的格式类型/子类型的媒体类型。
- 如果不存在,则假定可接受的消息体格式为 application / sdp 。
- 媒体类型列表可以使用 q 值参数设置首选项。
Accept-Encoding
Accept-Encoding头字段用于指定可接受的消息体编码方案。
- 编码可以用于确保具有大消息体的SIP消息适合单个UDP数据报。
- 使用 q 值参数可以设置首选项。如果所列出的方案都不能被UAC接受,则返回406不可接受的响应。如果不包括,则假设的编码将是 text / plain 。
To
To 表示请求的最终收件人。UA生成的任何响应将包含此标头字段并添加标签。它是必需的头。
- 代理生成的任何响应必须在 To 头字段中添加标签。
- To 头字段URI从不用于路由。
From
From 头字段表示请求的发起者。它是用于标识对话框的两个地址之一。
- A From 头字段可以包含用于标识特定呼叫的标签。
- 它可以包含显示名称,在这种情况下,URI包含在<>。
- 它是必需的头。
Call-ID
Call-ID头字段在所有SIP请求和响应中是强制的。它用于唯一标识两个用户代理之间的呼叫。
- 呼叫ID在呼叫之间必须是唯一的。
- 用户代理的所有注册应使用相同的Call-ID。
- Call-ID始终由用户代理创建,并且不会被服务器修改。
- 它是一个加密随机标识符。
Via
Via用于记录由有助于将响应路由回始发者的请求所采用的SIP路由。
- 生成请求的UA在Via头字段中记录其自己的地址。
- 转发请求的代理将Via头字段包含其自己的地址添加到Via头字段列表的顶部。
- 生成对请求的响应的代理或UA将请求中的所有Via报头字段按顺序复制到响应中,然后将响应发送到在顶部Via报头字段中指定的地址。
- 接收响应的代理检查顶部Via头字段并匹配其自身的地址。
- 如果不匹配,则响应已被丢弃。
- 然后删除顶部Via头字段,并将响应转发到在下一个Via头字段中指定的地址。
- Via头字段包含协议名称,版本号和传输(SIP / 2.0 / UDP,SIP / 2.0 / TCP等),并且可以包含端口号和参数,例如接收的,rport,branch,maddr, b>和 ttl 。
- 如果UA或代理从与在顶部Via头字段中指定的地址不同的地址接收到请求,则将收到的标签添加到Via头字段。
- 分支参数通过UA和代理被添加到Via报头字段,其被计算为Request-URI的哈希函数,以及To,From,Call-ID和CSeq数。
CSeq
CSeq头字段是每个请求中所需的头字段。 它包含对每个请求增加的十进制数。
- 通常,对于每个新请求,除了 CANCEL 和 ACK 请求,它使用它所引用的INVITE请求的CSeq号,它增加1。
- UAS使用CSeq计数来确定失序请求或区分新请求(不同CSeq)或重传(相同CSeq)。
- CSeq头字段由UAC使用以匹配对其引用的请求的响应。
- 例如,发送INVITE请求然后发送CANCEL请求的UAC可以通过CSeq中的方法告知200OK响应,如果它是对邀请或取消请求的响应。
Contact
Contact头字段用于向其他用户传达关于请求发起者的地址。 一旦接收到联系人报头字段,URI可以被缓存并且用于在对话中路由未来的请求。例如,在对INVITE的200OK响应中的联系人报头字段可以允许确认ACK消息和在该呼叫期间的所有未来请求绕过代理并直接去往被叫方。
Record-Route
Record-Route头字段用于强制路由通过代理以用于两个UA之间的会话(对话)中的所有后续请求。
- 通常,Contact头字段的存在允许UA直接绕过初始请求中使用的代理链来发送消息。
- 将其地址插入到记录 - 路由头部字段中的代理覆盖此并且迫使将来的请求包括包含强制该代理被包括的代理的地址的Route头字段。
- 希望实现此操作的代理将插入包含其自己的URI的头字段,或将其URI添加到已经存在的Record-Route头字段。
- 构造URI以便URI解析回代理服务器。 UAS将Record-Route头字段复制到对请求的200 OK响应中。
- 头字段由代理不变地转发回UAC。 然后,UAC存储记录 - 路由代理列表加上联系人头字段(如果在200OK中存在),以便在所有后续请求中的路由头字段中使用。
Organization
组织头字段用于指示消息的发起者所属的组织。
- 它也可以由代理插入,因为消息从一个组织传递到另一个组织。
- 与所有SIP报头字段一样,它可以由代理用于做出路由决定,并且由UA用于进行呼叫筛选决定。
Retry-After
它用于指示资源或服务何时可以再次可用。
- 在503服务不可用响应中,它指示服务器何时可用。
- 在404未找到,600 Busy Everywhere和603拒绝响应中,它指示被叫UA何时可以再次可用。
- 它包含以秒为单位的时间段。
Subject
可选的Subject头字段用于指示媒体会话的主题。报头字段的内容也可以在提醒期间显示,以帮助用户决定是否接受呼叫。
Support
Supported头字段用于列出UA或服务器实现的一个或多个选项。
- 它通常包含在对OPTIONS请求的响应中。
- 如果未实现任何选项,则不包括头字段。
- 如果UAC列出了支持报头字段中的选项,代理或UAS可以在呼叫期间使用该选项。
- 如果必须使用或支持该选项,那么将使用Require头字段。
Expires
当存在于INVITE请求中时,报头字段在INVITE请求的完成时设置时间限制。
- 也就是说,UAC必须在该时间段内接收最终响应(非1xx),或者INVITE请求被408请求超时响应自动取消。
- 一旦建立会话,来自原始INVITE中的Expires头字段的值没有效果 - 为此目的必须使用Session-Expires头字段。
- 如果存在于REGISTER请求中,则头字段在Contact头字段中的URI上设置不包含 expires 参数的时间限制。
- Expires也用于SUBSCRIBE请求中,以指示订阅持续时间。
User-Agent
该报头字段用于传送关于发起请求的UA的信息。
SIP 仅请求报头字段
Authorization
授权报头字段用于将请求中的UA的凭证携带到服务器。可以发送回复包含质询信息的 401未授权响应。
Event
此标头字段用于 SUBSCRIBE 或 NOTIFY 方法中,以指示方法正在使用哪个事件包。
- 在SUBSCRIBE中,它列出客户端想要订阅的事件包。
- 在NOTIFY中,它列出通知包含有关的状态信息的事件包。
Join
Join头字段在INVITE中用于请求将对话(会话)与现有对话(会话)连接。
- Join头字段的参数以与Replaces头字段类似的方式通过Call-ID,To标签和From标签标识对话框。
- 如果Join头域引用两个用户代理之间的点对点对话,Join头字段实际上是将呼叫转入电话会议的请求。
- 如果对话框已经是会议的一部分,则Join头字段是要添加到会议中的请求。
Proxy-Authorization
代理授权报头字段用于将请求中的UA的凭证携带到服务器。
- 它可以被发送回答包含挑战信息的407代理认证请求响应。
- 接收包含代理授权报头字段的请求的代理搜索其自己的领域,并且如果找到,则其处理该条目。
- 如果凭据正确,则任何剩余的条目在转发到下一个代理时保留在请求中。
Proxy-Require
Proxy-Require头字段用于列出UA需要代理来支持以处理请求的功能和扩展。
- 代理列出不支持的标题字段中的任何不支持的功能时,会返回420错误的扩展响应。
- 如果希望但不需要支持此选项,则会在支持头字段中列出。
Max-Forwards
Max-Forwards报头字段用于指示SIP请求可能采用的最大跳数。
- 头域的值由转发请求的每个代理减少。
- 接收到具有零值的报头字段的代理丢弃该消息,并向始发者发送483 Too Many Hops响应。
- Max-Forwards是根据RFC 3261的请求中的强制报头字段。
- 建议值为70跳。
Priority
- 优先级报头字段由UAC用来设置请求的紧急性。 价值观是非紧急,正常,紧急和紧急。
Refer-To
- Refer-To头字段是REFER请求中的必需头字段,其中包含要引用的URI或URL资源。 它可以包含从sip或sips到telURI的任何类型的URI。
Referred-By
- Referred-By报头字段是REFER请求中的可选报头字段和由REFER触发的请求。
- 它向触发请求的接收者提供作为REFER的结果生成请求的信息以及REFER的发起者。
- 可通过 429提供Referror 身份响应代码拒绝未签名的Referred-By头字段。
Replaces
Replaces 用于将新呼叫替换为现有呼叫。
- 在已建立的对话中接收具有与现有对话匹配的Replaces头字段的另一INVITE的UA必须接受INVITE,用BYE终止现有对话,并且将所有资源和状态从现有对话转移到新建立的对话。
- 如果Replaces头字段没有匹配任何对话框,则必须拒绝INVITE,并返回481 Dialog Does Not Exist响应。
Request-Disposition
- 请求处理头字段可以用于请求服务器进行代理,重定向。
Require
Require 头字段用于列出UAC要求UAS支持以处理请求的功能和扩展。A 420返回一个420扩展响应,列出不支持的头字段中的任何不支持的功能。
Route
Route 头字段用于为请求提供路由信息。
- RFC 3261引入两种类型的路由:严格路由和松散路由,它们具有与相同名称的IP路由模式相似的含义。
- 在严格路由中,代理必须使用Route头字段中的第一个URI来重写Request-URI,然后将其转发。
- 在松散路由中,代理不会重写Request-URI,而是将请求转发到Route头字段中的第一个URI或另一个松散的路由元素。
- 在松散路由中,请求必须路由通过路由列表中的每个服务器,然后它可以基于请求URI路由。
- 在严格路由中,请求必须只路由通过路由头字段中的服务器集,其中在每一跳处重写Request-URI。
- 代理或UAC可以通过lr参数的存在来判断路由集中的下一个元素是否支持松散路由。
RAck
在对PRACK请求的响应中使用 RAck 头字段,以可靠地确认包含RSeq头字段的临时响应。
- 其值是来自临时响应的CSeq和RSeq的组合。
- 对于每个可靠发送的响应,可靠的序列号递增。
Session-Expires
Session-Expires 头字段用于指定会话的到期时间。
- 为了扩展会话,UA可以发送具有新的Session-Expires头字段的re-INVITE或UPDATE。
- 一旦呼叫建立,它就会出现。
SIP-If-Match
SIP-If-Match报头字段是SIP发布机制的一部分。 它包含在PUBLISH请求中,用于刷新,修改或删除以前发布的状态。
- 头字段包含在对较早发布的2xx响应中的SIP-ETag头字段中返回的状态信息的实体标签。
- 如果实体标签不再有效,则服务器将返回412条件请求失败响应。
Subscription-State
Subscription-State头字段是NOTIFY请求中的必需头部字段。 它指示预订的当前状态。 定义的值包括活动,挂起或终止。
SIP 仅响应报头字段
Min-Expires
Min-Expires 头字段用于来自注册器拒绝REGISTER请求的423间隔太简要响应,其中一个或多个联系人的到期时间太短。
- 头字段包含表示注册器将接受的最小到期间隔的整数秒。
- 接收到该报头字段的客户端可以相应地更新注册请求的到期间隔,并重新发送REGISTER请求。
Min-SE
在422会话定时器间隔太小响应中,Min-SE 头字段是必需的头字段。该响应还可以存在于包含会话期满报头字段的INVITE或UPDATE中。 它包含整数秒。
Proxy-Authenticate
代理认证头字段用于由代理服务器向UAC进行的407代理认证请求认证询问。它包含质询的性质,使得UAC可以在随后请求中的代理授权报头字段中制定凭证。
SIP-ETag
SIP-ETag 头字段是SIP发布机制的一部分。 SIP-ETag报头字段在对发布请求的2xx响应中返回。
- 它包含唯一标识已处理的状态信息的实体标签。
- 然后,该实体标签可用于对此数据执行条件发布,包括刷新,修改和删除。
Unsupported
Unsupported 头字段用于表示服务器不支持的功能。标头字段用于对包含Require头字段中列出的不受支持功能的请求的420 Bad Extension响应中。
WWW-Authenticate
WWW-Authenticate 头字段用于UA或注册服务器到UAC的401未授权身份验证质询。它包含质询的性质,以便UAC可以在后续请求中的代理授权报头字段中制定凭证。
RSeq
RSeq 头字段用于临时(1xx类)对INVITE的响应,以请求可靠的传输。
- 仅当INVITE请求包含Supported:rel100头字段时,才可以使用头字段。
- 如果存在于临时响应中,则UAC应该使用PRACK方法来确认接收到响应。
- RSeq头字段包含作为由UAS随机初始化的整数的可靠序列号。
- 对于该对话可靠发送的每个后续临时响应将具有单调递增的RSeq数。
- UAS将重传可靠发送的响应,直到接收到具有包含可靠序列号和CSeq的RAck的PRACK。
SIP 消息体报头字段
Content-Encoding
Content-Encoding 头字段用于表示所列出的编码方案已应用于邮件正文。它允许UAS确定解释消息体所必需的解码方案。
- 仅可以使用在允许 - 编码头部字段中列出的那些编码方案。
- 紧凑形式是 e 。
Content-Disposition
Content-Disposition 头字段用于描述消息体的功能。 值包括会话,图标,警报和呈现。值会话指示消息体包含用于描述媒体会话的信息。
Content-Language
Content-Language 头字段用于指示邮件正文的语言。 它包含一个标识语言的语言标记。
Content-Length
Content-Length 用于指示消息体中的八位字节数。Content-Length:0表示没有消息体。
Content-Type
Content-Type 头字段用于指定邮件正文中的Internet媒体类型。
- Content-Type 头字段用于指定邮件正文中的Internet媒体类型。…
- 如果此头字段不存在,则假定为application / sdp。
- 如果请求中存在Accept头字段,则响应Content-Type必须包含列出的类型,或者必须返回415不支持的媒体类型响应。
- 紧凑形式是 c 。
MIME-Version
MIME-Version 头字段用于指示用于构造消息体的MIME协议的版本。SIP,如HTTP,不被认为是MIME兼容,因为解析和语义由SIP标准定义,而不是MIME规范。 版本1.0是默认值。