UPNP


UPnP logo UPnP 是各種各樣的智慧型設備、無線設備和個人電腦等實現遍布全球的對等網路連線(P2P)的結構。UPnP 是一種分散式的,開放的網路架構。UPnP 是獨立的媒介。在任何作業系統中,利用任何程式語言都可以使用 UPnP 設備。

簡介

  UPnP      英文名稱:Universal Plug and Play   中文譯名:通用即插即用   UPnP協定統一即插即用英文是Universal Plug and Play,縮寫為UPnP。要說電腦外設的即插即用(Plug and Play(縮寫PnP)),大家可能很熟悉,但對通用即插即用,多數人會感到是一頭霧水。由于windows xp加入對UPnP的支援,并且被查出存在很嚴重的安全問題,所以,一時間,使得UPnP名聲大噪。巧的是,本人原來查閱過關于UPnP的技術白皮書,而且也較為詳細地看了關于此次發現的安全缺陷的介紹。因此,趁著這個機會,將UPnP以及引起安全缺陷的詳情披露出來。

基本概念

  UPnP 的套用范圍非常大,以致足夠可以實現許多現成的、新的及令人興奮的方案,包括家庭自動化、列印、圖片處理、音樂 / 影片娛樂、廚房設備、汽車網路和公共集會場所的類似網路。它可以充分發揮 TCP/IP 和網路技術的功能,不但能對類似網路進行無縫連線,而且還能夠控制網路設備及在它們之間傳輸信息。在 UPnP 架構中沒有設備驅動程式,取而代之的是普通協定。   UPnP 并不是周邊設備即插即用模型的簡單延伸。在設計上,它支援0設定、網路連線過程“不可見”和自動查找眾多供應商提供的多如繁星的設備的類型。換言之,一個 UPnP 設備能夠自動跟一個網路連線上、并自動獲得一個 IP 地址、傳送出自己的權能并獲悉其它已經連線上的設備及其權能。最后,此設備能自動順利地切斷網路連線,并且不會引起意想不到的問題。   UPnP 推動了因特網技術的發展,包括 IP、TCP、UDP、HTTP、SSDP 和 XML 等技術。在因特網上契約以有線套用協定為基礎,而該協定是說明性的、利用 XML 進行表述和 HTTP 進行傳輸的。與此相同的是,UPnP 的明確設計目標就是提供這樣的環境。再者,當成本、技術或經費等方面的因素阻止了在某種媒介裡或接入其中的設備上運用 IP 時,UPnP 能夠通過橋接的模式提供非 IP 協定的媒體通道。UPnP 不會為套用程式指定 API,因此供應商們就可以自己建立 API 來滿足客戶的需求。

官網解釋

  技術支援對UPnP的詮釋   以下是微軟官方網站對UPnP的解釋:   問:什么是 UPnP?   答:通用即插即用 (UPnP) 是一種用于 PC 機和智慧型設備(或儀器)的常見對等網路連線的體系結構,尤其是在家庭中。UPnP 以 Internet 標準和技術(例如 TCP/IP、HTTP 和 XML)為基礎,使這樣的設備彼此可自動連線和協同工作,從而使網路(尤其是家庭網路)對更多的人成為可能。   問:UPnP 對消費者意味著什么?   答:簡單、更多選擇和更新穎的體驗。包含通用即插即用技術的網路產品只需實際連到網路上,即可開始正常工作。實際上,UPnP 可以和任何網路媒體技術(有線或無線)協同使用。舉例來說,這包括:Category 5 乙太網電纜、Wi-Fi 或 802.11B 無線網路、IEEE 1394("Firewire")、電話線網路或電源線網路。當這些設備與 PC 互連時,使用者即可充分利用各種具有創新性的服務和套用程式。   以下是BC官方網站對UPnP的解釋:   UPnP(Universal Plug and Play),通用即插即用,是一組協定的統稱,不能簡單理解為UPnP=“自動連線埠對應”。在BitComet下載中,UPnP包含了2層意思:   1、對于一臺區域網路電腦,BitComet的UPnP功能可以使網關或路由器的NAT模組做自動連線埠對應,將BitComet監聽的連線埠從網關或路由器對應到區域網路電腦上。   2、網關或路由器的網路防火墻模組開始對Internet上其他電腦開放這個連線埠。

經典套用

網路地址轉換

  在數量以百萬計而且數目仍然在繼續成長的家庭網路出現很久以前,Internet上的定址系統就已經開發出來了。實際上,在Internet尚處于幼年的時候所開發的這個定址系統到目前為止仍然能夠正常工作真可以說是一個奇跡。   因為Internet地址資源正在迅速被耗盡,大多數的家庭網路都使用網路地址轉換(NAT)技術建立了一個網關。NAT是Internet工程任務組(IETF)制訂的一種標準,它允許私有網路中的多臺PC或設備分享一個全球唯一的公共地址(所使用私有地址的范圍為10.x.x.x、192.168.x.x和172.x.x.x)。作為對IP地址短缺的一種臨時補救措施,NAT可以很好地完成很多工作–例如Windows XP的Internet連線分享就使用NAT,就像很多網關設備(例如DSL和線纜數據機)所做的一樣。   但問題是:NAT希望所有的網路套用程式都以一種標準模式(即在資料包頭中使用IP地址)進行通信,但是有些網路程式預計到NAT的存在。他們使用了NAT無法轉換的嵌入式IP地址。

NAT 穿越技術

  NAT穿越技術允許網路套用程式對它們是否位于一個具有UPnP能力的NAT設備之后進行檢測。然后,這些程式將獲得分享的全球可路由IP地址,并且配置連線埠對應以將來自NAT外部連線埠的資料包轉發到套用程式使用的內部連線埠上–所有這一切都是自動完成的,使用者無需手動對應連線埠或者進行其它工作。NAT穿越技術允許網路設備或者點對點套用程式通過動態開啟和閉合與外部服務之間的通信連線埠穿過NAT網關與外界通信。

實際套用

  網路發展到現在,我們已經實現的有很多,但還有許多目標沒有達到。例如在網路上,像平時用遙控器那樣,操作家用電器或網路遠端的電器設備等等。實現諸如此類的效果,將是有巨大需求的套用技術。如果實現通過網路用UPnP控制家用設備,將給我們的生活帶來很大的方便和很多新的體驗。所以windows系統也加入了UPnP協定,因為UPnP是一個協定,UPnP的使用可跨越各種作業系統平臺,開發套用程式也沒有開發語言的局限。可工作于各種形式的網路結構。且僅以現在的網路設施為基礎,僅僅加上這個UPnP協定,既不用增加新的設施,也不用重新架設網路介質就可以投入使用!   僅現在而言,UPnP已經可以實現好多看似科學幻想的操作了,只是這些操作還未普及而已。   1.在下班之前,或在回去的路上,就可以先開啟家裡的空調器和廚房設備,等進入家門,立刻就是一個溫度宜人的環境――廚房裡的飯也做好了。房間溫度的高低和廚房內煮飯的過程,都是根據事先設計好的“腳本”程式進行的,絕對可靠。   2.使用上UPnP,將根據使用者習慣調整音響音量、燈光亮度、音箱的高度等等,以你認為最佳的參數寫到執行腳本中,以后可以都以此為準。   3.當使用者在公司用上UPnP,只要在家裡安裝攝像頭,建立好與網路的連線。在辦公室內,啟用案頭電腦的WEBTV,連通網路后,可以即時看到家裡的一舉一動。   4.UPnP是因特網及LAN中使用的以TCP/IP協定為基礎的技術。通過無線網路上網的使用者都是處于區域網路,為了保證像BT這樣的P2P軟體正常工作,開啟UPnP是必須的,而目前大多數無線路由器都具有此功能。(大多數無線路由器的UPnP默認為關閉,使用者可手動開啟該功能,重啟路由器后即可生效)

特色

  1. 以網路為套用環境,不考慮“孤島”中的電腦。   2. 以TCP/IP和整個Internet為基礎。這樣是“中立”的,不依附于任何作業系統或套用程式,不使用特定的API函式,不受程式設計語言的局限。可以無縫地接入古早網路。   3. 設備可以動態地進入網路中,隨后獲得IP地址,“學習” 或查找自己應當進行的操作和服務的信息;“感知”別的設備是否存在以及它們的作用和當前的狀態 。所有這些,都應當是可自動完成的。   4. 每個設備都可讀取屬于自己的、特定的狀態和參數;完成控制操作后應當發出“操作完成”的回響信號。如果失敗,則應發出控制失敗的信號。

設定

如何設定UPnP支援

  UPNP的英文全稱是Universal Plug and Play,即通用即插即用協定,是為了實現電腦與智慧型的電器設備對等網路連線的體系結構。而區域網路地址與網路地址的轉換就是基于此協定的,因此只要我們的路由器支援upnp,并且我們使用支援此協定的xp作業系統,那么我們就可以借此提高點對點傳輸速度。   進入路由器的設定介面,如果你的路由器支援upnp的話那么在轉發規則選項卡下就會看到upnp設定選項(不同路由器可能會有不同),在此選項中,我們選擇啟用upnp,然后我們重啟一下路由器。這樣我們就完成了路由器的設定。

啟用UPnP使用者介面

  在某些情況下,Windows XP可以發現UPnP設備,并且提供它自己的使用者介面控制這些設備。一個很好的例子便是"網路連線"檔案夾中UPnP住宅網關設備的使用者介面(UI)。市場上流行的Linksys BEFSR41W無線路由器在安裝完畢后,會自動顯示在"網路連線"檔案夾中,因為Windows XP已經內置了一個相關的套用程式。   除此之外,你可以使用以下步驟安裝可選的UI組件。該UI組件會在系統發現新的設備后顯示一個"氣球"通知,并且在"網路上的芳鄰"檔案夾中為每個設備防止一個圖示。為了啟用UPnP UI,請按照以下步驟操作:   1.點擊"開始",點擊"控制臺",然后點擊"增加或移除程式"。   2.在"增加或移除程式"對話框中,點擊"增加/移除Windows組件"。   3.在"Windows組件向導"中,點擊"網路服務",點擊"詳細",然后選擇"通用即插即用"復選框。   4.點擊"確定",然后點擊"Windows組件向導"對話框中的"下一步"。您可能需要提供您的Windows XP安裝CD。

UPnP對應失敗的原因

  1.系統服務中禁止了SSDP服務(用于尋找upnp設備)   2.開啟了XP下的SP1的ICF(網路連線防火墻)。(XP的ICF與UPnP設備發現有沖突,SP2修復了這個問題,但是仍然需要在防火墻設定中允許例外:UPnP 架構。)   3.路由器不支援UPnP,請向制造商詢問。   等等。

安全性

  由于UPnP技術的簡單性和堅持開放標準,UPnP技術已經得到了眾多設備廠商的采納。Windows XP率先實現了對UPnP技術的支援,但是,它現在還存在一些安全漏洞,攻擊者可以使用這些漏洞減慢您的PC的運行速度,或者,在極少數的情況下,攻擊者可以對他在您的系統中的許可權進行提升。但是,如果你在Windows XP中安裝了防火墻,這些問題都將不成其為問題。實際上,Windows XP自身就附帶了一個Internet連線防火墻,默認情況下,該防火墻安裝在您的Internet連線上,因此能夠保護您免遭Internet攻擊者的攻擊。UPnP中的這個安全性漏洞已經得到了修補。Microsoft 安全性公告MS01-059對該問題進行了討論,并且提供了與此有關的更多資源連結,你可以通過這些連結檢視知識庫文章了解更多信息,或者下載相應的安全補丁。

安全缺陷

  第一個缺陷是對緩沖區(Buffer)的使用沒有進行檢查和限制。外部的攻擊者,可以通過這裡取得整個系統的控制特權!由于UPnp功能必須使用電腦的連線埠來進行工作,取得控制權的攻擊者,還有可能利用這些連線埠,達到攻擊者的目的。這個缺陷造成的后果很嚴重,不論那個版本的windows 系統,只要運行UPnP,就都存在這個危險!但嚴格地說,這并不完全是UPnP技術本身的問題,更多的是程式設計的疏忽。   第二個缺陷就與UPnP的工作機理有關系了。該缺陷存在于UPnP工作時的“設備發現”階段。發現設備可以分為兩種情況:如果某個具備UPnP功能的電腦引導成功并連線到網路上,就會立刻向網路發出“廣播”,向網路上的UPnP設備通知自己已經備妥,在程式設計這一級別上看,該廣播內容就是一個M-SEARCH(訊息)指示。該廣播將被“聲音所及”范圍之內的所有設備所“聽到”。并向該電腦反饋自己的有關信息,以備隨后進行控制之用。   相類似,如果某個設備剛剛連線到網路上,也會向網路發出“通知”,表示自己備妥,可以接受來自網路的控制,在程式設計這一級別上看,該通知就是一個NOTIFY(訊息)指示。也將被“聲音所及”范圍之內的所有電腦接受。電腦將 “感知”該設備已經向自己“報到”。實際上,NOTIFY(訊息)指示也不是單單傳送給電腦聽的,別的網路設備也可以聽到。就是在上述的一播一聽之間,出現了問題!   如果某個黑客向某個使用者系統傳送一個NOTIFY(訊息)指示,該使用者系統就會收到這個NOTIFY(訊息)指示并在其指示下,連線到一個特定伺服器上,接著向相應的伺服器請求下載服務―――下載將要執行的服務內容。伺服器當然會回響這個請求。UPnP服務系統將解釋這個設備的描述部分,請求傳送更多的檔案,伺服器又需要回響這些請求。這樣,就構成一個“請求――回響”的迴圈,大量占用系統資源,造成UPnP系統服務速度變慢甚至停止。所以,這個缺陷將造成“拒絕服務”攻擊成為可能!

設備

  UPNP是通用即插即用設備的縮寫。   UPnP技術對即插即用進行了延伸,它簡化了家庭或企業中智慧型設備的聯網過程。在結合了UPnP技術的設備以物理形式連線到網路中之后,它們可以通過網路自動彼此連線在一起,而且連線過程無需使用者的參與和使用中央伺服器。   UPnP規范基于TCP/IP協定和針對設備彼此間通訊而制訂的其它Internet協定。這就是它之所以被稱作"通用"的原因所在–UPnP技術不依賴于特定的設備驅動程式,而是使用標準的協定。UPnP設備可以自動配置網路地址,宣布它們在某個網路子網的存在,以及互相交換對設備和服務的描述。基于Windows XP的電腦可以充當一個UPnP控制點,通過程式介面對設備進行發現和控制。   如果與以前的即插即用相比,這種技術似乎并不具有什么革命性的意義。在作業系統中增加即插即用技術使得在單個電腦上安裝、配置和增加外設的工作變得更容易了。但是UPnP為家庭使用者或者小型辦公環境中的非專業使用者所帶來的是一道更加美味的"大餐",他們可以利用UPnP玩多人遊戲,進行即時通信(Internet電話,電話會議)以及使用類似Windows XP的遠程協助這樣的其它技術。到目前為止,僅有配備了完整IT團隊的幾個大公司能夠輕松做到這些(雖然,我懷疑多人遊戲和能夠上網沖浪的電冰櫃是否會是他們強調的重點)。

設備

  這裡是指符合UPnP規范的設備。一個UPnP設備可以看成一個包含服務并嵌套了一般設備的“容器” 。例如,一個UPnP的VCR(錄像機)設備可以包含磁帶傳送服務、調諧服務和時鐘服務。就是說,UPnP之下的設備不能僅僅理解為硬體意義上的設備,而應當包括服務功能。   不同種類的UPnP設備將關聯不同的設定、服務和嵌入設備。如列印機和VCR屬于不同用途的設備,服務就不可能定義成一樣的。

服務

  設備執行使用者請求的控制過程,可劃分成一個個很小的階段或單位,每個單位就稱為一個服務。每一個服務,對外都表現為具體的行為和模式,而行為和模式又可以用狀態和變數值進行描述。只要可以用數值描述,在電腦裡面就容易處理了。例如,模仿一個時鐘,它只有一個工作模式:這個模式就是模擬并顯示當前的時間。而一個時鐘的行為共有兩種(也只有兩種):1. 設定時間(用來“即平時說的對表”).   2. 得到時間(用于顯示時間)。   其它設備服務,也是用這樣思路來描述和定義的,一個設備也可以被定義多個服務。不論是設備的定義信息和服務的描述信息,都儲存在一個XML檔案中,這個檔案也是UPnP協定構成的一部分。當設備建立和使用服務的時候,XML檔案可以與它們進行關聯。   XML檔案中還有一個很關鍵的“狀態表”,狀態表可進一步分為“服務狀態表”和“事件狀態表”。整個UPnP設備運行的全過程內,狀態表貫穿始終,當設備狀態改變的時候,例如發生參數變化或狀態重新整理的時候,立即就在“狀態表”中反映出來。如控制伺服器在接收到設定時間的行為請求時,就立即執行請求(對時操作),并給出回響,同時更新狀態表中的有關資料。相應地,事件伺服器負責向對此事件感興趣的設備公布所發生的狀態改變。例如,一個火災事件發生后,事件伺服器就向火災報警器釋放這個事件,造成報警器動作產生報警信號。

控制指針

  在UPnP網路中,使用者請求設備執行的控制是通過控制指針實現的,控制指針首先是一個有能力控制別的設備的控制者,還要具有在網路中 “發現”控制目標的能力。在發現(控制目標)之后,控制指針應當:   ①取得設備的描述信息并得到所關聯的服務清單。   ②取得相關服務的描述。   ③調用控制服務行為。   ④確定服務的事件 “源”,不論何時,只要服務狀態發生改變,事件伺服器會立即向控制指針傳送一個事件信息。   從上面說到的各種信息,都儲存在XML檔案中,不同用途的信息,格式不同。保證可以各取所需,不會混淆。

工作過程

  UPnP在控制指針和被控制設備之間提供通訊功能。而網路介質、TCP/IP協定、HTTP僅提供基本的連線和IP地址分配。整個工作過程需要處理六個方面的內容,即設備定址、發現設備、對設備的描述、設備控制、設備事件、設備表達。   設備定址   地址是整個UPnP系統工作的基礎條件,每個設備都應當是DHCP(Dynamic Host Configuration Protocol 動態主機配置協定)的客戶。當設備首次與網路建立連線后,利用DHCP服務,使設備得到一個IP地址。這個IP地址可以是DHCP系統指定的,也可以是由設備選擇的。當區域網路內沒有提供DHCP服務時,UPnP設備將按照Auto-IP的協定,從169.254/169.16地址范圍取得一個區域網路內唯一的IP地址。設備還能使用昵稱(friendly name),這就需要域名解析服務(DNS)來解決。   發現設備:   可分成兩種情況,一種是在有控制請求之后,在當前的網路中查找有無對應的可用設備;另一種情況是某一設備接入網路、取得IP地址之后,就開始向網路“廣播”自己已經進入網路,即尋找控制請求。   設備的描述:   簡單說,這是聲明“自己”是什么樣的設備,例如名稱、制造廠商、序列號碼等等。剛開始“發現”設備后,控制指針對這個設備的“了解”還很少,需要依據URL找到該設備的描述檔案,從這些檔案中讀取更多的描述信息。描述信息的范圍很廣,一般都是由設備的制造廠商提供的。主要的描述項目有:控制的模式名稱和模式號碼、設備序列號、制造廠商名稱、廠商的WEB的URL……等等。這些一般都存放在特定的XML檔案中。   設備控制:   控制指針找到設備描述之后,會從描述中“提煉”出要進行的操作并獲悉所有的服務;對每個UPnP設備來說,這些描述必須是很確切、很詳細的,描述中可能包含有命令或行為清單、服務回響信息、用到的參數等等。對于服務的每個行為,也伴有描述信息:主要是整個服務進行期間的變數、變數的資料類型、可用的取值范圍和事件的特征。   要控制某個設備,控制點必須先傳送一個控制行為請求,要求設備開始服務,然后再按設備的URL傳送相應的控制訊息,控制訊息就是放置在XML檔案中的那些SOAP格式的信息。最后,服務會返回回響信息,指出服務是成功或是失敗。   設備事件:   在服務進行的整個時間內,只要變數值發生了變化或者模式的狀態發生了改變,就產生了一個事件,系統將修改上述提到的事件清單的內容。隨之,事件伺服器把事件向整個網路進行廣播。另一方面,控制點也可以事先向事件伺服器訂閱事件信息,保證將該控制點感興趣的事件及時準確地傳送過來。   廣播或訂閱事件,傳送的都是事件訊息,事件訊息也放在XML檔案中,使用的格式是GENA。   設備投入工作之前的準備―――初始化過程,也是一個事件,初始化需要的各種信息也是用事件訊息傳送的。包括的內容主要是:變數初始值,模式的初始狀態等等。   設備表達:   只要得到了設備的URL,就可以取得該設備表達的URL,然后可以將此表達納入使用者的在地流覽器上。這部分還包括與使用者對話的介面,以及與使用者進行工作階段的處理。   簡要介紹下UPnP的工作流程:設備加入網路后通過設備定址就可自動獲得IP地址,通過設備發現,控制點就可知道網路上存在哪些設備,通過設備描述控制點就可知道設備詳細信息以及設備提供哪些服務,通過設備控制控制點可以使用設備的服務,通過設備事件設備就可以將其狀態變化及時告訴給感興趣的控制點,通過設備表達控制點可以用流覽器察看設備狀態和控制設備。通過上述的六個方面,UPnP設備可以做到在“零配置”的前提下提供了聯網設備之間的自動發現、自動聲明、“直接”信息交換和互操作等功能,真正實現“設備即插即用”。   UPnP所用到的主要協定還有:SSDP(Simple Service Discovery Protocol 簡單服務發現協定)、GENA(Generic Event Notification Architecture 通用事件通知結構)、SOAP(Simple Object Access Protocol 簡單對象訪問協定)、XML(Extensible Markup Language 可擴張標記語言)。采用IP協定來保證UPnP獨立與網路傳輸的物理介質,SOAP協定來保證UPnP設備具有互操作能力,XML來對設備和服務進行統一的描述,HTTP協定來進行UPnP設備的信息互動。采用這些現存的、廣泛套用的協定能減少開發UPnP設備的工作量,使UPnP設備更好地融入現有網路。