SIP流程图樊瑞2007-5-19大纲•SIP流程图•SIP注册•SIP会话建立与结束SIP流程图LocationServicebiloxi.comproxyatlanta.comproxyAlice’ssoftphoneBob’sSIPphoneSIPRegistration1REGISTERsip:registrar.biloxi.comSIP/2.0Request-URI指定了注册时所需的LocationService的域名;branch=z9hG4bKnashds7Max-Forwards:70To:Bobsip:bob@biloxi.comFrom:Bobsip:bob@biloxi.com;tag=456248Call-ID:843817637684230@998sdasdh09CSeq:1826REGISTERContact:sip:bob@192.0.2.4Expires:7200Content-Length:0Via:SIP/2.0/UDPbobspc.biloxi.com:5060To中包含了注册时的地址记录,用于注册时创建、查询和修改。必须是一个SIPURI或SIPSURI,并包含一个username。注册时From和To的内容一般是相同的,除非是由第三方发起注册。相同的UA发送出的注册requests中,Call-ID是一样的。这样可以检测由于传输延时而导致的注册失败。Cseq值保证了REGISTERrequest的正确顺序。如果到来的REGISTERrequest具有相同的Call-ID,其值随着request到来递增。REGISTER请求可以有一个Contact头域。这个头域可以有0个或者多个包含绑定地址信息的值。Expires参数表明UA的绑定的有效时间。是一个以秒为单位的整数。按规定,在没有收到对上一个注册request的response或确定超时之前,UA禁止发送新的注册request(新的request指的是包含新的Contact头域值的request,指的不是重发原有的request)。F1biloxi.comregistrarLocationServicebiloxi.comregistrarbiloxi.comproxyatlanta.comproxyAlice’ssoftphoneBob’sSIPphoneSIPRegistration2F2StoreSIP/2.0200OK;branch=z9hG4bKnashds7Max-Forwards:70To:Bobsip:bob@biloxi.comFrom:Bobsip:bob@biloxi.com;tag=456248Call-ID:843817637684230@998sdasdh09CSeq:1826REGISTERContact:sip:bob@192.0.2.4Expires:7200Content-Length:0Via:SIP/2.0/UDPbobspc.biloxi.com:5060;received=192.0.2.4;tag=2493k59kd注册服务器返回response时会在Via头中加上”received”参数,里面是request的源地址。Response是协议版本号、Status-Code和原因说明组成Response要在To头中加上”tag”,这时将会形成一个完整的Dialog,以后To头将一直包含这个tag。SessionSetup1biloxi.comproxyAlice’ssoftphoneBob’sSIPphoneINVITEsip:bob@biloxi.comSIP/2.0;branch=z9hG4bKnashds8Max-Forwards:70To:Bobsip:bob@biloxi.comFrom:Alicesip:alice@atlanta.com;tag=1928301774Call-ID:a84b4c76e66710CSeq:314159INVITEContact:sip:alice@pc33.atlanta.comContent-Type:application/sdpContent-Length:142Via:SIP/2.0/UDPpc33.atlanta.com(Alice‘sSDPnotshown)F1atlanta.comproxyVia头里定义了transaction传输的下层传输协议(UDP),并标识response将要被发送的地址(pc33.atlanta.com)。Via字段必须包含branch参数,以z9hG4bk开头的随机字符,用来标识当前request所建立的transaction。在INVITErequest中,Request-URI与To头里的URI是相同的。Max-Forwards头限定一个request在到达目的地之前允许经过的最大跳数。它包含一个整数值,每经过一跳,这个值就被减一。To头指定request的逻辑接收者或者是用户或资源的注册地址,该地址同样是作为request的目标地址。由于dialog还没有建立,所以没有tag参数。From头是指示request发起方的逻辑标识,它可能是用户的注册地址。From头包含一个URI和一个可选的显示名称。From头中必须包含一个新的由UAC选定的tag参数用来标识一个dialog。Content-Type头指定消息体的媒体类型。SDP定义在RFC2327。Contact头指定一个SIP或SIPSURI,后续请求requests可以用它来联系到当前UA。Cseq头用于标识transations并对transactions进行排序。它由一个请求方法requestmethod和一个序列号组成,请求方法必须与对应的request类型一致。Call-ID头是用来将消息分组的唯一性标识。本协议规定,在一个对话中,UA发送的所有requests和responses都必须有同样的Call-ID。一个UA每次注册所用的Call-ID也应是一样的。Alice的UA不知道Bob的UA地址,也不知道Bob在biloxi.com域内的服务器。因此,Alice的UA向Alice所在域atlanta.com的SIP服务器发送INVITErequest,该SIP服务器的地址可以预先配置在Alice的softphone里,也可以通过DHCP等查找。atlanta.com代理服务器是通过DNS查找来找到在Bob的域biloxi.com内的SIP代理服务器的。(见RFC3263)Alice’ssoftphoneatlanta.comproxyBob’sSIPphoneSessionSetup2SIP/2.0100Trying;branch=z9hG4bKnashds8;received=192.0.2.1To:Bobsip:bob@biloxi.comFrom:Alicesip:alice@atlanta.com;tag=1928301774Call-ID:a84b4c76e66710CSeq:314159INVITEContent-Length:0Via:SIP/2.0/UDPpc33.atlanta.comF2;branch=z9hG4bK77ef4c2312983.1INVITEsip:bob@biloxi.comSIP/2.0;branch=z9hG4bKnashds8Max-Forwards:69From:Alicesip:alice@atlanta.com;tag=1928301774Call-ID:a84b4c76e66710CSeq:314159INVITEContact:sip:alice@pc33.atlanta.comContent-Type:application/sdpContent-Length:142Via:SIP/2.0/UDPpc33.atlanta.com(Alice‘sSDPnotshown)Via:SIP/2.0/UDPbigbox3.site3.atlanta.com;received=192.0.2.1To:Bobsip:bob@biloxi.comF3Max-Forwards值递减1。received参数包含一个实际发送request的地址。bigbox3.site3.atlanta.com检查第一个Via包里的域名或地址,发现包含一个不同于数据包源地址的域名或IP地址,就在前一跳的Via字段中插入一个包含实际发送该数据包的地址的参数。在前向发送forwardingINVITErequest时,atlanta.com服务器添加一个Via头,里面包含自身的地址(bigbox3.site3.atlanta.com)和新的branch参数。biloxi.comproxy100(Trying)response包含与INVITErequest相同的To、From、Call-ID和CSeq。atlanta.com的代理服务器建立的Via头被添加上了received参数。在向前发送INVITErequest时,biloxi.com服务器添加一个包含自身地址的Via头。SessionSetup3biloxi.comproxyatlanta.comproxyAlice’ssoftphoneBob’sSIPphoneLocationServiceResponseQuerySIP/2.0100Trying;branch=z9hG4bKnashds8;received=192.0.2.1To:Bobsip:bob@biloxi.comFrom:Alicesip:alice@atlanta.com;tag=1928301774Call-ID:a84b4c76e66710CSeq:314159INVITEContent-Length:0Via:SIP/2.0/UDPpc33.atlanta.com;branch=z9hG4bK77ef4c2312983.1Via:SIP/2.0/UDPbigbox3.site3.atlanta.com;received=192.0.2.2F5F4INVITEsip:bob@192.0.2.4SIP/2.0;branch=z9hG4bKnashds8;received=192.0.2.1To:Bobsip:bob@biloxi.comFrom:Alicesip:alice@atlanta.com;tag=1928301774Call-ID:a84b4c76e66710CSeq:314159INVITEVia:SIP/2.0/UDPpc33.atlanta.com;branch=z9hG4bK77ef4c2312983.1Via:SIP/2.0/UDPbigbox3.site3.atlanta.com;received=192.0.2.2;branch=z9hG4bK4b43c2ff8.1Via:SIP/2.0/UDPserver10.biloxi.comMax-Forwards:68Contact:sip:alice@pc33.atlanta.comContent-Type:application/sdpContent-Length:142(Alice‘sSDPnotshown)代理服务器向本地数据库查询,找到Bob当前的IP地址。SessionSetup4biloxi.comproxyatlanta.comproxyAlice’ssoftphoneBob’sSIPphoneF6SIP/2.0180Ringing;branch=z9hG4bKnashds8;received=192.0.2.1To:Bobsip:bob@biloxi.comFrom:Alicesip:alice@atlanta.com;tag=1928301774Call-ID:a84b4c76e66710CSeq:314159I