日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SIP消息路由

發布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SIP消息路由 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文通過一個完整的SIP呼叫實例解釋SIP頭部的一些常見字段,在對這些字段的解釋的同時也闡述了SIP消息的路由過程。下圖是呼叫的消息流示意圖和所有的消息頭部(因為SDP和消息路由無關,故在此省略):

???????????????????? atlanta.com? . . . biloxi.com

???????????????? .????? proxy????????????? proxy???? .

?????????????? .????? ?????????????????????????????????.

?????? Alice's? . . . . . . . . . . . . . . . . . . . .? Bob's

????? softphone??????????????????????????????????????? SIP Phone

???????? |??????????????? |??????????????? |??????????????? |

???????? |??? INVITE F1?? |??????????????? |??????????????? |

???????? |--------------->|??? INVITE F2?? |??????????????? |

???????? |? 100 Trying F3 |--------------->|??? INVITE F4?? |

???????? |<---------------|? 100 Trying F5 |--------------->|

??????? ?|??????????????? |<-------------- | 180 Ringing F6 |

???????? |??????????????? | 180 Ringing F7 |<---------------|

???????? | 180 Ringing F8 |<---------------|???? 200 OK F9? |

???????? |<---------------|??? 200 OK F10? |<---------------|

???????? |??? 200 OK F11? |<---------------|??????????????? |

???????? |<---------------|??????????????? |??????????????? |

???????? |?????????????????????? ACK F12??????????????????? |

???????? |------------------------------------------------->|

???????? |????????????? ?????Media Session????????????????? |

???????? |<================================================>|

???????? |?????????????????????? BYE F13??????????????????? |

???????? |<-------------------------------------------------|

???????? |???????????????????? 200 OK F14?????????????????? |

???????? |------------------------------------------------->|

???????? |????????????????????????????????????????????????? |

?

F1 INVITE Alice -> atlanta.com proxy

?

INVITE sip:bob@biloxi.com SIP/2.0

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

Max-Forwards: 70

To: Bob <sip:bob@biloxi.com>

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

CSeq: 314159 INVITE

Contact: <sip:alice@pc33.atlanta.com>

Content-Type: application/sdp

Content-Length: 142

F2 100 Trying atlanta.com proxy -> Alice

?

SIP/2.0 100 Trying

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

?;received=192.0.2.1

To: Bob <sip:bob@biloxi.com>

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

CSeq: 314159 INVITE

Content-Length: 0

F3 INVITE atlanta.com proxy -> biloxi.com proxy

?

INVITE sip:bob@biloxi.com SIP/2.0

Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

?;received=192.0.2.1

Max-Forwards: 69

To: Bob <sip:bob@biloxi.com>

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

CSeq: 314159 INVITE

Contact: <sip:alice@pc33.atlanta.com>

Content-Type: application/sdp

Content-Length: 142

F4 100 Trying biloxi.com proxy -> atlanta.com proxy

?

SIP/2.0 100 Trying

Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1

?;received=192.0.2.2

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

?;received=192.0.2.1

To: Bob <sip:bob@biloxi.com>

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

CSeq: 314159 INVITE

Content-Length: 0

F5 INVITE biloxi.com proxy -> Bob

?

INVITE sip:bob@192.0.2.4 SIP/2.0

Via: SIP/2.0/UDP server10.biloxi.com;branch=z9hG4bK4b43c2ff8.1

Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1

?;received=192.0.2.2

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

?;received=192.0.2.1

Max-Forwards: 68

To: Bob <sip:bob@biloxi.com>

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

CSeq: 314159 INVITE

Contact: <sip:alice@pc33.atlanta.com>

Content-Type: application/sdp

Content-Length: 142

F6 180 Ringing Bob -> biloxi.com proxy

?

SIP/2.0 180 Ringing

Via: SIP/2.0/UDP server10.biloxi.com;branch=z9hG4bK4b43c2ff8.1

?;received=192.0.2.3

Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1

?;received=192.0.2.2

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

?;received=192.0.2.1

To: Bob <sip:bob@biloxi.com>;tag=a6c85cf

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

Contact: <sip:bob@192.0.2.4>

CSeq: 314159 INVITE

Content-Length: 0

F7 180 Ringing biloxi.com proxy -> atlanta.com proxy

?

SIP/2.0 180 Ringing

Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1

?;received=192.0.2.2

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

?;received=192.0.2.1

To: Bob <sip:bob@biloxi.com>;tag=a6c85cf

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

Contact: <sip:bob@192.0.2.4>

CSeq: 314159 INVITE

Content-Length: 0

F8 180 Ringing atlanta.com proxy -> Alice

?

SIP/2.0 180 Ringing

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

?;received=192.0.2.1

To: Bob <sip:bob@biloxi.com>;tag=a6c85cf

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

Contact: <sip:bob@192.0.2.4>

CSeq: 314159 INVITE

Content-Length: 0

F9 200 OK Bob -> biloxi.com proxy

?

SIP/2.0 200 OK

Via: SIP/2.0/UDP server10.biloxi.com;branch=z9hG4bK4b43c2ff8.1

?;received=192.0.2.3

Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1

?;received=192.0.2.2

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

?;received=192.0.2.1

To: Bob <sip:bob@biloxi.com>;tag=a6c85cf

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

CSeq: 314159 INVITE

Contact: <sip:bob@192.0.2.4>

Content-Type: application/sdp

Content-Length: 131

F10 200 OK biloxi.com proxy -> atlanta.com proxy

?

SIP/2.0 200 OK

Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1

?;received=192.0.2.2

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

?;received=192.0.2.1

To: Bob <sip:bob@biloxi.com>;tag=a6c85cf

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

CSeq: 314159 INVITE

Contact: <sip:bob@192.0.2.4>

Content-Type: application/sdp

Content-Length: 131

F11 200 OK atlanta.com proxy -> Alice

?

SIP/2.0 200 OK

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

?;received=192.0.2.1

To: Bob <sip:bob@biloxi.com>;tag=a6c85cf

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

CSeq: 314159 INVITE

Contact: <sip:bob@192.0.2.4>

Content-Type: application/sdp

Content-Length: 131

F12 ACK Alice -> Bob

?

ACK sip:bob@192.0.2.4 SIP/2.0

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds9

Max-Forwards: 70

To: Bob <sip:bob@biloxi.com>;tag=a6c85cf

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

CSeq: 314159 ACK

Content-Length: 0

F13 BYE Bob -> Alice

?

BYE sip:alice@pc33.atlanta.com SIP/2.0

Via: SIP/2.0/UDP 192.0.2.4;branch=z9hG4bKnashds10

Max-Forwards: 70

From: Bob <sip:bob@biloxi.com>;tag=a6c85cf

To: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

CSeq: 231 BYE

Content-Length: 0

F14 200 OK Alice -> Bob

?

SIP/2.0 200 OK

Via: SIP/2.0/UDP 192.0.2.4;branch=z9hG4bKnashds10

From: Bob <sip:bob@biloxi.com>;tag=a6c85cf

To: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710

CSeq: 231 BYE

Content-Length: 0

1. SIP消息頭部主要字段:

·???????? Request-URIRequest消息的第一行中method后面緊跟的部分就是Request-URI(本例中的sip:bob@biloxi.com)該值在消息經過Proxy之后就有可能發生變化,變成消息路徑中Next HopURI

·???????? To包含的是最終用戶的Public address,消息無論被Proxy多少次該值都不會改變。當最終用戶開始回應第一個Response消息時(比如本例中的180 Ring)會在To中加上本地唯一的一個tag值。

·???????? From包含Request消息發起者的URI,也不會被Proxy改變;在生成Reqeust消息時就會在后面加上一個本地唯一的tag值。

·???????? Call-Id:用來標識一個唯一的Session,整個Session期間的所有消息的Session-Id都是相同的。

·???????? Max-Forwards:消息可被轉發的最大次數,每經過一個Proxy,該值就會被減一。

·???????? CSeq:該屬性由一個整數和一個method名字兩部分組成;整數部分的作用是用來對同一個Session中的Request消息進行排序的;從第一個Invite消息發出后,隨后的所有Request消息(ACK和Cancel除外)中的CSeq值都依次加一。比如Alice與Bob的通話過程中Alice想修改會話的一些屬性,于是她便發起第二個Invite消息,這個Invite消息中的CSeq就需要加一;在比如Alice給Bob發送了一個Invite消息,而Bob發回的200 OK發生延時,于是Alice又發送第二個Invite消息,此時對第一個Invite消息的200 OK到達,Alice根據200 OK中的CSeq便可以知道這是對第一個Invite消息的應答。Request消息Cancel和Ack中的CSeq和與之對應的Invite消息中的CSeq值是一致的。

·???????? Via:該屬性記錄了消息的路由。Request消息被生成的時候只有一個Via,那就是本地的URI,此后消息每經過一個Proxy,Proxy都會在消息中插入一個Via記錄下自己的URI。當最終用戶發揮Response消息時,會從Request消息中拷貝所有的Via,然后按照反序進行路由,每經過一個Proxy,該Proxy就會將包含自己URI的Via刪除,這樣當Response消息最終到達Request發起端的時候就只剩下一個Via了。

·???????? Contact:該屬性包含了用戶可以被直接找到的一個URI,Request發起方會在Request消息中加入該值,接收方會在第一個Response(該例中的180 Ring)中加入該值。利用這個URI,此后再發起Request消息時就直接發送到對方了,而無需經過Proxy,比如本例中的F12 ACK消息,由于之前通過交換Contact值,Alice知道如何能直接找到Bob,于是在第一行的SIP-URI中填上Bob所提供的Contact值,將ACK消息直接發送給Bob而無需經過Proxy,注意To中仍然是原先的值。

·???????? Route and Record-Route:這兩個屬性都是有Proxy加入的;上面提到Contact屬性可以讓隨后的Reqeust消息繞過Proxy而直接發給最終用戶。有時候處于安全或者其他方面的原因,Proxy希望所有的消息都必須經過Proxy,那么這時候Proxy就需要在經過它的第一個Request消息中插入該屬性記錄自己的URI,這樣此后的Request消息就必須按照該屬性中指定的路徑路由。

?

2. 對以上幾個頭部屬性簡單概括一下:

·???????? SIP-URI是一個Hop-to-Hop的屬性,所以有可能被Proxy改變;

·???????? From和To屬性在消息的路由過程中一直保持不變;它們在Request消息中確定,此后對端發來的所有Response消息的From和To都是原樣拷貝Request消息中的From和To;

·???????? Via是用來幫助Response消息進行路由的,Contact是用來供隨后的Request消息進行路由的。

參考資料:

1.? “RFC 3261”- Section 4,Section 12,Section 17,Section 24;

2.? “SIP Demystified”- Chapter 4, Chapter 5;

總結

以上是生活随笔為你收集整理的SIP消息路由的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。