1、SIP流程图大纲 SIP流程图 SIP注册 SIP会话建立与结束SIP 流程图流程图Location S proxyAlices soft phoneBobs SIP phoneSIP Registration 1Request-URI指定了注 册时所需的Location Service的域名REGISTER sip: SIP/2.0 Via:SIP/2.0/UDP :5060;branch=z9hG4bKnashds7Max-Forwards:70To:Bob From:Bob;tag=456248Call-ID:843817637684230998sdasdh09 CSeq:1826 RE
2、GISTERContact:Expires:7200Content-Length:0To中包含了注册时的地址 记录,用于注册时创建、查询和修改。必须是一个SIP URI或SIPS URI,并包含一个user name。注册时From和To的内容一 般是相同的,除非是由第 三方发起注册。相同的UA发送出的注册 requests中,Call-ID是一样 的。这样可以检测由于传 输延时而导致的注册失败。Cseq值保证了REGISTER request的正确顺序。如果 到来的REGISTER request具有相同的Call-ID,其值随着request到来递增。REGISTER请求可以有一个 Con
3、tact头域。这个头域可 以有0个或者多个包含绑定绑定 地址地址信息的值。Expires参数表明UA的绑定 的有效时间。是一个以秒 为单位的整数。按规定,在没有收到对上一个注册按规定,在没有收到对上一个注册request的的response或确定超时之前或确定超时之前,UA禁止发送新的注禁止发送新的注册册request(新(新 的的request指的是包含新指的是包含新的的Contact头头 域值的域值的request,指的不是重发原有,指的不是重发原有 的的request)。)。F registrarLocation S proxyAlices soft phoneBobs SIP phon
4、eSIP Registration 2F2StoreSIP/2.0 200 OKVia:SIP/2.0/UDP :5060;branch=z9hG4bKnashds7;received=192.0.2.4 Max-Forwards:70To:Bob;tag=2493k59kdFrom:Bob;tag=456248Call-ID:843817637684230998sdasdh09 CSeq:1826 REGISTERContact:Expires:7200Content-Length:0注册服务器返回response 时会在Via头中加上”received”参数,里面是 request的源地址
5、。Response是协议版本号、Status-Code和原因说 明组成Response要在To头中加 上”tag”,这时将会形成一 个完整的Dialog,以后To 头将一直包含这个tag。Session Setup proxyAlices soft phoneBobs SIP phoneINVITE sip: SIP/2.0 Via:SIP/2.0/UDP ;branch=z9hG4bKnashds8Max-Forwards:70To:Bob From:Alice;tag=1928301774Call-ID:a84b4c76e66710 CSeq:314159 INVITEContact:Co
6、ntent-Type:application/sdp Content-Length:142(Alices SDP not shown)F proxyVia头里定义了transaction传输的下 层传输协议(UDP),并标识response 将要被发送的地址()。Via字段必须包含branch参数,以z9hG4bk开头的随机字符,用来标 识当前request所建立的transaction。在INVITErequest 中,Request-URI与 To头里的URI 是相同的。Max-Forwards头限定一个request在 到达目的地之前允许经过的最大跳数。它包含一个整数值,每经过一跳,这
7、个值就被减一。To头指定request的逻辑接收者或者是用户或资源的注册地址,该地址同样是作为 request的目标地址。由于dialog还没有建立,所以没有tag参数。From头是指示request发起方的逻辑标识,它可能是用户的注册地址。From 头包 含一个URI和一个可选的显示名称。From 头中必须包含一个新的由UAC选定的 tag参数用来标识一个dialog。Content-Type头指定消息体的媒体类型。SDP定义在RFC 2327。Contact头指定一个SIP或SIPS URI,后续请求requests可以用它来联系到当前UA。Cseq头用于标识transations并对tr
8、ansactions进行排序。它由一个请求方法request method和一个序列号组成,请求方法必须与对应的request类型一致。Call-ID头是用来将消息分组的唯一性标识。本协议规定,在一个对话中,UA发送 的所有requests和responses都必须有同样的Call-ID。一个UA每次注册所用的Call-ID也应是一样的。Alice的UA不知道Bob的UA地址,也不知道Bob 在域内的服务器。因此,Alice的UA向 Alice所在域的SIP服务器发送INVITE request,该SIP服务器的地址可以预先配置在 Alice的soft phone里,也可以通过DHCP等查找。
9、代理服务器是通过DNS 查找来找到在Bob的域内 的SIP代理服务器的。(见RFC 3263)Alices soft proxyBobs SIP phoneSession Setup 2SIP/2.0 100 Trying;branch=z9hG4bKnashds8;received=192.0.2.1To:Bob From:Alice;tag=1928301774Call-ID:a84b4c76e66710CSeq:314159 INVITEContent-Length:0Via:SIP/2.0/UDP F2;branch=z9hG4bK77ef4c2312983.1INVITE sip:
10、SIP/2.0From:Alice;tag=1928301774Call-ID:a84b4c76e66710CSeq:314159 INVITEContact:Content-Type:application/sdp Content-Length:142Via:SIP/2.0/UDP ;branch=z9hG4bKnashds8(Alices SDP not shown)Via:SIP/2.0/UDP ;received=192.0.2.1Max-Forwards:69To:Bob F3Max-Forwards值递减1。received参数包含一个实际发送request的 地址。 检查第一个
11、Via包里的域名或地址,发现包含一个不同于 数据包源地址的域名或IP地址,就在前一跳 的Via字段中插入一个包含实际发送该数据包 的地址的参数。在前向发送forwarding INVITE request时,服务器添加一个Via头,里面包含 自身的地址()和新 的branch参数。 proxy100(Trying)response包含与INVITE request相同的To、From、Call-ID和CSeq。的代理服务器建立的Via头被添加上了received参数。在向前发送INVITE request时,服务器添加一个包含自身地址的Via头。Session Setup proxyAlice
12、s soft phoneBobs SIP phoneLocation ServiceResponseQuerySIP/2.0 100 Trying;branch=z9hG4bKnashds8;received=192.0.2.1To:Bob From:Alice;tag=1928301774Call-ID:a84b4c76e66710 CSeq:314159 INVITEContent-Length:0Via:SIP/2.0/UDP ;branch=z9hG4bK77ef4c2312983.1Via:SIP/2.0/UDP ;received=192.0.2.2F5F4INVITE sip:b
13、ob192.0.2.4 SIP/2.0Via:SIP/2.0/UDP ;branch=z9hG4bK4b43c2ff8.1Via:SIP/2.0/UDP ;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via:SIP/2.0/UDP ;branch=z9hG4bKnashds8;received=192.0.2.1 Max-Forwards:68To:Bob From:Alice;tag=1928301774Call-ID:a84b4c76e66710 CSeq:314159 INVITEContact:Content-Type:applica
14、tion/sdp Content-Length:142(Alices SDP not shown)代理服务器向本地数据库查 询,找到Bob当前的IP地址。Session Setup proxyAlices soft phoneBobs SIP phoneF6SIP/2.0 180 RingingVia:SIP/2.0/UDP ;branch=z9hG4bK4b43c2ff8.1;received=192.0.2.3Via:SIP/2.0/UDP ;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via:SIP/2.0/UDP ;branch=z9
15、hG4bKnashds8;received=192.0.2.1To:Bob;tag=a6c85cfFrom:Alice;tag=1928301774Call-ID:a84b4c76e66710 CSeq:314159 INVITEContact:Content-Length:0F6To头中添加了tag标签,用来标识一 个dialog中的被叫方。尽管dialog还没 有建立好,但是用来标识一个完整 dialog的三个参数:Call-ID,本地tag,远端tag已经定义好了。Contact头提供了用来向Bob UA发送后 续requests的SIP URI或SIPS URI。其他头(From、Ca
16、ll-ID,CSeq和底部 的Via)直接从INVITE request复制过来。Bob的SIP电话响铃,回应一个 180 Ringing的response,按照相 反的方向传给的代理(最顶上的Via头)。Session Setup proxyAlices soft phoneBobs SIP phoneFrom:Alice SIP/2.0 180 RingingVia:SIP/2.0/UDP ;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via:SIP/2.0/UDP ;branch=z9hG4bKnashds8;received=192.
17、0.2.1To:Bob;tag=a6c85cf;tag=1928301774Call-ID:a84b4c76e66710 CSeq:314159 INVITEContact:Content-Length:0F7收到来自Bob UA的180 Ringing 消息后,最顶上的Via头中的 branch参数帮助服 务器用来接收对应的 transaction。然后移除掉这个Via头,并将此消息发送到下 一跳:的代理。Session Setup proxyAlices soft phoneBobs SIP phoneSIP/2.0 180 RingingVia:SIP/2.0/UDP ;branch=z
18、9hG4bKnashds8;received=192.0.2.1To:Bob;tag=a6c85cfFrom:Alice;tag=1928301774Call-ID:a84b4c76e66710 CSeq:314159 INVITEContact:Content-Length:0F8收到来自代理服务器 的180 Ringing消息后,最顶上 的Via头中的branch参数帮助 服务器用来接收对 应的transaction。然后移除掉 这个Via头,并将此消息发送到 下一跳:Alice UA。Alice的soft phone将响铃信息 传给Alice,使用一个响铃声音 或者在Alice的屏幕显示
19、一个呼 叫的消息。 proxyAlices soft phoneBobs SIP phoneSession Setup 7F9SIP/2.0 200 OKVia:SIP/2.0/UDP ;branch=z9hG4bK4b43c2ff8.1;received=192.0.2.3Via:SIP/2.0/UDP ;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via:SIP/2.0/UDP ;branch=z9hG4bKnashds8;received=192.0.2.1To:Bob;tag=a6c85cfFrom:Alice;tag=1928301
20、774Call-ID:a84b4c76e66710 CSeq:314159 INVITEContact:Content-Type:application/sdp Content-Length:131(Bobs SDP not shown)在代理和Bobs UA之间,由CSeq:314159 INVITE/branch=z9hG4bK4b43c2ff8.1 代表的transaction事务,被这个200(OK)response终结。当Bob接起电话,他的SIP phone发 送200(OK)response表示电话已经 被接通。200(OK)包含一个SDP信 息体,里面说明了Bob愿意与Alic
21、e 建立会话的类型的媒体描述。Session Setup proxyAlices soft phoneBobs SIP phoneF10SIP/2.0 200 OK;branch=z9hG4bKnashds8;received=192.0.2.1To:Bob;tag=a6c85cfFrom:Alice;tag=1928301774Call-ID:a84b4c76e66710CSeq:314159 INVITEVia:SIP/2.0/UDP Via:SIP/2.0/UDP ;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Contact:Conte
22、nt-Type:application/sdp Content-Length:131(Bobs SDP not shown)在代理和 代理之间,由 CSeq:314159 INVITE/branch=z9hG4bK77ef4c2312983.1代表的transaction 事务,被这个200(OK)response终结。Session Setup proxyAlices soft phoneBobs SIP phoneF11SIP/2.0 200 OKVia:SIP/2.0/UDP ;branch=z9hG4bKnashds8;received=192.0.2.1To:Bob;tag=a6c8
23、5cfFrom:Alice;tag=1928301774Call-ID:a84b4c76e66710CSeq:314159 INVITEContact:Content-Type:application/sdp Content-Length:131(Bobs SDP not shown)在代理和Alices UA之间,由CSeq:314159INVITE”/branch=z9hG4bKnas hds8”代表的transaction事务,被这个200(OK)response终结。Alice的电话停止响铃声音,提示对方已经接通。 proxyAlices soft phoneBobs SIP phon
24、eSession Setup 10ACK sip:bob192.0.2.4 SIP/2.0Content-Length:0Via:SIP/2.0/UDP ;branch=z9hG4bKnashds9Max-Forwards:70To:Bob;tag=a6c85cfFrom:Alice;tag=1928301774Call-ID:a84b4c76e66710 CSeq:314159 ACKF12Alice的soft phone发 送一个ACK给Bob的 SIP phone用于确定收 到了最终响应(200 response)。 proxyAlices soft phoneBobs SIP phon
25、eSession Setup 11Media SessionAllce与Bob的媒体会话现在开 始,他们使用在SDP中协商的 格式发送媒体包。一般来讲,端到端的媒体包与SIP信令的 路径不一样。SDP中常用到的 媒体类型包括:audio,video,application,data,control等等。 proxyAlices soft phoneBobs SIP phoneSession Setup 12Content-Length:0BYE sip: SIP/2.0 Via:SIP/2.0/UDP 192.0.2.4;branch=z9hG4bKnashds10Max-Forwards:7
26、0From:Bob;tag=a6c85cfFrom:Alice;tag=1928301774Call-ID:a84b4c76e66710 CSeq:231 BYEF13最后,Bob挂掉了电 话,他的电话产生了 BYE request消息。这 个BYE消息不经过代理 直接传到了Alice的 soft phone端。 proxyAlices soft phoneBobs SIP phoneSession Setup 13Content-Length:0SIP/2.0 200 OKVia:SIP/2.0/UDP 192.0.2.4;branch=z9hG4bKnashds10From:Bob;tag=a6c85cfFrom:Alice;tag=1928301774Call-ID:a84b4c76e66710 CSeq:231 BYEF14Alice确认收到了BYE,向 Bob发送200(OK)response,就此终结此次会话和BYE事务。 proxyAlices soft phoneBobs SIP phoneSession Setup end谢谢观看!