UPnP是通用即插即用(Universal Plug and Play)的缩写,它主要用于实现设备的智能互联互通。使用UPnP协议不需要设备驱动程序,因此使用UPnP建立的网络是介质无关的,它可以运行在几乎所有的操作系统平台之上,可以使用任何开发语言,使得在办公室、家庭和其他公共场所方便地构建设备相互联通的网络环境。UPnP实际上是扩展了传统单机的设备和计算机系统的概念,在"零配置"的前提下提供了连网设备之间的发现、接口声明和其他信息的交换等互动操作功能。


从UPnP的定义来看,它的功能不仅仅是能够实现端口映射。但是实现端口映射是它的一项重要的功能,也是我们最常利用的功能。端口映射,可以理解为就是网络地址的转换,即NAT,那么UPnP是如何实现这种转换的呢?


要实现UPnP,首先要操作系统支持这种协议,还衷诘牟僮飨低常琖inXP, Win2K, Vista都支持这个功能,不过系统默认不安装,需要手动安装。其次,路由器要支持UPnP协议,不过,现在的主流路由器都支持这个功能。最后,在程序中实现UPnP。下面的过程是程序利用UPnP协议实现端口映射:


1. 寻找UPnP设备

  首先通过广播的形式发送UDP数据报,如果收到了应答消息,根据应答消息可以得到UPnP设备的端口和地址。

  这里面的广播数据格式有严格的规定,可以查询相关的资料。成功的找到UPnP设备,会收到类似

  HTTP/1.1 200 OK 的消息响应。

2. 根据第一步获得的路由器的IP和端口,和路由器建立Socket连接,获取路由器的控制URL.

3. 根据第二步的控制URL, 向路由器发送添加端口映射的控制信息。

4. 如果第3步添加成功,则可以向路由器发送查询映射项的信息。