淺析UPnP協議


摘要:文章介紹了UPnP結構規范和開發流程,指出:UP nP協議使所有聯網的設備實現互聯,設備工作不需要傳統的驅動程序,便可以實現設備間的 相互控制。
關鍵詞:UPnP協議;開發流程;電子技術;工作流程
中圖分類號:TP393文獻標識碼:A文章編號:1007—6921(2009)17—0072—02

UPnP首先是由微軟公司於1999年提出,現今已經是開放的標准,由非盈利的論壇組織UPnP F orum 負責體系架構和標准的維護和更新升級。至2003年末,世界范圍內宣稱支持它的組織 已經達到600多家。目前UPnP尚處於1.0版本已經實現了智能設備的互聯互用。
1UPnP結構規范
1.1UPnP基本單元

組成UPnP的基本單元主要有以下3種:
1.1.1設備(Devices)。在U PnP規范中設備是最基本單元。設備代表了一個物理設備或包含多個物理設備的邏輯設 備,它是U PnP服務或嵌入設備的載體, 不同類型的設備對應一組不同的服務和嵌入設備。
1.1.2服務(Services)。在U PnP規范中服務是最小控制單元。服務是設備所能向外提供的功能,定義了設備的功能調 用接口以及描述設備狀態的變量。服務由一個狀態表、一個控制服務期和一個事件服務期構 成。
1.1.3控制點(Control Points)。在U PnP規范中控制點是U PnP網絡中的控制者,能發現和控制網絡中其他U PnP設備。當然在 物理實現上,設備一般充當了控制點的角色。
1.2UPnP協議結構

UPnP協議結構最底層的TCP/IP協議是UPnP協議結構的基礎。IP層進行數據的發送與接受。對 於那些需要可靠傳送的信息, UPnP使用TCP進行傳送, 反之則使用UDP進行傳送。UPnP對網絡 物理設備沒有要求,可以使用以太網、無線網、IEEE1394、紅外進行連接, 只要支持IP協議 即可。同時UPnP還可以使用TCP/IP協議族中的其他協議, 如ARP、IGMP、DHCP、DNS等。

構建在TCP/IP協議之上的是HTTP 協議及其變種,這一部分是UPnP協議的核心部分, 所有UPnP 消息都被封裝在HTTP協議及其變種之中。HTTP協議的變種是HTTPU和HTTPMU, 這些協議的格 式沿襲了HTTP協議,只不過與HTTP協議不同的是它們通過UDP而不是TCP來發送消息,並且可以 用於多播通信。

UPnP不同類別的應用使用不同的上層協議進行控制。其中簡單服務發現協議(Simple Servic e Discovery Protocol)定義了UPnP控制點如何發現網絡上的UPnP服務, 以及UPnP設備如何 向網絡發布自己所能提供的服務; 普通事件架構協議 (Generic Event Notification Archi tecture)定義了UPnP設備如何利用UDP和TCP來接受和發送事件通知,以及定義了通知預訂者 和發布者的概念以啟動事件; 簡單對象訪問協議(Simple Object Access Protocol) 定義了 可擴展標記語言(XML)和HTTP的使用來執行遠程調用,每個UPnP控制請求以及響應都是一個S OAP消息。

在UPnP協議結構的上層是UPnP自己定義的標准,其中對於UPnP的共有信息放在設備體系結構 中定義;不同類型的設備部分由不同類型的工作組定義; UPnP設備制造商定義自己設備的相 關信息,比如設備名稱、型號、序列號、廠商信息等等。
1.3UPnP工作流程

UPnP工作流程分析如下:
1.3.1尋址(Addressing)。UPnP協議的基礎是TCP/IP,這就決定了每一個UPnP必須分配一個IP地址。當一個UPnP設備或 控制點接入網絡時, 它能通過DHCP從網絡上獲取一個IP 地址。當網絡中不存在DHCP 服務器 時,它能通過Auto-Ip自動分配一個IP地址。
1.3.2發現(Discovery)。當UPnP設備或控制點獲得IP 地址以后, 設備可以通過網絡向控制點提供自己的相關信息;而 控制點可以從網絡上獲取自己感興趣的設備的信息。這一切都是通過SSDP協議實現的。

