第一章 簡介
1.3 SIP傳送之IPv4/IPv6 轉換問題
本節說明 SIP 訊息穿越 NAT-PT 時所發生的 IPv4/IPv6 轉換問題。圖 1-4 為 IPv4/IPv6 SIP 互通之網路架構範例。在圖 1-4 中,NAT-PT 系統參數設定以及 IPv6 與 IPv4 網路 的網段位址皆和圖 1-1 相同,可參考 1-1 節的說明。為了連結 SIP VoIP 通訊,在本範 例中加入了兩台 SIP 伺服器(即 IPv6 SIP Server 和 IPv4 SIP Server),並在 IPv6 與 IPv4 主機上分別安裝 SIPv6 UA(UA1)與 SIPv4 UA(UA2)。
SIP signal RTP traffic
IPv6 Host (UA1)
NAT-PT
SIP-Number = 0944600001 SIP-Proxy = 3ffe:3600:1::2 IPv6 Address = 3ffe:3600:1::3/64
SIP-Number = 0944400001 SIP-Proxy = 140.113.1.2 IPv4 Address = 140.113.1.3/24
IPv4 Host (UA2)
SIP-Numbers = 0944600000 ~ 0944699999
SIP Routing = 3ffe:3600:2::140.113.1.2 for 09444xxxxx
IPv6 Address = 3ffe:3600:1::2/64
SIP-Numbers = 0944400000 ~ 0944499999 SIP Routing = 140.113.1.10 for 09446xxxxx IPv4 Address = 140.113.1.2/24
IPv6 NIC:
IPv6 Address = 3ffe:3600:1::1/64 NAT-PT Prefix = 3ffe:3600:2::/96 IPv4 NIC:
Address Pool = 140.113.1.10 ~ 20
140.113.1.10
3ffe:3600:1::2 Static
IPv6 IPv4 Type
圖 1-4 IPv4/IPv6 SIP 互通之網路架構
在 IPv6 網路中,IPv6 SIP 伺服器的 IPv6 位址為 3ffe:3600:1::2,並管理前置碼為 09446(0944600000 ~ 0944699999)的十萬門電話號碼。UA1 將 IPv6 SIP 伺服器設為預 設 SIP 伺服器,並註冊了電話號碼 0944600001。在 IPv4 網路中,IPv4 SIP 伺服器的 IPv4 位址為 140.113.1.2,並管理前置碼為 09444(0944400000 ~ 0944499999)的十萬門電話 號碼。UA2 將 IPv4 SIP 伺服器設為預設 SIP 伺服器,並註冊了電話號碼 0944400001。
為了在 IPv6 與 IPv4 網路之間傳遞 SIP 訊息,IPv6 SIP 伺服器需設定將 SIP 要求中 帶有前置碼為 09444 的 SIP URI,傳遞給 IPv4 SIP 伺服器作處理。同理,IPv4 SIP 伺服 器需設定將 SIP 要求中帶有前置碼為 09446 的 SIP URI,傳遞給 IPv6 SIP 伺服器作處理。
在 NAT-PT 的位址轉換表中,必須先在 IPv6 SIP 伺服器中設定一組靜態對應資訊,內 容為 3ffe:3600:1::2(IPv6 SIP 伺服器的 IPv6 位址)對應到 140.113.1.10。
由於 NAT-PT 只修改封包中網路層的標頭,並不處理位於應用層 SIP 訊息的內容,
因此 SIP 訊息在經過 NAT-PT 之後,網路層的 IP 位址就會和 SIP 訊息中所攜帶的 IP 位 址不同。
圖 1-5 顯示 Request Line、Contact 和 Via 標頭欄位攜帶 IPv6 位址的例子。在 SIP 要求中,這三個欄位為 SIP 標頭中必要的欄位,且皆與 SIP 訊息的路由路徑有關。Request Line 記錄著要求方法與 Request-URI。若 Request Line 內的 Request-URI 為 IPv6 位址(例 如 3ffe:3600:2::140.113.1.2),IPv4 網路上的 SIP 設備(SIP 伺服器或 SIP UA)收到此 SIP 要求之後,會判斷這個 IPv6 位址並非是該 IPv4 SIP 設備的,此錯誤將導致該 IPv4 SIP 設備無法作進一步的處理。Contact 標頭欄位是用來告知對方此後的 SIP 要求可直接送 達的位址。若 Contact 標頭欄位內容為 IPv6 位址(例如 3ffe:3600:1::3),IPv4 網路上 的 SIP 設備便無法依照 Contact 標頭欄位所攜帶的資訊將 SIP 要求正確傳給 IPv6 網路內 的 SIP 設備。當 SIP 要求被送出時,SIP 設備會加入一個含有本機 IP 位址的 Via 標頭 欄位,並將此 Via 標頭欄位放在整個 SIP 訊息中所有 Via 標頭欄位的上方。當目的地 SIP UA 準備要送出 SIP 回應時,會將 SIP 要求中的所有 Via 原封不動地複製到 SIP 回 應中。而 SIP 伺服器會依序檢查 Via 標頭欄位所帶的 IP 資訊,以便將封包依照原路徑 反向送回。經 NAT-PT 轉換後之 IPv4 SIP 訊息中,若 Via 標頭欄位帶有 IPv6 位址 (例 如 3ffe:3600:1::2),則 SIP 回應將無法從 IPv4 網路送回到 IPv6 網路內的 SIP UA。
INVITE sip:0944400001@
3ffe:3600:2::140.113.1.2
SIP/2.0 Call-ID: 12345689-EFGHIJK@CSeq: 1 INVITE
Contact: sip:0944600001@3ffe:3600:1::3
From: sip:0944600001@3ffe:3600:1::3;tag=c21wOje0 To: sip:0944400001@3ffe:3600:2::140.113.1.3
Via: SIP/2.0/UDP 3ffe:3600:1::2
Via: SIP/2.0/UDP 3ffe:3600:1::3;branch=z9hG
Content-Type: application/sdp Content-Length: 135
v=0
o=00 1000000000 2000000000 IN IP6 3ffe:3600:1::3 s=Session SDP
c=IN IP6 3ffe:3600:1::3
t=0 0
m=audio 9000 RTP/AVP 0 8 4 18
INVITE sip:0944400001@
3ffe:3600:2::140.113.1.2
SIP/2.0 Call-ID: 12345689-EFGHIJK@CSeq: 1 INVITE
Contact: sip:0944600001@3ffe:3600:1::3
From: sip:0944600001@3ffe:3600:1::3;tag=c21wOje0 To: sip:0944400001@3ffe:3600:2::140.113.1.3
Via: SIP/2.0/UDP 3ffe:3600:1::2
Via: SIP/2.0/UDP 3ffe:3600:1::3;branch=z9hG
Content-Type: application/sdp Content-Length: 135
v=0
o=00 1000000000 2000000000 IN IP6 3ffe:3600:1::3 s=Session SDP
c=IN IP6 3ffe:3600:1::3
t=0 0
m=audio 9000 RTP/AVP 0 8 4 18
Src. IPv4 =
140.113.1.10
Dst. IPv4 =140.113.1.2
Src. IPv4 =
140.113.1.10
Dst. IPv4 =140.113.1.2
SIP message
本論文的章節組織描述如下。第二章說明 SIPv6 Translator 系統的系統架構與運作 範例。第三章說明 SIPv6 Translator 系統的實作原理。第四章說明 SIPv6 Translator 系統 效能量測與互通性測試的結果。第五章說明結論。
第二章
SIPv6 Translator 系統架構
本章描述 SIPv6 Translator 系統的軟體架構,並以 IPv6 與 IPv4 SIP 訊息轉換範例來 說明 SIPv6 Translator 系統的運作流程。
2.1 SIPv6 Translator 系統之軟體架構
SIPv6 Translator 系統架構圖如圖 2-1 所示。本系統包括兩大模組,分別為應用層 閘道器模組(簡稱 ALG Modules;圖 2-1○a )以及 NAT-PT 模組(Network Address Translation and Protocol Translation Module,簡稱 NAT-PT Module;圖 2-1○b )。應用層 閘道器模組(例如 SIP-ALG)針對應用層協定(例如 SIP)進行分析,並將分析出來的 IPv6 位址轉換成 IPv4 位址,或者將 IPv4 位址轉換成 IPv6 位址。NAT-PT 模組針對網 路層通訊協定進行轉換工作,將 IPv6/ICMPv6 標頭轉換成 IPv4/ICMPv4 標頭,反之亦 然。SIPv6 Translator 系統使用作業系統內部的 Socket 元件(圖 2-1○c )進行封包的收送 工作。
SIIT Component
本系統於應用層閘道器模組內實作 DNS(Domain Name System)-ALG 模組(圖 2-1○d )以及 SIP-ALG 模組(圖 2-1○e )。由於 DNS-ALG 在 RFC2694 中已提出轉換 Private IPv4 與 Public IPv4 的機制[15],本系統可參考此 RFC 文件設計出 IPv6 與 IPv4 的轉換 機制;而 SIP-ALG 則尚未有標準出現,因此本論文將針對 SIP-ALG 模組進行說明,
DNS-ALG 模組之說明請參考附錄 A。
在 SIP 訊息中,Request Line 內的 Request-URI 指明要求的對象;Contact 標頭欄位
表示目前 SIP UA 所在的 IP 位址;From 與 To 標頭欄位為必要欄位,許多大廠(例如 Cisco)研發的 SIP 設備會分析這些欄位內的 IP 位址;Via、Record-Route 與 Route 指明 SIP 訊息的路由路徑。由於上述原因,Request-URI 與 Contact、From、To、Via、
Record-Route 以及 Route 等六個特定標頭欄位內的 IP 位址都需要轉換。SIP 訊息內可能 會帶有數個 Via、Record-Route 以及 Route 標頭欄位,記錄路由所經過的 IP 位址。為了 避免浪費 Address Pool 內的 IPv4 位址,因此 SIP-ALG 僅針對上述三個標頭欄位的第一 個作 IP 位址轉換。在 SDP 標頭中,c 欄位帶有欲接收 RTP 封包的 IP 位址。雖然 o 欄 位僅提供主機資訊而不影響 RTP 多媒體通訊之建立,但如 Cisco 等廠商的 SIP 設備仍 然會分析 o 欄位內的 IP 位址。基於上述原因,c 與 o 這兩個特定欄位內的 IP 位址與位 址型態都需要轉換。
NAT-PT 轉換 IP 位址演算法直接對來源位址與目的位址作轉換。此演算法對於來 自 IPv6 網路的封包,取 IPv6 目的位址的最低 32 位元作為轉換後的 IPv4 目的位址,並 以 IPv6 來源位址向 Address Mapper(圖 2-1○h )查詢,來取得相對應的 IPv4 位址。此 演算法對於來自 IPv4 網路的封包,將 IPv4 目的位址直接向 Address Mapper 查詢,來 取得相對應的 IPv6 位址,並將 IPv4 位址加上 NAT-PT Prefix 作為轉換後的 IPv6 位址。
然而在 SIP 訊息中,不易判斷標頭欄位內的位址是來源位址或者是目的位址,可 能會發生誤判情形,例如 REGISTER 要求內的 From 與 To 標頭欄位可能帶有相同的 SIP URI。因此,我們提出了另一個轉換演算法。若 SIP 訊息是來自 IPv6 網路,則先找出 特定標頭欄位中 IPv6 位址,對於含有 NAT-PT Prefix 的 IPv6 位址,取最低 32 位元來 作為轉換後的 IPv4 位址;對於不含 NAT-PT Prefix 的 IPv6 位址,則向 Address Mapper 查詢,來取得相對應的 IPv4 位址。若 SIP 訊息是來自 IPv4 網路,則先分析出 IPv4 位 址,對於屬於 Address Pool 的 IPv4 位址,向 Address Mapper 查詢,來取得相對應的 IPv6
2.1.2 NAT-PT 模組
NAT-PT 模組包括 Packet Receiver 元件(圖 2-1○i )、封包暫存區(Packet Buffer;
圖 2-1○j )、Packet Transmitter 元件(圖 2-1○k )、SIIT(Stateless IP/ICMP Translation)
元件(圖 2-1○g )、Address Mapper(圖 2-1○h )以及 ALG Dispatcher(圖 2-1○f )。
封包暫存區是一個採用共享記憶體(Shared Memory)實作方式的記憶體緩衝區
(Memory Buffer),分別以輸入緩衝區(Input Buffer)與輸出緩衝區(Output Buffer)
來儲存轉換前與轉換後的封包。輸入緩衝區與輸出緩衝區各自可以儲存 1024 個封包,
每個封包的儲存空間為 1600 位元組。為了分辨封包是來自 IPv4 或者 IPv6 網域,本系 統使用 is_version4or6 旗標在輸入緩衝區與輸出緩衝區內記錄封包的 IP 版本資訊。
Packet Receiver 元件透過 Socket 元件以中斷(Interrupt)方式取得封包,接著對網路層 IP 協定的版本欄位進行分析,判斷是 IPv4 或是 IPv6 封包。若封包為 IPv4 協定,Packet Receiver 元件必須先向 Address Mapper 查詢,檢查位址轉換表中是否已經存對應的轉 換資訊,若有則表示此封包合法。若封包為 IPv6 協定,Packet Receiver 元件必須先檢 查此封包 IPv6 目的位址是否包含 NAT-PT prefix,若有則表示此封包合法。Packet Receiver 元件會過濾掉 IP 目的位址不合法的封包,並將合法的封包儲存於輸入緩衝區 中。Packet Transmitter 元件以詢問(Polling)方式檢查輸出緩衝區中是否有已轉換完成 的封包,如有則透過 Socket 元件送出封包。
SIIT 元件以詢問的方式檢查輸入緩衝區內是否有尚未轉換的封包,如有則讀入此 封包的記憶體位址來作進一步處理。SIIT 元件採用 RFC2765 所制定的演算法,針對封 包網路層的 IP 與 ICMP(Internet Control Message Protocol)標頭進行轉換工作 [2,3,6,8,9,10]。當 SIIT 元件轉換完封包的網路層標頭之後,會將封包的記憶體位址傳遞
給 ALG Dispatcher 來判斷是否應傳給應用層閘道器模組對應用層協定內的訊息做進一 步轉換。
ALG Dispatcher 負責比對封包傳輸層的 Port 值,針對在 ALG Dispatcher 註冊 Port 的應用層通訊協定(例如 SIP)傳遞給特定 ALG(例如 SIP-ALG)做進一步處理。舉 例來說,一開始 SIP-ALG 向 ALG Dispatcher 註冊了 Port 5060。當 SIIT 元件將封包的 記憶體位址傳給 ALG Dispatcher 比對時,若 Port 值為 5060 則表示此封包為 SIP 封包,
ALG Dispatcher 將封包的記憶體位址傳遞給 SIP-ALG 元件以供後續分析處理;若 Port 值並非已在 ALG Dispatcher 中註冊,則 ALG Dispatcher 不作任何動作直接回傳成功到 SIIT 元件。
Address Mapper 管理一個位址轉換表(圖 2-2)與一個 Address Pool,並負責維護 以及提供 IPv4 位址與 IPv6 位址轉換的資訊。位址轉換表內儲存著許多轉換項目
(Mapping Entry),每個轉換項目內都含有 IPv6 位址、IPv4 位址以及轉換型態等三個 欄位。轉換型態(Type)記錄此轉換資訊的型態為靜態(Static)對應或者為動態
(Dynamic)對應。當要查詢 IPv6 位址時,必須以 IPv4 位址為鍵值(Key)向位址轉 換表查詢,來取得對應的 IPv6 位址;反之,當要查詢 IPv4 位址時,必須以 IPv6 位址 為鍵值向位址轉換表查詢,來取得對應的 IPv4 位址。Address Pool 內存放著數個 IPv4 位址,用來在位址轉換表內對應 IPv6 網路上主機的 IPv6 位址。Address Mapper 提供位 址轉換資訊讓 Packet Receiver 元件、SIIT 元件、DNS-ALG 模組以及 SIP-ALG 模組進 行查詢。若以 IPv6 位址來進行查詢時,卻發現沒有對應的 IPv4 位址資訊,Address Mapper 會從 Address Pool 中找出尚未使用的 IPv4 位址來作為對應的 IPv4 位址,並將 此轉換資訊新增到位址轉換表中。若位址轉換表內的對應資訊是動態對應,而且經過
(Dynamic)對應。當要查詢 IPv6 位址時,必須以 IPv4 位址為鍵值(Key)向位址轉 換表查詢,來取得對應的 IPv6 位址;反之,當要查詢 IPv4 位址時,必須以 IPv6 位址 為鍵值向位址轉換表查詢,來取得對應的 IPv4 位址。Address Pool 內存放著數個 IPv4 位址,用來在位址轉換表內對應 IPv6 網路上主機的 IPv6 位址。Address Mapper 提供位 址轉換資訊讓 Packet Receiver 元件、SIIT 元件、DNS-ALG 模組以及 SIP-ALG 模組進 行查詢。若以 IPv6 位址來進行查詢時,卻發現沒有對應的 IPv4 位址資訊,Address Mapper 會從 Address Pool 中找出尚未使用的 IPv4 位址來作為對應的 IPv4 位址,並將 此轉換資訊新增到位址轉換表中。若位址轉換表內的對應資訊是動態對應,而且經過