對等名稱解析通訊協定

發佈日期: 2006 年 9 月 27 日

本页内容

簡介
PNRP 定域機組
對等名稱和 PNRP 識別碼
PNRP 名稱解析
使用多層快取調整對等名稱解析
PNRP 名稱發佈
PNRP 快取初始化
在應用程式開發中使用 PNRP
結論
相關連結

簡介

在對等環境中,對等體必須倚賴名稱解析系統,才能從名稱或其他類型的識別碼解析彼此的網路位置 (位址、通訊協定和連接埠)。但是由於網域名稱系統 (DNS) 具有暫時性的連線能力以及其他缺點,都使對等名稱解析變得複雜。

Microsoft® Windows® 對等網路平台會利用對等名稱解析通訊協定 (PNRP) 解決此問題,此通訊協定最先是針對 Windows XP 所開發,之後於 Windows Vista™ 中升級,是一項安全、可調整的動態名稱登錄與名稱解析通訊協定。PNRP 的運作方式與傳統的名稱解析系統十分不同,為應用程式開發人員開拓了令人雀躍的嶄新視野。

PNRP 包含下列特性:

  • 分散式且不需伺服器,提供驚人的延展性與可靠性

    PNRP 幾乎完全不需要伺服器 (只有在啟動時才需要伺服器)。PNRP 能夠輕鬆針對數百萬種名稱進行調整。系統不但能夠容錯,而且不會發生瓶頸。

  • 不需協力廠商即可輕鬆發佈名稱

    DNS 名稱發佈需要更新 DNS 伺服器。而且大部分情況下必須連絡伺服器管理員。此過程不但費時,還會增加成本。PNRP 名稱發佈所需時間相當短,不但毫不費力,而且還是免費的。

  • 即時更新

    DNS 十分倚賴快取以改善效能。遺憾的是,這也表示名稱無法及時進行可靠的更新。PNRP 則比 DNS 更有效率,能夠在幾乎同步的情況下處理更新。名稱解析將不再傳回過時的位址,因此對於尋找行動使用者來說,PNRP 是十分理想的解決方案。

  • 不只是為電腦命名

    PNRP 解析的項目包括位址、連接埠,以及可能的延伸裝載。您不只可以使用 PNRP 為電腦命名,還可以為服務命名。

  • 受保護的名稱發佈

    使用 PNRP 可以選擇發佈安全的 (受保護) 或不安全的 (未受保護) 名稱。PNRP 會使用公開金鑰加密保護對等名稱的安全,以免遭到詐騙。

PNRP 定域機組

PNRP 會使用多個定域機組,其中每個定域機組是由多部能夠找到彼此的電腦所組成的群組。PNRP 提供兩種定域機組:

  • 全域定域機組對應至全域 IPv6 位址範圍與全域位址,代表整個 IPv6 網際網路上的所有電腦。全域定域機組只有一個。

  • 連結-本機定域機組對應至連結-本機 IPv6 位址範圍與連結-本機位址。連結-本機定域機組用於特定連結,而且通常與連接本機的子網路相同。連結-本機定域機組可以有許多個。

第三種定域機組是特定站台的定域機組,對應至站台 IPv6 位址範圍與站台-本機位址。此定域機組已過時,不過 PNRP 中仍然支援此定域機組。

對等名稱和 PNRP 識別碼

對等名稱是通訊的端點,此名稱可以是一部電腦、一位使用者、一個群組、一項服務,或是任何要解析成 IPv6 位址的項目。對等名稱可以登錄為不安全或安全的名稱。不安全的名稱是指單純為文字字串的名稱,容易受到詐騙,因為任何人都可以登錄重複的不安全名稱。不安全的名稱最好用於私人或是受保護的網路中。安全的名稱會受到憑證與數位簽章的保護。只有原始發行者才能證明安全名稱的擁有權。

