rfc5245--概要翻譯1

前言:

rfc5245介紹了 NAT下p2p的解決框架ICE(Interactive Connectivity Establishment)

此文檔取代了過時的rfc4091, rfc4092 

rfc6336上有rfc5245的更新

很多次關鍵的不翻譯了

對此rfc的翻譯正確性不做任何保證。按照它而導致的任何問題後果自負。轉載請註明原地址。


1-介紹

rfc3264介紹通過SDP傳輸媒體會話信息,它的機制(offer/answer)由sip提供

offer/answer在NAT環境下實現困難。原因offer/answer是爲了建立媒體流的直接傳輸(譯註:p2p),而NAT下p2p是有困難的。

有很多其他機制解決這樣的問題(如ALGS,Middlebox Control Protocol,STUN等),但這些方案對網絡拓撲適應性差。我們要個一攬子解決方案。

ICE解決了UDP下的媒體流跨NATp2p問題(ICE可以擴展以用於TCP)。ICE是個擴展的offer/answer,在SDP的offer/answer中增加多個用於p2p連接檢查的IP:port對(就像STUN)。ICE還用到了TURN。ICE可用於多宿主雙棧主機

2--概要

下面是大體拓撲圖


ICE的思路:每個Agent有很多候選的傳輸層地址(即UDP的IP:port對)(下面稱候選地址),它可以用來和別的agent通信。這些地址包括:

直接相連的地址(A transport address on a directly attached network interface)

NAT外網的轉義地址(服務自反地址)(A translated transport address on the public side of a NAT (a  "server reflexive" address))

TURN分配的地址(中繼地址)(A transport address allocated from a TURN server (a "relayed  address"))

上圖的L候選地址理論上都可以用來和R的候選地址通信,但事實不行。ICE通過系統的判斷判斷什麼候選地址可以用。

2.1收集候選地址

爲了運行ICE,必須找出agent的候選地址。其中一個候選地址就是直連地址。

如果agent是多宿主主機,它的候選包括多個地址。根據對端的地址,本機可以通過一或多個候選地址和對端通信。例:一個agent在私有網絡I1上有個候選地址,在公有網絡I2上有個候選地址。agent可以通過I1上的候選地址和I1上的對端通信,I2上的候選地址可以和公網上的對端通信。(ICE)不猜哪個地址優先,而是提供兩個候選地址。

接下去,agent通過stun或turn獲得額外的候選地址。這包含2類:NAT外網的轉義地址,TURN分配的地址。這2類地址都由TURN服務器發現,而不是分別從STUN/TURN獲取(當只有STUN運行時,只能從STUN獲得NAT外網的轉義地址)。兩類地址的關係見下圖。


當agent從主機候選地址X:x向TURN發Allocate 請求,NAT會創造服務自反地址X1:x1,發向X1:x1的包會轉成主機候選地址X:x發給agent。我們稱和服務自反地址相關的主機候選地址BASE。

如果agent和TURN中有多個NAT,只有最外層的服務自反地址能被agent發現。如果沒有NAT,服務自反地址會和主機候選地址相同(最後因爲冗餘而從候選地址中刪除)

當Allocate請求到達TURN,TURN服務器在自己的IP Y上分配個端口y,然後發回Allocate響應,通知agent這個中繼地址。同時TURN服務器也通過把Allocate 請求的傳輸層地址複製到Allocate響應中來告知agent 服務自反地址X1:x1。TURN(在NAT中)的原理實際是扮演個中繼,R爲了發給L消息,R先發到Y:y,TURN把它轉發到X1:x1,然後NAT映射到X:x後發給L。

如果只存在STUN(rfc5389),agent只發送STUN Binding請求道STUN服務器,STUN服務器靠把Binding請求的傳輸層地址複製到Binding響應中來告知agent 服務自反地址。


2.2連通性測試

當L獲得了它全部的候選地址,把它們按優先級從高到低排序後通過信令通道(SDP offer)發送給R。R收到後做同樣的事,然後通過響應發給L。最後,每個agent都擁有了自己和對方的候選地址。它們共同組成CANDIDATE  PAIRS(候選地址對)。client通過CANDIDATE  PAIRS發送給對端STUN request來檢查它們。

原則如下:

根據優先級對候選地址對排序

根據優先級向對候選地址發送request

確認對端的響應

由於雙方都進行檢查,所以結果就是四次握手:


重要的是STUN request從未來媒體流(如RTP RCTP)將使用的地址發送接收。所以要從這裏解複用(譯註:就是個雙工器)STUN和媒體流,這很容易。

如果在連通性測試中stun響應中的服務自反地址和已知的候選地址不同,這個候選地址叫PEER REFLEXIVE CANDIDATE(對端反身候選地址),它也會像其他候選地址一樣被ICE測試。

一旦R收到L的測試(request),R馬上發起對L的測試。這個可以提高測試速度。它叫做TRIGGERED CHECK(觸發測試)

測試結束後L和R都知道雙方p2p的收發地址。

2.3候選排序

(未完待續)





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章