tag 标签: upnp

相关博文
  • 热度 30
    2015-3-12 16:07
    1543 次阅读|
    0 个评论
    文章开始之前让我们设想下面的几个情形:我们在办公室内就能访问到生产车间的网络摄像机,而无需到监控室查看生产情况;在下班之前,或在回去的路上,就可以先打开家里的空调器和厨房设备,等进入家门,立刻就是一个温度宜人的环境――厨房里的饭也做好了;我们想在电视机上回味一下几天前在景区拍的照片,把相机或者 DV 联网就可以了,无需再去拷贝。工作生活都如此方便,将是一个很惬意的事情。 实现这些场景的网络设备都要基于一种叫端口映射的网络技术。端口映射就是路由器将外网某一个端口与内网中某个设备的 IP 地址和端口号建立起一一对应关系。内网主动访问外网时,路由器主动建立了映射关系,内外网间就可以通信。但是外网要主动访问内网是不可行的,因为不知道内网的设备 IP 和端口,只能和路由器外网通信。路由器可以进行手动配置端口映射,但是便携式设备经常移动,内网的 IP 地址也是不是固定的,每次使用都要手动配置路由器显然是个麻烦的事情。本文就为你讲解如何使用 UPnP 协议实现网络设备自动配置路由器进行端口映射。 一、 UPnP 协议简介 UPnP ( Universal Plug and Play ,即插即用)是各种各样的 智能 设备、 无线 设备和个人 电脑 等实现遍布全球的 对等网络 连接( P2P )的结构。使用 UPnP 达到的效果是任何设备一旦连接上网络,所有在网络上的设备马上就能知道有新设备加入,这些设备彼此之间能互相通信,更能直接使用或者控制它,一切都不需要人工设置。 1.1 UPnP 结构 服务、设备和控制点是 UPnP 网络的基本组件,如图 1 :   图 1 UPnP 组件图 设备(Device):家电、手机、智能设备、无线设备、电脑等等都可以称之为设备。 服务(Service):是指设备在不同情况下的动作和设备的状态。 控制点(Control Point):指的是可以发现并控制其他设备的控制设备。在UPnP网络中,设备可以和控制点合并为同一台设备。   1.2   UPnP工作流程 UPnP 定义了设备之间、设备和控制点、控制点之间通信的协议。完整的 UPnP 有设备寻址、设备发现、设备描述、设备控制、事件通知和基于 HTML 的描述等几部分构成。 UPnP 协议最底层是 TCP/IP 协议, UPnP 实现的工作流程如图 2 所示: 图 2 UPnP 实现的工作流程 寻址:就是找个可用 IP 地址。一般都采用 DHCP 服务,使设备自动得到一个 IP 地址。 发现:加入到网络中,设备会定期的以组播的方式表明自身的存在以及告知( Advertise )它提供的服务;控制点则是网络中广播 search packets 来发现具有某些服务的设备,具有该服务的设备以单播的方式应答。 描述:控制点可以从发现消息中得到设备描述的 URL (可以认为是浏览器地址),通过 URL 取回设备描述的信息。 控制、事件和展示则是控制点获取描述之后进行的各种通信交互。其中控制是控制点对设备进行的操作;事件为设备向控制点定期发送其感兴趣的信息,展示可以认为是设备的一个功能,它给控制点一个 URL ,可以登录到设备的网页服务器。 二、 UPnP 路由器端口映射控制点在 W5500 实现 2.1 实验硬件平台和实验目的 通过以上讲解,相信大家对 UPnP 也有一定认识了,下面就让我们开始我们实验之旅。我们选用的实验平台为 WIZnet W5500EVB ,它使用 USB 口进行供电和调试,单片机为 STM32F103RCT6 ,网络芯片为 WIZnet 硬件 TCP/IP 的以太网芯片 W5500 。 我们的实验目的就是让 W5500 ( Control Point )控制路由器( Device )执行端口映射服务( Service ),让外网中的 PC2 可以与内网中的 W5500EVB 板建立连接。如图 3 所示 PC2 往路由器 36.36.141.53:12222 发送的信息,将被转发到内网 192.168.1.110:5000 。 图 3 端口映射网络图 2.2   UPnP 自动端口映射软件实现流程 本文中 W5500 将作为控制点的角色出现,并不需要实现展示的功能,在 UPnP 协议上仅实现了 Search 的过程,对网络中的 Advertise 消息不做处理。下面让我看看程序是如何实现的,首先看一下整个程序流程图如图 4 ,对整个程序有个大致的了解:   图 4 主程序流程图 如图所示: 程序首先进行初始化,初始化 CPU 资源和 W5500 然后使用 DHCP 协议自动获取 IP ,如果获取失败就设定为固定 IP , DHCP 的过程在此不再详细介绍。 获取 IP 地址后,先使用 SSDP 发现设备。 W5500 打开本地一个 socket ,再使用 UDP 组播地址( 255.255.255.255 )发送 SSDP M-SEARCH 信息搜索在相同子网中的 IGD ( Internet Gateway Device ),设备收到 SSDP M-SEARCH 信息后会回复数据包。如图 5 所示: 图 5 发送 SSDP 广播包和收到回复信息 通过解析收到数据包我们可以得到: LOCATION :设备描述文件的 URL 。通过 Location 信息,我们能够获得 IGD 的 IP 地址和端口号。利用这个 IP 地址和端口号生成 HTTP GET Header , W5500 重新打开一个 Socket ,然后再将其发送给 IGD 来获取 IGD 的服务描述。当 IGD 接收到 HTTP GET Header 后, IGD 将会让 W5500_Control_Piont 获知它的设备描述和服务描述。发送的数据包如图 6 。 图 6 还显示了设备回复的部分信息,从中我们可以看到设备描述和服务描述, WANIPConnection 对应端口映射服务,可以看到该路由设备有该项服务。在 WANIPConnection 服务描述中可以得到 Control URL 和 eventSubURL ,一个用来控制,一个用来订阅。     图 6 发送获取描述单播包和收到的回复信息 执行完上面的发现设备后在串口上为用户提供了一个菜单页面,通过在菜单中输入命令,我们可以交互添加端口和删除端口。 首先是添加端口,利用 IGD 的 IP 地址、端口号以及控制 URL 来完成 XML ,然后通过 HTTP POST method-basedSOAP 执行 AddPortMapping 操作。其执行过程如图 7 流程图所示: 图 7 AddPortProcess() 函数流程图 在 SOAP 描述中可以看到 ExternalPort 、 Protocol 、 InternalPort 以及控制点 IP 地址等信息,如图 8 AddPort 的报文所示。 IGD 在收到这样的控制请求后,会给出一系列应答,如果应答中包含收到“ UDNuuidAddPort Success!! ”后,表明端口映射添加成功。添加端口映射成功后,就可以在外网访问内网中指定 IP 地址和端口了,如果添加了 TCP 端口映射,可以建立连接并发送数据测试。       图 8 AddPort 的报文 删除端口与添加端口格式一样,都是通过 HTTP POST method-basedSOAP 执行 DeletePortMapping 操作,只需要 ExternalPort 和 Protocol 两个参数即可。在此不再详细叙述,请参考我们的程序代码下载链接: http://pan.baidu.com/s/1roc70 继续阅读:http://www.iwiznet.cn/blog/?p=6990       
  • 热度 20
    2015-1-27 16:28
    1231 次阅读|
    0 个评论
    来自:阿莫电子论坛 1. 概述 工具: PC  W5500EVB 路由器 串口调试工具 编译环境:Keil4 IAR 功能:通过SNMP协议实现内网与外网的端口映射以及连接。PC连接路由器,PC和路由器在同一个网段。本文主要把路由器IP模拟为外网IP,W5500EVB的IP作为内网IP,从以下几个方面来验证此功能的可实施性。 TCP Server回环测试 UDP回环测试 外网设备发送指令控制W5500EVB上LED 2. UPnP协议即通用即插即用英文是Universal Plug and Play,缩写为UPnP,下面主要说一下基本的实现过程。 UPnP定义了设备之间、设备和控制点、控制点之间通信的协议。完整的UPnP有设备寻址、设备发现、设备描述、设备控制、事件通知和基于Html的描述等几部分构成。 1)寻址 首先寻址是通过控制点和设备取得网络地址的过程,控制点和设备都先获取IP地址后才能进行下一步的工作; 2 ) 发现 控制点首先要寻找整个网络上的UPnP设备,同时网络上的设备也要宣告自身的存在,本篇中W5500将作为控制点; 3 ) 描述 控制点要取得设备的描述,包括这些设备提供什么样的服务;控制点可以从发现消息中得到设备描述的URL,通过URL取回设备描述的信息; 4)控制 控制点发出动作信息给设备; 5)事件 控制点监听设备的状态,当状态改变时作出相应的处理动作; 在控制点发现设备和取得设备描述之后,展示也就开始了。具体的讲解内容大家可以在网上搜集资料学习。 3.操作过程 注意:本篇实例并没有真正在外网测试,是在一个内网中再搭建一个内网,相对最内层的网络来说,外面的一层是“外网”,但是并不违背端口映射的原理。W5500EVB通过网线连接到路由器,PC应该和路由器在同一网段内。 编译程序无误以后下载到开发板里,复位以后查看串口的打印信息如下。 在执行DHCP、SSDP、获得描述和设置事件后,如果正常则显示以上信息。之后打印一个菜单页面,大家可以根据提示选择相应的应用功能。如下图所示。 按照菜单提示,我们首先添加一个TCP端口映射,外网端口为是随意的,由于本人能力有限,内网端口为固定的5000,添加成功后会提示AddPortSuccess。那么是否真的添加成功了呢,我们可以查看路由器的端口映射表。添加成功以后可以看到如下图所示信息。 ID 1的信息就是成功映射后的端口信息。 成功以后可以选择5 TCP 回环测试来验证效果如何。 首先检查下路由器在外网中的IP地址,登陆路由器在 WAN口设置 项可以找到路由器IP地址为192.168.10.135,可见路由器的网段与W5500 EVB(IP地址是192.168.1.110)的网段不是一样的,这正是“外网”和内网的区别。 我们在与路由器同一网段的PC(IP地址是192.168.10.116)上建立TCP client,连接到路由器的12222端口,并发送测试字符串,在接收区看到收到了loopback的回复,如下图所示。端口映射成功! 在测试完添加端口映射后,我们可以按照菜单提示将刚才添加的端口删除掉,然后在PC上重新连接刚才删除的外网端口,会发现已经连接不上,这与预期结果相符。 UPnP 的应用范围非常大,可以实现许多现成的、新的及令人兴奋的方案,包括家庭自动化、打印、图片处理、音频 / 视频娱乐、厨房设备、汽车网络和公共**场所的类似网络。它可以充分发挥 TCP/IP 和网络技术的功能,不但能对类似网络进行无缝连接,而且还能够控制网络设备及在它们之间传输信息。一个 UPnP 设备能够自动跟一个网络连接上、并自动获得一个 IP 地址、传送出自己的权能并获悉其它已经连接上的设备及其权能。最后,此设备能自动顺利地切断网络连接,并且不会引起意想不到的问题。   程序下载:http://pan.baidu.com/s/1B7BCM 感谢阅读! 更多WIZnet相关信息: WIZnet中文官方网站:http://www.iwiznet.cn WIZnet官方微博:http://weibo.com/wiznet2012 WIZnet公众平台二维码:
  • 热度 34
    2012-6-26 10:06
    1565 次阅读|
    0 个评论
    大家好,前面我们为大家分享了如何实现W5200E01-M3中的UPnP(通用即插即用) 端口转发(二),今天继续为大家分享最后一部分,希望对大家有帮助~ 第一部分请参考:   http://forum.eet-cn.com/BLOG_ARTICLE_12817.HTM 4. 预设置 4.1 局限性   我们不支持AutoIP。在本文的应用说明和基于W5200的模型中,DHCP是获取IP地址的唯一途径。 我们不支持设备广告。在本文的应用说明和基于W5200的模型中,广播寻找是搜索UPnP设备的唯一方法。同时,多余的通告信息将不被识别。 W5200单片机扮演了UPnP控制指针的角色,它实际上不需要嵌入网络服务器。网络服务器在UPnP设备中是不可缺少的。在这篇应用手册和基于W5200的模型中,不支持事件表达。 4.2 设置 IGD必须提前使能DHCP和UPnP功能。 5. 使用举例 用户必须按照下面的网络构造来执行UPnP端口发送。 注意: 默认状态下,本文添加了内部IP:4321 外部 IP: 1234的端口映射 通过图5,我们可以看到如下的应用过程: DHCP-SSDP- Get Description-AddPortMapping---DeletePortMapping (10 秒) “10秒” 表示在AddPortMapping之后,用户有10秒钟的时间用于检测。10秒钟之后, DeletePortMapping将会自动完成,紧随其后的则是一些相关的事件信息。正如之前所说的,对于测试,W5200(TCP服务器)将保持socket(内部端口4321)的监听。因此,如果能够与添加的外部端口建立连接,表示AddPortMapping操作成功。10秒之后,如果连接失败,表示DeletePortMapping成功。 下面的1~3步顺序执行UPnP端口转发: 上传应用文本的固件到W5200_EVB(关于上传方法,请参考W5200_EVB用户指南)。 运行串行终端,然后打开与W5200_EVB相连接的COM。(波特率:115200,数据位:8位,奇偶校验位:无,停止位:1位,流控制:XON/XOFF) 复位W5200_EVB之后串行终端将会告知用户它的运行状态。”AddPort Success!”信息表示AddPortMapping操作成功完成。 图7. AddPortMapping成功 4. 默认状态下, 本文添加了 内部 IP: 4321ó 外部IP: 1234 的端口映射。 用户可以利用AX1来检验这一点。 图8. 在远程主机上运行TCP客户端并且将其与IGD连接(添加外部端口) 5. 默认状态下,已添加的映射入口将会在10秒钟之后被自动删除。此时,将会看到“DeletePort Success!!”信息。  图9. DeletePortMapping成功 6. 再次运行AX1,检验映射入口是否被删除。 图10. 在远程主机上运行TCP客户端并将其与IGD连接(删除的外部端口)
  • 热度 31
    2012-6-25 10:54
    1656 次阅读|
    0 个评论
    大家好,前面我们为大家分享了如何实现W5200E01-M3中的UPnP(通用即插即用) 端口转发(一),今天继续为大家分享第二部分,希望对大家有帮助~ 第一部分请参考: http://forum.eet-cn.com/BLOG_ARTICLE_12795.HTM   3. 端口转发和W5200 工作流程 这篇应用笔记主要介绍了在 W5200 单片机中通过 UPnP 执行端口发送的过程。在此过程中, W5200 是 IGD 的控制指针,它能够编辑端口的发送功能。同时, W5200 单片机也是 LAN 客户端, IGD 则来执行端口转发。这样我们可以总结为, W5200 单片机控制指针能够向 IGD 发送命令执行端口发送函数。所有的指令都基于 IGD 标准,这些标准由因特网网关工作委员会定义,而委员会又是由 UPnP 建立的。基本上,端口发送包括两个步骤:一是添加端口映射,另一个是删除端口映射。除此以外,在添加和删除端口映射的过程中,有一些异常需要 W5200 单片机去处理,例如: 1.映射入口的冲突 : 端口映射入口指定的冲突在之前就已经由另一个客户端分配。 2. 更多的异常可以在 IGD 服务模板中找到 。 这篇应用手册将会介绍 W5200 如何添加以及删除端口映射。下面的图形也解释了 W5200UPnP 端口转发的过程。 注意: 更多关于Step0寻址 的信息,请参阅“如何用 W5200 实现 DHCP 通信”。   图 5. W5200 的 UPnP 端口发送过程   阶段1 SSDP 为了能够搜索在相同子网中的IGD,W5200必须使用UDP多播地址发送SSDP M-SEARCH信息。 ☞注意:SSDP利用多播地址、通用socket方式来发送数据。例如: 1)在实际的多播过程中,W5200单片机必须采取下面的方式打开socket: socket(sock_id, Sn_MR_UDP, MULTICAST_PORT, Sn_MR_MULTI); 2) 在SSDP中,W5200单片机仍然可以创建通用socket: socket(sock_id, Sn_MR_UDP, MULTICAST_PORT, 0)    在这篇应用手册中,所有和描述相关的多播都属于2)中的情况。 SSDP响应能够使W5200获知IGD的IP地址、端口号以及所有的描述URL。         M-SEARCH * HTTP/1.1\r\n Host:239.255.255.250:1900\r\n ST:urn:schemas-upnp-org:device:InternetGatewayDevice:1\r\n Man:"ssdp:discover"\r\n MX:3\r\n \r\n   下面的源代码在SSDPProcess()函数执行:     {       初始化一个多播的socket(UDP,目的IP是239.255.255.250,目的端口是1900,目的MAC是0x01:0x00:0x5E:0x7F:0xFF:0xFA)         //发送SSDP       sendto(sockfd, SSDP, strlen(SSDP), mcast_addr, 1900);         //接收回复       while       {            if(overtime){                  close a multicasting socket                  return -1;            }else if(receive buffer is not empty){                  receive the SSDP response from IGD to recv_buffer            }       }       Close a multicasting socket         // 解析SSDP信息       return parseSSDP(recv_buffer); }   阶段2 获取IGD服务的描述 利用IGD的IP地址,端口号和Description URL描述来完成HTTP GET Header,然后将其发送给IGD。 当IGD接收到HTTP GET Header后,IGD将会让W5200单片机获知它的描述。 描述过程将会使W5200获知它的Control URL以及Eventing Subscription URL。     GET destURL HTTP/1.1\r\n Accept: text/xml, application/xml\r\n User-Agent: Mozilla/4.0 (compatible; UPnP/1.0; Windows NT/5.1)\r\n"); Host: destIP:destPORT \r\n Connection: Keep-Alive\r\n Cache-Control: no-cache\r\n Pragma: no-cache\r\n \r\n     下面的源代码是由GetDescriptionProcess()函数来执行的。       {       //构造HTTP GET Header       MakeGETHeader(send_buffer);         Initialize a unicasting socket         //连接到IGD(Internet Gateway Device)       connect(sockfd, ipaddr of IGD, port of IGD);         wait while connecting to IGD         //发送Get Discription Message       send(sockfd, send_buffer, strlen(send_buffer), FALSE);         //接收回复       while       {            if(overtime){                  close a unicasting socket                  return -1;            }else if(receive buffer is not empty){                  receive the SSDP response from IGD to recv_buffer            }       }       Close a unicasting socket         //解析Discription Message       return parseDescription(recv_buffer); }   阶段3 Case 1:添加端口控制 利用IGD的IP地址、端口号以及控制URL来完成XML,然后通过HTTP POST method-based SOAP执行AddPortMapping操作。                                           下面的源代码是由AddPortProcess()函数执行的。.     {       //构造"Add Port" XML(SOAP)       MakeSOAPAddControl(content, protocol, extertnal_port, internal_ip, internal_port, description);         //构造HTTP POST Header       MakePOSTHeader(send_buffer, strlen(content), ADD_PORT);       strcat(send_buffer, content);         Initialize a unicasting socket         //连接到IGD(Internet Gateway Device)       connect(sockfd, ipaddr of IGD, port of IGD);         wait while connecting to IGD         //发送"Add Port"信息       send(sockfd, send_buffer, strlen(send_buffer), FALSE);         // 接收回复       while       {            if(overtime){                  close a unicasting socket                  return -1;            }else if(receive buffer is not empty){                  receive the SSDP response from IGD to recv_buffer            }       }       close a unicasting socket         //解析回复信息       return parseAddPort(recv_buffer); }   Case 2: 删除端口控制 利用IGD的IP地址、端口号以及控制URL来完成XML,然后通过HTTP POST method-based SOAP执行DeletePortMapping操作。   下面的源代码是在DeletePortProcess()函数中执行的。.     {       //构造"Delete Port" XML(SOAP)       MakeSOAPDeleteControl(content, protocol, extertnal_port);         //构造HTTP POST Header       MakePOSTHeader(send_buffer, strlen(content), DELETE_PORT);       strcat(send_buffer, content);         Initialize a unicasting socket         //连接到(Internet Gateway Device)       connect(sockfd, ipaddr of IGD, port of IGD);         wait while connecting to IGD         // 发送"Delete Port"信息       send(sockfd, send_buffer, strlen(send_buffer), FALSE);         // 接收回复       while       {            if(overtime){                  close a unicasting socket                  return -1;            }else if(receive buffer is not empty){                  receive the SSDP response from IGD to recv_buffer            }       }       close a unicasting socket         //解析回复信息       return parseDeletePort(recv_buffer); }   Case 1和Case 2测试 为了确认UPnP端口转发能否正常工作,用户可以在远程PC机上运行TCP客户端,然后将其连接到W5200(TCP服务器)单片机。用户可以参考第五章节“学习如何检验AddPortMapping和DeletePortMapping的使用举例”。     下面的源代码是在tcp_test()函数中执行的。       {       switch (getSn_SR(sockfd))       {            case SOCK_ESTABLISHED:/* 如果连接建立*/                  if(receive buffer is not empty){                        recv(sockfd, recv_buffer, len);                  }            break;              case SOCK_CLOSE_WAIT:/*如果客户端请求关闭 */                  if (receive buffer is not empty)                  {                        recv(sockfd, recv_buffer, len);                  }                  disconnect(sockfd);            break;              case SOCK_CLOSED:/*如果socket关闭 */                  reinitialize a TCP socket                  listen            break;       } }       4.  阶段4 提交事件 (可选) 为了能够提交事件,首先W5200单片机通过IGD的IP地址、端口号和事件提交URL来完成GENA信息,然后将GENA信息发送给IGD。   SUBSCRIBE eventSubURL HTTP/1.1\r\n Host: destIP:destPORT \r\n USER-AGENT: Mozilla/4.0 (compatible; UPnP/1.1; Windows NT/5.1)\r\n CALLBACK: http:// myIP:listen_port /\r\n NT: upnp:event\r\n TIMEOUT: Second-1800\r\n \r\n     下面的源代码是在SetEventing()函数中执行的。       {       // 构造Subscription message       MakeSubscribe(send_buffer, listen_port);         Initialize a unicasting socket         // Connect to IGD(Internet Gateway Device)       connect(sockfd, ipaddr of IGD, port of IGD);         wait while connecting to IGD         // 发送Subscription Message       send(sockfd, send_buffer, strlen(send_buffer), FALSE);         //接收回复       while       {            if(overtime){                  close a unicasting socket                  return -1;            }else if(receive buffer is not empty){                  receive the SSDP response from IGD to recv_buffer            }       }       close a unicasting socket         return 0; } 如果您有什么疑问,请直接留言或登录WIZnet官方网站:http://www.wiznettechnology.cn/ 或者来电:86-10-84539974(转166),QQ:2377211388, 邮箱:wiznetbj@wiznettechnology.com  联系人:Jerry ,谢谢!  
  • 热度 31
    2012-6-21 09:42
    1153 次阅读|
    0 个评论
    这篇应用文章将会介绍WIZnet W5200芯片和基于W5200的模块上UPnP的一些技术信息。第一,介绍什么是UPnP。第二,介绍UPnP工作组定义的端口转发概念。最后,这篇文章会说明W5200芯片如何添加和删除端口映射。今天为大家分享第一部分,端午节后继续为大家分享后面两部分~希望对大家有帮助~ 1. 说明 1.1 概念 请参考Wikipedia What is UPnP?     UPnP 的概念最早来源于即插即用。即插即用是描述计算机总线特性、设备规格的一个专业术语。利用即插即用可以大大简化系统的整个硬件组成,而不需要再进行物理设备的配置,也避免了解决资源冲突时用户的干预 。整个思路就是:只需要在设备中插入,然后就可以使用。 如今将UPnP将即插即用概念创造性地应用于网络环境下。UPnP可以自动搜索设备类别。它支持零配置,“隐形”网络,以及自动检索功能。这就意味着设备UPnP可以动态加入网络、获得IP地址、传输性能,从而得到当前设备以及其他设备的性能的相关信息——全自动化、完全零配置网络支持。 1.2 UPnP结构以及UPnP涉及的步骤 UPnP 结构 TCP 由客户端和服务器构成。同样地, UPnP 结构也基于设备和控制点 :   设备:      提供服务     例如, UPnP DVD 播放器是用来提供 DVD 播放服务的设备。     记录设备的状态 .     例如, DVD 播放器能够记录 DVD 的播放状态。 控制点      控制已经定义的设备来执行相应的服务 图 1. UPnP网络 为了能够实现所有的描述,通用即插即主要应用于TCP/IP、DHCP、XML等等现存的一些标准中,从而使这些标准的应用更加广泛。 UPnP 网络应用的步骤 在 UPnP 机制下存在 6 种不同的步骤: (1) 寻址 寻址是通过控制点和设备取得网络地址的过程。这些控制点和设备先从 DHCP 服务器上获得一个 IP 地址;如果没有可用的 IP 地址,将会在 169.254 的子网上随机获取一个自动 IP 地址。 注意: 在寻址过程中 , AutoIP 和 DHCP 都可以协助 UPnP 控制点和设备取得一个 IP 地址。但是 DHCP 要比 AutoIP 的更为常用和可靠。所以,在这篇应用手册和基于 W5200 的模型中, DHCP 是获得 IP 地址的唯一方法。   (2)搜索 控制点可以通过搜索来查找对它们有意义的设备。 当控制点进入网络时,它们以普通或者特殊方式释放 search packets 来搜索 and/or 服务的设备。搜索完成后,具有合适服务特性的设备或者子设备就会做出响应。 同样地, UPnP 设备首先将会以规律性间隔的方式在网络上表明自身的存在。控制点监听这些状态,检测这些新的设备并且判断它们在网络上的性能表现。 网络上的其它 UPnP 设备将会发出通知表明它们提供的服务将不再有效。 注意: 在搜索过程中,无论是Searching或者Advertising都可以帮助UPnP控制点来寻找UPnP设备。在Searching和Advertising这两种方法相同的情况下,在这篇应用手册和基于W5200的模型中都是保留了Searching方法,而Advertising方法将被忽略。 (3)描述 UPnP 发送搜索包,将控制点送到一个它们能够检索 Device Description Document(DDD) 的位置。 DDD 包括: 所有嵌入式设备的概述以及一个服务列表。 被称做服务控制协议定义 (SCPD) 一个 URL 。 SCPD 描述了控制点如何使用这些设备提供的服务。 控制和事件 URLs: 这些 URLs 表示控制点必须发送命令来配置 UPnP 设备 , 并且利用这些设备所提供的服务。 用来陈述的 URL( 见第 6 步 ).   (4) 控制 控制过程允许控制点向设备发送命令。如之前提到的,在 DDD 中指定发送命令的 URL 。   (5)   事件 事件过程允许控制点跟踪设备的状态变化。控制点首先订阅合适的服务,随后设备服务中任何状态的变化都会以事件的形式发送给已经订阅的控制点来保证它们的更新。   (6)  陈述 控制点能够选择性地为设备显示一个用户的界面。用来陈述的 URL 是在 DDD 中已经被指定。陈述页面显示基于 HTML 的用户界面,这样用户就可以参考 and/or 设备的状态。所以陈述过程是控制过程和事件过程的补充。 注意: W5200扮演了一个UPnP控制点的角色,实际上它并不需要嵌入一个网络服务器。网络服务器在UPnP设备中是不可缺少的,所以在本文和基于W5200单片机的模型中,并不支持陈述过程。   2. 端口转发和UPnP 端口转发 简单来说,端口发送(另一种说法是 NAT 遍历)功能允许创建 TCP 和 UDP 协议映射。这些协议应用于外部因特网网关设备( IGD )端口(称为外部端口)和内部客户机地址。这里的内部客户地址与其中的一个端口相联系(分别称为内部客户机和内部端口)。 请参考下面的图形来理解端口转发的应用: UPnP 和端口转发 端口转发是 IGD 众多功能中最基本的一个(更多的 IGD 标准功能可以在 UPnP IGD 服务模板中找到)。尽管端口转发功能可以手动完成,但是通过使用 UPnP ,端口转发功能默认执行操作。我们可以这样说, UPnP 为用户实现了端口转发的更清晰化。 目前,很多类型的 P2P 软件都支持 UPnP 的端口转发功能,例如 Skype 、 UTorrent 以及 MSN 。如果你对 UPnP 感兴趣,可以登录 IGD 的设置页面找到端口发送列表(见图 4 ),在列表中你会发现所有的端口映射。大部分的映射都是有 UPnP 完成,而不是用户。 图4. UPnP端口映射列表