PNRP 識別碼的長度為 256 個位元,並且由下列各項所組成:

  • 高序位 128 位元 (也稱為對等 (P2P) 識別碼) 是指派給端點的對等名稱雜湊。

    端點的對等名稱格式如下:Authority.Classifier。安全名稱的 Authority 是用十六進位字元表示的,是對等名稱公開金鑰的安全雜湊演算法 (Secure Hash Algorithm 1,SHA1) 雜湊。不安全名稱的 Authority 則為單一字元 "0"。Classifier 是識別應用程式的字串,可以是長度不超過 150 個字元的任何 Unicode 字串。

  • 低序位 128 位元用於表示服務位置所產生的數字,用來識別相同定域機組中同一個 P2P 識別碼的不同執行個體。

P2P 識別碼和服務位置的 256 位元組合可讓單一電腦登錄多個 PNRP 識別碼。[圖 1] 顯示 P2P 和 PNRP 識別碼的結構。

[圖 1]:P2P 和 PNRP 識別碼

圖 1:P2P 和 PNRP 識別碼

針對每個定域機組,每個對等節點會管理一組 PNRP 識別碼的快取,其中包括本身登錄的 PNRP 識別碼和一段時間內快取的項目。位於定域機組中所有對等節點上的整組 PNRP 識別碼會組成分散式雜湊表。此外還可將指定 PNRP 識別碼的項目放在多個對等體上。PNRP 快取中的每個項目都包含 PNRP 識別碼、認證的對等位址 (CPA),以及發佈節點的 IPv6 位址。CPA 是自我簽署的憑證,為 PNRP 識別碼提供了驗證保護,並且包含應用程式端點資訊,例如位址、通訊協定號碼及連接埠編號。

因此,PNRP 的名稱解析處理程序是由將 PNRP 識別碼解析成 CPA 的程序所構成。取得 CPA 之後,就可以開始與想要通訊的端點進行通訊。

執行 PNRP 名稱解析的方法有兩種,端視 PNRP 的版本而定。PNRP 1 版包含在 Windows XP Service Pack 2 (SP2)、Windows XP Professional x64 Edition,以及含有 Service Pack 1 (SP1) 的 Windows XP 以及 Advanced Networking Pack for Windows XP。這個版本是使用遞迴系統進行名稱解析,不過本文中將不予討論。PNRP 2 版已針對 Windows Vista 重新進行設計,會藉由互動的方法進行名稱解析,以減少網路頻寬。這兩個 PNRP 版本並不相容。

PNRP 名稱解析

PNRP 名稱解析使用下列兩個階段:

  • 判斷端點

    在此階段中,嘗試解析對等電腦上服務之 PNRP 識別碼的對等體,會先判斷發佈該對等體上所執行 PNRP 服務之 PNRP 識別碼的對等體 IPv6 位址。

  • PNRP 識別碼解析

    找到並確認 PNRP 識別碼對應所需端點之 PNRP 服務的對等體可以使用之後,要求的對等體會傳送 PNRP 要求訊息至該對等體,以要求所需服務的 PNRP 識別碼。端點會傳送回覆,確認所要求服務的 PNRP 識別碼、註解,以及最多 4 KB 的額外資訊,以供要求對等體未來進行通訊時使用。例如,如果所需的端點是遊戲伺服器,則這項額外的資料可能會包含遊戲的相關資訊、參與遊戲的等級,以及目前進行遊戲的人數。

在判斷端點的過程中,PNRP 會使用互動的處理程序尋找發佈 PNRP 識別碼的節點,其中執行解析的節點會負責連絡接近目標 PNRP 識別碼的後續節點。

為了在 PNRP 中執行名稱解析,對等體會檢查本身的快取項目中是否有符合目標 PNRP 識別碼的項目。如果找到相符項目,對等體就會傳送 PNRP 要求訊息至對等體,並等候回應。如果未找到 PNRP 識別碼的項目,則對等體會傳送 PNRP 要求訊息至對應到最接近目標 PNRP 識別碼之 PNRP 識別碼的對等體。收到 PNRP 要求訊息的節點會檢查自己的快取,並執行下列動作:

  • 如果找到 PNRP 識別碼,則收到要求的對等體會直接回覆發出要求的對等體。

  • 如果找不到 PNRP 識別碼,而快取中有接近目標 PNRP 識別碼的 PNRP 識別碼,則收到要求的對等體會傳送回應至發出要求的對等體,其中包含對應擁有最接近目標 PNRP 識別碼之 PNRP 識別碼的對等體 IPv6 位址。發出要求的節點會從回應中的 IP 位址,傳送另一個查詢至第一個節點參考的 IPv6 位址。

  • 如果找不到 PNRP 識別碼且快取中沒有接近目標 PNRP 識別碼的 PNRP 識別碼,則收到要求的對等體會傳送指出此情況的回應給發出要求的對等體。接著發出要求的對等體會選擇下一個最接近的 PNRP 識別碼。

發出要求的對等體會繼續重複執行此處理程序,直到最後找到登錄 PNRP 識別碼的節點。

例如,對等體 A 擁有自己的 PNRP 識別碼 (200) 以及 PNRP 識別碼 450 和 500 的項目。[圖 2] 中即顯示這組對等節點。從一個節點到另一個節點的箭頭表示箭頭來源節點的快取中,擁有箭頭所指向節點的項目。

Bb726971.pnrp02-sm(zh-tw,TechNet.10).gif

圖 2:判斷 PNRP 端點的對等網路範例

當對等體 A 要判斷 PNRP 識別碼 800 的端點時,便會進行下列處理程序:

  1. 由於 500 這個數字接近 800,因此對等體 A 會傳送 PNRP 要求訊息至登錄 PNRP 識別碼 500 (對等體 C) 的節點。

  2. 對等體 C 並沒有 PNRP 識別碼 800 的項目,也沒有任何接近 800 的項目。因此對等體 C 會傳送回應給對等體 A,表示找不到接近 800 的項目。

  3. 由於 450 是下一個接近 PNRP 識別碼 800 的數字,因此對等體 A 會傳送 PNRP 要求訊息至登錄 PNRP 識別碼 450 (對等體 B) 的節點。

  4. 由於對等體 B 的快取中擁有 PNRP 識別碼 800 的項目,因此會傳送對等體 E 的 IPv6 位址給對等體 A。

  5. 對等體 A 會傳送 PNRP 要求至對等體 E。

  6. 對等體 E 會將對名稱解析的正面回應回傳給對等體 A。

此處理程序如 [圖 3] 中所示。

Bb726971.pnrp03-sm(zh-tw,TechNet.10).gif

圖 3:PNRP 端點判斷範例

在端點判斷之後,對等體 A 會傳送要建立通訊之服務的 PNRP 名稱解析要求至對等體 E。對等體 E 會針對發出要求的應用程式進行回應,其中包含關於服務的選擇性資料。

使用多層快取調整對等名稱解析

為了盡量縮小 PNRP 快取的大小,對等節點會使用多層快取,其中每一層都有項目個數的上限。快取中的每一層代表 PNRP 識別碼空間的十分之一 (2256)。快取中的最下面一層會包含在本機上登錄的 PNRP 識別碼,以及其他數字接近的 PNRP 識別碼。當一層快取填滿了最多 20 個項目之後,就會新建較低的一層。快取中的最大層數是按照對數10 的順序而定 (定域機組中 PNRP 識別碼的總數)。例如,對於含有 1 億個 PNRP 識別碼的全域定域機組來說,快取中不會超過 8 (=log10(100,000,000)) 層,這與解析名稱時用來解析 PNRP 識別碼的躍點數目相似。此機制允許使用可針對其解析任意 PNRP 識別碼的分散式雜湊表,方法是將 PNRP 要求訊息轉送至下一個最接近的對等體,直到找到包含對應 CPA 的對等體為止。

[圖 4] 中的範例顯示此多層快取配置的 1000 個項目 (0-999) 的數字空間,其中每一層快取代表 10% 的數字空間,而且只能儲存 4 個項目 (每個勾號代表一個快取項目)。

Bb726971.pnrp04-sm(zh-tw,TechNet.10).gif

圖 4:多層快取範例 觀看完整大小的影像。

此多層快取配置的結果讓每個對等體不必儲存大量快取項目。即使是大量的 PNRP 識別碼,解析任意 PNRP 識別碼的本機存放區和網路流量也不會有很大的差異。

附註:

[圖 4] 為簡化的 PNRP 數字空間,實際上為循環的命名空間 (本範例中 999 之後的第一個數字為 0)。

為確保解析能夠完成,每次節點將項目加入其快取的最下層時,都會將該項目的副本傳送到快取最後一層內的所有節點。

快取項目會隨時間更新。過時的快取項目則會從快取中移除。因此 PNRP 識別碼的分散式雜湊表會以作用中的端點為主,而不像 DNS 中,位址記錄和 DNS 通訊協定無法保證與位址相關的節點在網路上也是作用中的。

PNRP 名稱發佈

為了發佈新的 PNRP 識別碼,對等體會執行下列動作:

  • 傳送 PNRP 發佈訊息至相鄰的快取 (在快取的最下層中登錄 PNRP 識別碼的對等體),成為要快取的種子。

  • 在定域機組中隨機選擇非相鄰的節點,並將本身 P2P 識別碼的 PNRP 名稱解析要求傳送至這些節點。產生的端點判斷處理程序會以發佈對等體的 PNRP 識別碼,作為定域機組中隨機節點的快取種子。

如果 PNRP 2 版單純解析其他 P2P 識別碼時,其節點不會發佈 PNRP 識別碼。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PeerNet\PNRP\IPV6-Global\SearchOnly=1 登錄值 (REG_DWORD 類型) 可讓您指定對等體僅使用 PNRP 進行名稱解析,而不進行名稱發佈。此登錄值也可以透過群組原則進行設定。

PNRP 快取初始化

若要在對等節點啟動時初始化 PNRP 快取,節點可以使用下列方法:

  • 持續快取項目

    節點關閉時存在的舊有快取項目會從硬碟存放區載入。

  • PNRP 種子節點

    PNRP 允許管理員針對包含定域機組中目前參與者 CPA 的種子節點,指定這些種子節點的位址或 DNS 名稱。

  • 簡易服務探索通訊協定

    PNRP 節點必須使用萬用隨插即用 (UPnP) 簡易服務探索通訊協定 (SSDP),才能自行登錄。加入定域機組的節點可以使用 SSDP Msearch 訊息尋找鄰近的 SSDP 節點。

在應用程式開發中使用 PNRP

在 Windows Vista 中,Windows 對等網路應用程式可以透過簡化的 PNRP 應用程式設計介面 (API),存取 PNRP 名稱發佈和解析功能。有了簡化的 PNRP 發佈 API,您就不必指定用來登錄名稱和位址的定域機組。Windows Vista 中的 PNRP 元件將會自動判斷要加入的適當定域機組,以及從定域機組內發佈元件的位址。

針對 Windows Vista 中高度簡化的 PNRP 名稱解析,PNRP 名稱現已整合於 getaddrinfo() Windows Sockets 函數中。若要使用 PNRP 將名稱解析為 IPv6 位址,應用程式可以使用 getaddrinfo() 函數解析完整網域名稱 (FQDN) name.prnp.net,其中 name 為要解析的對等名稱。pnrp.net 網域是 Windows Vista 中專為 PNRP 名稱解析保留的網域。

結論

針對名稱發佈和解析機制,Windows 對等網路會使用 PNRP。PNRP 是一項有效、受保護且低成本的動態通訊協定,會使用反覆而不需伺服器的方法進行名稱解析。

相關連結

請參閱以下資源以取得額外資訊:

顯示: