简单介绍sip协议message方法

简单介绍sip协议message方法

实验环境

通过实验抓取message报文进行分析。
sip server采用的是brekeke(可以官网免费下载,获取60天使用)。具体安装过程见博客:https://blog.csdn.net/chennai1101/article/details/73800252
client 采用的是OfficeSip Messenger,配上电话号和server ip,建议不要勾选find server automatically,使用中发现是个坑。
client 配置
拓扑都是直连,有两台client(8001:192.168.11.30和8002:192.168.12.40),server 和8002在一台PC上,8001和8002中间没有经过NAT设备和ALG。

报文交互过程

交互过程
在这里插入图片描述
在client8001端抓包,对应报文如下
在这里插入图片描述

  1. 报文都是经过tcp协议交互,client访问的都是server的5060端口;
  2. 对端回复message的200 OK回应,发送端将认为消息已经被成功发送到目的地,并不能确保消息已经被阅读,此时发送端将回复ack确认;
  3. 具体报文内容,从8001发给8002
    【request-line】识别message方法,访问对端5060端口,协议是tcp
    MESSAGE sip:192.168.12.40:5060;transport=tcp;ftag=b2f4086451;lr SIP/2.0
    【Message-Header】
    Via: SIP/2.0/TCP 192.168.11.30:51287
    Max-Forwards: 70
    From: sip:[email protected];tag=b2f4086451;epid=be02eb536a
    To: sip:[email protected];tag=5fd432dc1a
    Call-ID: 3c65bb89c0c54e5292c9915d06d71472
    CSeq: 3 MESSAGE
    Route: sip:[email protected]:5060;transport=tcp
    User-Agent: UCCAPI/2.0.6362.123
    Supported: timer
    Proxy-Authorization: Digest username=“8001”, realm=“test-PC”, algorithm=MD5, uri=“sip:192.168.12.40:5060;transport=tcp;ftag=b2f4086451;lr”, nonce=“3560e271627a355929049676e46a79fd33c648e3”, response=“b69a1dcf61c566edebbfe8d4013f3fe7”
    【Message-Body】
    Content-Type: text/enriched
    Content-Length: 364

{\rtf1{*\officesip{\xfont 微软é
é»;}\xsize18}\ansi\ansicpg1252\uc1\htmautsp\deff2{\fonttbl{\f0\fcharset0 Times New Roman;}{\f2\fcharset134 'ce’a2’c8’ed’d1’c5’ba’da;}}{\colortbl\red0\green0\blue0;\red255\green255\blue255;}\loch\hich\dbch\pard\plain\ltrpar\itap0{\lang1033\fs18\f2\cf0 \cf0\ql{\f2 {\lang2052\ltrch test}\li0\ri0\sa0\sb0\fi0\ql\par}
}
}

  1. 如果 Call-id 、Form tag、 To tag 相同代表是同一个dialog
  2. via标记了请求所经过的节点,让回复的响应能够按照via的标记返回
  3. Route set(一个请求或应答中可以包含多个Route标记,这些Route标记称为Route Set)的作用是强制请求必须从Route set中设定的节点通过,Route set的生成可以是手动配置也可以是协议自己生成,需要手动配置的情况如,客户端向registar注册的时候,registar的路径就应该是通过手动配置,协议自己生成的情况如在对话生成前各个proxy往请求中添加Record-Route为了让后续的请求能继续通过该proxy发送,当对话建立好后就确定了后续的请求该走的路由,之后将Record-Route中的记录登记在Route set中来强制请求的路由。(摘自https://blog.csdn.net/heibao111728/article/details/80612323)
  4. CSeq 其生存域是一个会话。用于将一个会话中的请求消息序列化,以便用于重复消息、“迟到”消息的检测,响应消息与相应请求消息的匹配等。包含两部分:一个32位的序列号,一个请求方法。 通常在会话开始时确定一个初始值,其后再发送消息时将该值加1。主叫方与被叫叫各自维护自己的CSeq序列,互不干扰,这有点像TCP/IP中IP包的序列号。 一个响应消息有与其对应的请求消息相同的CSeq值。 【注意】SIP中CANCEL消息与ACK消息总是比较特殊。CANCEL消息的CSeq中的序列号总是跟其要cancel的消息的相同,而对于ACK消息:如果它所要确认的是INVITE请求的non-2xx响应,则ACK消息的CSeq中的序列号与对应INVITE请求的相同;如果是2xx响应,则不同,此时ACK被当作一个新的事务。(摘自https://www.jianshu.com/p/7d8bc11a13bc)

猜你喜欢

转载自blog.csdn.net/ly_6118/article/details/88425335