------------------oddy-----2010-06-10------------------------------------------------------

多播的地址 239.255.255.254,

 

通過抓包工具抓到的數據。格式如下:

查看更多精彩圖片
上面是設備發的SSDP出去,然后回應數據包

查看更多精彩圖片

接下來,路由器發送一個包給設備

查看更多精彩圖片

設備請求上面數據包中的一個東東

查看更多精彩圖片

然后路由器回應,並且發送一個XML的東西回來

查看更多精彩圖片

XML的包

查看更多精彩圖片

GET /igd.xml HTTP/1.1

Host: 192.168.1.1:1900

ACCEPT-LANGUAGE: en

 

HTTP/1.1 200 OK

CONTENT-LENGTH: 2746

CONTENT-TYPE: text/xml

DATE: Wed, 09 Jun 2010 10:01:03 GMT

LAST-MODIFIED: Tue, 28 Oct 2003 08:46:08 GMT

SERVER: TP-LINK Router R478, UPnP/1.0

CONNECTION: close

 

<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<URLBase></URLBase>
<device>
<deviceType>urn:schemas-upnp-org:device:InternetGatewayDevice:1</deviceType>
<presentationURL>http://192.168.1.1:80       </presentationURL>
<friendlyName             >TP-LINK Router R478</friendlyName>
<manufacturer                         >TP-LINK</manufacturer>
<manufacturerURL          >http://www.tp-link.com</manufacturerURL>
<modelDescription             >TP-LINK TL-R478 1.0</modelDescription>
<modelName                         >TL-R478</modelName>
<modelNumber                             >1.0</modelNumber>
<UDN>uuid:upnp-InternetGatewayDevice-192168115678900001</UDN>
<UPC>123456789001</UPC>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:Layer3Forwarding:1</serviceType>
<serviceId>urn:upnp-org:serviceId:L3Forwarding1</serviceId>
<controlURL>/l3f</controlURL>
<eventSubURL>/l3f</eventSubURL>
<SCPDURL>/l3f.xml</SCPDURL>
</service>
</serviceList>
<deviceList>
<device>
<deviceType>urn:schemas-upnp-org:device:WANDevice:1</deviceType>
<friendlyName>WAN Device</friendlyName>
<manufacturer                         >TP-LINK</manufacturer>
<manufacturerURL          >http://www.tp-link.com</manufacturerURL>
<modelDescription>WAN Device</modelDescription>
<modelName>WAN Device</modelName>
<modelNumber>1</modelNumber>
<modelURL></modelURL>
<serialNumber>12345678900001</serialNumber>
<UDN>uuid:upnp-WANDevice-192168115678900001</UDN>
<UPC>123456789001</UPC>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1</serviceType>
<serviceId>urn:upnp-org:serviceId:WANCommonInterfaceConfig</serviceId>
<controlURL>/ifc</controlURL>
<eventSubURL>/ifc</eventSubURL>
<SCPDURL>/ifc.xml</SCPDURL>
</service>
</serviceList>
<deviceList>
<device>
<deviceType>urn:schemas-upnp-org:device:WANConnectionDevice:1</deviceType>
<friendlyName>WAN Connection Device</friendlyName>
<manufacturer                         >TP-LINK</manufacturer>
<manufacturerURL          >http://www.tp-link.com</manufacturerURL>
<modelDescription>WAN Connection Device</modelDescription>
<modelName>WAN Connection Device</modelName>
<modelNumber>1</modelNumber>
<modelURL></modelURL>
<serialNumber>12345678900001</serialNumber>
<UDN>uuid:upnp-WANConnectionDevice-192168115678900001</UDN>
<UPC>123456789001</UPC>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:WANIPConnection:1</serviceType>
<serviceId>urn:upnp-org:serviceId:WANIPConnection</serviceId>
<controlURL>/ipc</controlURL>
<eventSubURL>/ipc</eventSubURL>
<SCPDURL>/ipc.xml</SCPDURL>
</service>
</serviceList>
</device>
</deviceList>
</device>
</deviceList>
</device>
</root>

接下來 設備 有開始請求IPC.XML

POST /ipc HTTP/1.1

HOST: 192.168.1.1:1900

Content-Length: 624

Content-Type: text/xml; charset="utf-8"

SOAPACTION:"urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping"

 

<?xml version="1.0"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<s:Body>

<u:AddPortMapping xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">

<NewRemoteHost></NewRemoteHost>

<NewExternalPort>9888</NewExternalPort>

<NewProtocol>TCP</NewProtocol>

<NewInternalPort>9888</NewInternalPort>

<NewInternalClient>192.168.1.238</NewInternalClient>

<NewEnabled>1</NewEnabled>

<NewPortMappingDescription>[IMAGIATEK IPCAM]</NewPortMappingDescription>

<NewLeaseDuration>0</NewLeaseDuration>

</u:AddPortMapping>

</s:Body>

</s:Envelope>

HTTP/1.1 200 OK

CONNECTION: close

SERVER: TP-LINK Router R478, UPnP/1.0

CONTENT-LENGTH: 332

CONTENT-TYPE: text/xml; charset="utf-8"

 

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<u:AddPortMappingResponse xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"></u:AddPortMappingResponse></SOAP-ENV:Body>
</SOAP-ENV:Envelope>


最后,設備就發了一個加入該多播組的包

查看更多精彩圖片

哈哈哈哈 我抓包的完成了 回到理論上的------------------oddy-----2010-06-10


1.3.3描述(Description)。當設備和控制點取得聯系后,描述可以供控制點獲取設備及其服務的詳細信息。這些信息以X ML 格式提供,並通過HTTP協議進行傳送。
1.3.4控制(Control)。當控制點獲取了設備的信息后,控制點可以對該設備進行控制。控制點通過向該設備某個服 務的URL 發送操作請求來控制該設備。請求和響應消息同樣是XML 格式的,並封裝在SOAP中 通過HTTP協議進行傳送。
1.3.5事件( Eventing)。當設備的服務狀態發生變化時設備通過事件來通知控制點。數據格式同樣是XML 的,但是封 裝在GENA 中通過HTTP協議進行傳送。
1.3.6展示( Presentation)。UPnP規定設備制造商通過展示可以提供該設備內容和功能的相關描述信息。描述信息以HTML  格式發布, 控制點可以向設備的展示URL發送HTTP GET請求來獲得相關信息。
2UPnP開發流程
2.1基於Windows的UPnP開發流程
Intel為Windows下的U PnP程序開發提供了自動開發工具Intel Authoring Tools for UPnP, 開發過程如下:
2.1.1使用Server Author生成XML格式的服務描述文件。
2.1.2使用Device Builder生成設備,載入已生成設備的服務描述文件。
2.1.3輸入設備信息,然后使用Device Builder生成設備的UPnP框架代碼。
2.1.4在UPnP框架代碼中添加自定義處理程序,編譯后即可。
Intel Authoring Tools for UPnP可以極大地提高開發效率, 它可以自動生成U PnP協議代 碼,讓開發者無需關心SSDP、GENA、SOAP等等協議細節,並且會提示開發者在自動生成的框架 代碼中, 哪些地方需要插入自定義處理程序。
2.2基於LINUX的UPnP開發流程

Intel為Linux下的UPnP 開發提供了SDK (Linux SDK for UPnP Devices) ,該SDK使用C語言 開發,並且是開源的。SDK封裝了UPnP涉及的眾多協議,涵蓋從尋址、發現到展示各個過程,並 提供了簡單的開發接口。這樣,開發人員就擺脫了各種協議的細節,只需進行服務或者控制所 需的具體開發,簡化了UPnP應用的設計開發。另外, SDK還包括多線程支持庫、XML解釋器、 迷你Web服務器等。
基於Intel的SDK開發UPnP應用, 以服務設備為例,主要有以下幾個基本步驟:
2.21UPnP設備初始化。首先調用UPnPInit ( ) , 初始化SDK; 調用UPnPSetWeb Server Root Dir( )注冊設備描述 文檔存放的目錄;調用UPnPRegister Root Device( )向SDK注冊設備描述文檔。
2.2.2公布UPnp服務。調用UPnP Send Advertisement( )向網絡公布設備及服務。然后 設備進入等待請求循環,響 應 控制點的請求。請求主要有:事件訂閱、獲取服務狀態、設定服務狀態等。當設備的服務狀 態改變時,調用UPnPNotify( )通知控制點。
2.2.3關閉UPnP。UPnP設備關閉前首先需要向網絡發送一個“bye- bye”的SSDP消息,然后調用UPnPUnRegiste rRoot2Device( )取消設備注冊,最后調用UPnPFinish( )進行必要的清理工作,然后關閉UPnP 設備。SDK中提供了描述設備及服務的XML 文檔的讀寫接口,但是具體格式需要由開發人員 指定。
2.3基於WinCe的UPnP開發流程
Microsoft在WinCE 5.0中為UPnP設備的開發提供了相關API, 以服務設備為例, 主要有以 下幾個步驟:
2.3.1制定設備XML文檔。
2.3.2制定該設備提供服務的XML文檔。
2.3.3實現一個COM對象, 該對象提供IU PnP2D eviceControl接口。通過調用IU PnPDev iceControl:Initialize( )初始化設備並注冊設備。當有控制點請求服務時調用IUPnPDevic eContro l:GetServiceObject( )提供設備及服務情況,並通過IDispatch接口傳遞服務對象 。
2.3.4為服務編寫IDispatch接口。IDispatch接口實現了服務設備所提供服務的信息。
3結束語

UPnP應用主要面向當前比較熱門的信息家電以及打造數字化家庭, Microsoft公司稱“UPnP 將延伸到家庭中的每一個設備, 它會成為個人電腦、應用程序、智能設備集成工作所必需的 框架協議和接口標准”。舉例而言,你可以通過掌上電腦控制家里的信息家電, 如設置空調 的工作狀態, 讓你在回家前就使室內溫度達到你喜歡的狀態;你可以隨時讓錄像機錄下你喜 歡的電視節目; 讓微波爐、電飯煲為你進行烹調。

UPnP正是定義了實現這些功能的底層接口。當然UPnP架構的推廣現在還不是十分普及,因為 傳統家電廠商對計算機技術以及通訊技術還不是很熟悉。傳統家電到數字化家電再到網絡化 家電還有很長的路要走,但這畢竟是傳統家電的進一步發展趨勢,相信在不久的將來, 數字化 家庭將實實在在的出現在你的身邊。
[參考文獻]
[1]何為.UPnP技術簡介[J].數字社會與智能家居,2007,(12)
[2]丁威,陳耀武.通用即插即用(UPnP)及其應用.現代機械,2006,(4)
[3]吳非,吳浩,劉金玉.基於UPnP協議棧的嵌入式家庭媒體適配器的研究與設計 [J].IN TEL PRESS, 2003,(3).
[4]楊志明.基於UPnP技術的媒體服務器的設計和實現[J].計算機應用與軟件,20 05,(10).
[5]張群哲,吳慶波.基於UPnP的數字家庭研究[J].計算機工程與科學,2007,(2) .

轉自:http://oddy.blog.hexun.com/51578284_d.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM