互联网的本质就是一系列的协议,总称为‘互联网协议’(InternetProtocolSuite).互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。
1物理层
2数据链路层数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思数据链路层的功能:定义了电信号的分组方式数据链路层是模型中的第2层,该层对接受到物理层传输过来的比特流进行分组,一组电信号构成的数据包,就叫做"帧",数据链链路层就是来传输以"帧"为单位的数据包,把数据传递给上一层(网络层),帧数据由两部分组成:帧头和帧数据,帧头包括接受方物理地址(就是网卡的地址)和其他的网络信息,帧数据就是要传输的数据体。数据帧的最长为1500字节,如果数据很长,就必须分割成多个帧进行发送。
以太网协议:早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernetethernet规定一组电信号构成一个数据包,叫做‘帧’每一数据帧分成:报头head和数据data两部分
head包含:(固定18个字节)发送者/源地址,6个字节接收者/目标地址,6个字节数据类型,6个字节
data包含:(最短46字节,最长1500字节)数据包的具体内容head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送
mac地址:head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
广播:有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼
3网络层网络层由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,这就不仅仅是效率低的问题了,这会是一种灾难
该层通过寻址(寻址地址)来建立两个节点之间的连接,大家都知道我们的电脑连接上网络后都一个IP地址,我们可以通过IP地址来确定不同的计算机是否在同一个子网路。如果我们的电脑连接上网络后就有两种地址:物理地址和网络地址(IP地址),网络上的计算机要通信,必须要知道通信的计算机“在哪里”,首先通过网络地址来判断是否处于同一个子网络,然后再对物理地址(MAC)地址进行处理,从而准确确定要通信计算机的位置。在网络层中有我们熟悉的IP协议(即规定网络地址的协议),目前广泛采用的是IP协议第四版(IPv4),这个版本规定,网络地址由32位二进制位组成。我们可以自己配置IP地址也可以自动获得的方式得到IP地址,Ip地址分成两部分,前24位代表网络,后8位代表主机号,如192.168.254.1和192.168.254.2就处于同一个子网络里,因为这两个IP地址的前24位相同。网络层中以IP数据包的形式来传递数据,IP数据包也包括两部分:头(Head)和数据(Data),IP数据包放进数据帧中的数据部分进行传输。
上图结论:必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,就采用路由的方式(向不同广播域/子网分发数据包),mac地址是无法区分的,它只跟厂商有关网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址
IP协议:规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示范围0.0.0.0-255.255.255.255一个ip地址通常写成四段十进制数,例:172.16.10.1ip地址分成两部分网络部分:标识子网主机部分:标识主机注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网
ip数据包ip数据包也分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分head:长度为20到60字节data:最长为65,515字节。而以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。
ARP协议通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议arp协议功能:广播的方式发送数据包,获取目标主机的mac地址协议工作方式:每台主机ip都是已知的例如:主机172.16.10.10/24访问172.16.10.11/241:首先通过ip地址和子网掩码区分出自己所处的子网2:分析172.16.10.10/24与172.16.10.11/24处于同一网络(如果不是同一网络,那么下表中目标ip为172.16.10.1,通过arp获取的是网关的mac)3:这个包会以广播的方式在发送端所处的自网内传输,所有主机接收后拆开包,发现目标ip为自己的,就响应,返回自己的mac
4传输层传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。传输层功能:建立端口到端口的通信补充:端口范围0-65535,0-1023为系统占用端口
tcp协议:可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。以太网头ip头tcp头数据
udp协议:不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。以太网头ip头udp头数据
tcp报文
tcp三次握手和四次挥手
5应用层应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开放的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式应用层功能:规定应用程序的数据格式。例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。
『应用层』算是距离用户最近的一层了,主机上的一个个的进程就构成了『应用层』。比如你在你的浏览器地址栏输入了「www.baidu.com」,你的浏览器在应用层会做哪些事情呢?首先浏览器会使用DNS协议返回域名「www.baidu.com」所对应的IP地址,接着,应用层决定创建一个『TCP套接字』,然后将这个请求动作封装成一个Http数据报并推入套接字中。套接字就是用于区分各个应用层应用的,往往由端口号和IP地址进行标识,运输层只要查看响应报文的源端口号和IP地址就能够知道该将报文推送给哪个套接字了。
DNS原理
首先明确一点的是,DNS是一个应用层协议,并且它选择的运输层协议是UDP,所以你的域名解析过程一般会很快,但也会经常出现解析失败的情况,然而刷新一下又好了。
在DNS服务器上,域名和它所对应的IP地址存储为一条记录,而所有的记录都不可能只存储在一台服务器上,我相信无论多么强大的服务器都扛不住全球上亿次的并发量吧。
大致来说,有三种类型的DNS服务器,根DNS服务器,顶级域DNS服务器和权威DNS服务器。
其中,顶级域DNS服务器主要负责诸如com、org、net、edu、gov等顶级域名。
根DNS服务器存储了所有顶级域DNS服务器的IP地址,也就是说你可以通过根服务器找到顶级域服务器。例如:「www.baidu.com」,根服务器会返回所有维护com这个顶级域服务器的IP地址。
然后你任意选择其中一个顶级域服务器,请求该顶级域服务器,该顶级域服务器拿到域名后应当能够做出判断并给出负责当前域的权威服务器地址,以百度为例的话,顶级域服务器将返回所有负责baidu这个域的权威服务器地址。
于是你可以任意选择其中一个权威服务器地址,向它继续查询「www.baidu.com」的具体IP地址,最终权威服务器会返回给你具体的IP地址。
至此,我们简单描述了一个域名解析的大致过程,还有一些细节之处并未提及,我们等会会通过一个实例来完整的看一下,下面描述一个非常重要的概念。
整个DNS解析过程中,有一个非常核心的人物我们一直没介绍它,它就像主机的『助理』一样,帮助主机查询域名的IP地址。它叫做『本地DNS服务器』。
大家每次通过DHCP动态获取IP地址的时候,其实路由器不仅给你返回了IP地址,还会告诉你一个DNS服务器地址,这个就是你的本地DNS服务器地址,也就是说,你的所有域名解析请求只要告诉它就行了,它会帮你查并返回结果给你的。除此之外,本地DNS服务器往往是具有缓存功能的,通常两天内的记录都会被缓存,所以大部分时候你是感觉不到域名解析过程的,因为往往就是从缓存里拿的,非常快。下面我们看一个简单的案例:
其实整个DNS报文的发送与响应过程都是要走我们的五层协议的,只是这里重点在于理解DNS协议本身,所以并未提及其他层的具体细节,这里的强调是提醒你DNS只是一个应用层协议。
7、总结现在通过一个简单的访问网页的例子来说明网络中的通信。当我们在浏览器中输入www.baidu.com时,这意味着浏览器要向百度发送一个网页数据包,要发送数据包,需要知道对方的IP地址,这里我们只知道网址为www.baidu.com,却不知道IP地址,此时应用层协议DNS协议会帮我们把网址解析为IP地址,此时会发送一个DNS数据包给DNS服务器,DNS服务器再做出响应来告诉我们百度的IP地址为220.181.111.147,这样我们就知道百度(我们需要通信的主机)的IP地址。
传输层:TCP数据包需要设置端口,接收方(百度)的Http端口默认是80,本机的端口是一个1024-65535之间的随机整数,这里假设为1025,这样TCP数据包由标头(标识着发方和接收方的端口信息)+HTTP数据包,这样TCP数据包再嵌入IP数据包中在网络上传送
网络层:IP数据包需要知道双方的IP地址,本机IP地址假定为192.168.1.5,接受方IP地址为220.181.111.147(百度),这样IP数据包由头部(IP地址信息)+TCP数据包,
数据链路层:IP数据包嵌入到数据帧(以太网数据包)中,以太网数据包需要知道双方的MAC(物理地址),发送方为本机的网卡地址,接受方为网关192.168.1.1的MAC地址(通过ARP地址解析协议得到的)。这样数据帧由头部(MAC地址)+IP数据包组成。经过多个网关的转发到百度服务器220.181.111.147,服务器接受到发送过来的以太网数据包,然后再从以太网数据包中提取IP数据包——>TCP数据包——>HTTP数据包,最后服务器做出"HTTP响应",再用TCP协议发回给客户端(浏览器),浏览器同样的过程读取到HTTP响应的内容(HTTP响应数据包),然后浏览器对接受到的HTML页面进行解析,把网页显示出来呈现给用户,这样就完成了一次网络通信了。后面一个专题将对HTTP协议进行详细的介绍。
一、OSI模型名称层次功能物理层1实现计算机系统与网络间的物理连接数据链路层2进行数据打包与解包,形成信息帧网络层3提供数据通过的路由传输层4提供传输顺序信息与响应会话层5建立和中止连接表示层6数据转换、确认数据格式应用层7提供用户程序接口
1)物理层——Physical这是整个OSI参考模型的最低层,它的任务就是提供网络的物理连接。所以物理层是建立在物理介质上的,它提供的是机械和电气接口。主要包括电缆、物理端口和附属设备,如双绞线、同轴电缆、接线设备(如网卡等)、RJ-45接口、串口和并口等在网络中都是工作在这个层次的。物理层提供的服务包括:物理连接、物理服务数据单元顺序化(接收物理实体收到的比特顺序,与发送物理实体所发送的比特顺序相同)和数据电路标识。物理层透明地传输比特流,就是传输的信号。该层上的设备包括集线器、发送器、接收器、电缆、连接器和中继器。
2)数据链路层——DataLink数据链路层是建立在物理传输能力的基础上,以帧为单位传输数据,它的主要任务就是进行数据封装和数据链接的建立。封装的数据信息中,地址段含有发送节点和接收节点的地址,控制段用来表示数据连接帧的类型,数据段包含实际要传输的数据,差错控制段用来检测传输中帧出现的错误。数据链路层可使用的协议有SLIP、PPP、X.25和帧中继等。常见的集线器和低档的交换机网络设备都是工作在这个层次上,Modem之类的拨号设备也是。工作在这个层次上的交换机俗称“第二层交换机”。具体讲,数据链路层的功能包括:数据链路连接的建立与释放、构成数据链路数据单元、数据链路连接的分裂、定界与同步、顺序和流量控制和差错的检测和恢复等方面。这一层是和包结构和字段打交道的和事佬。一方面接收来自网络层(第三层)的数据帧并为物理层封装这些帧;另一方面数据链路层把来自物理层的原始数据比特封装到网络层的帧中。起着重要的中介作用。数据链路层由IEEE802规划改进为包含两个子层:介质访问控制(MAC)和逻辑链路控制(LLC)。智能集线器、网桥和网络接口卡(NIC)等就驻扎在这一层。但是网络接口卡它同样具有物理层的一些编码功能等。
3)网络层——Network网络层属于OSI中的较高层次了,从它的名字可以看出,它解决的是网络与网络之间,即网际的通信问题,而不是同一网段内部的事。网络层的主要功能即是提供路由,即选择到达目标主机的最佳路径,并沿该路径传送数据包。除此之外,网络层还要能够消除网络拥挤,具有流量控制和拥挤控制的能力。网络边界中的路由器就工作在这个层次上,现在较高档的交换机也可直接工作在这个层次上,因此它们也提供了路由功能,俗称“第三层交换机”。网络层的功能包括:建立和拆除网络连接、路径选择和中继、网络连接多路复用、分段和组块、服务选择和流量控制。
这一层干的事就比较多了。它工作对象,概括的说就是:电路、数据包和信息交换。网络层确定把数据包传送到其目的地的路径。就是把逻辑网络地址转换为物理地址。如果数据包太大不能通过路径中的一条链路送到目的地,那么网络层的任务就是把这些包分成较小的包。这些光荣的任务就派给了路由器、网桥路由器和网关。以后几层属于较高层,通常驻留在跨网络相互通信的计算机中,而不象以上几层可以独自为阵。设备中只有网关可跨越所有各层。
6)表示层——Presentation表示层用于数据管理的表示方式,如用于文本文件的ASCII和EBCDIC,用于表示数字的1S或2S补码表示形式。如果通信双方用不同的数据表示方法,他们就不能互相理解。表示层就是用于屏蔽这种不同之处。表示层的功能主要有:数据语法转换、语法表示、表示连接管理、数据加密和数据压缩。定义由应用程序用来交换数据的格式。在这种意义上,表示层也称为转换器(translator)。该层负责协议转换、数据编码和数据压缩。转发程序在该层进行服务操作。
7)应用层——Application这是OSI参考模型的最高层,它解决的也是最高层次,即程序应用过程中的问题,它直接面对用户的具体应用。应用层包含用户应用程序执行通信任务所需要的协议和功能,如电子邮件和文件传输等,在这一层中TCP/IP协议中的FTP、SMTP、POP等协议得到了充分应用。该层是OSI模型的最高层。应用层向应用进程展示所有的网络服务。当一个应用进程访问网络时,通过该层执行所有的动作。
1.本机获取本机的IP地址:192.168.1.100子网掩码:255.255.255.0网关的IP地址:192.168.1.1DNS的IP地址:8.8.8.8
2.打开浏览器,想要访问Google,在地址栏输入了网址:www.google.com。
8服务器端响应经过多个网关的转发,Google的服务器172.194.72.105,收到了这四个以太网数据包。根据IP标头的序号,Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的”HTTP请求”,接着做出”HTTP响应”,再用TCP协议发回来。本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。
2特殊ip地址1网络地址:用于表示网络本身,具有正常的网络号部分,而主机号部分全部为0的ip地址称之为网络地址,如172.16.45.0就是一个B类网络地址2广播地址:用于向网络中的所有的设备进行广播。具有正常的网络号部分,而主机号部分全为1(即255)的ip地址称之为广播地址,如172.16.45.255就是一个B类的网络地址3有限广播地址:指的是32位全位1(即255.255.255.255)的ip地址,用于本网广播4回送地址:网络地址不能以十进制的127作为开头,在地址中数字127保留给系统作为诊断用,称为欢送地址,如127.0.0.1用于回路测试5私有地址:只能在局域网内使用,不能在internet上使用的ip地址称为私有ip地址,私有ip地址有:1、10.0.0.0~10.255.255.255,表示一个A类地址2、172.16.0.0~172.31.255.255,表示16个B类地址3、192.168.0.0~192.168.255.255,表示256个C类地址60.0.0.0:指已经不是真正意义上的ip地址,它表示的是所有不清楚主机和目的网络,这里的不清楚指的是在本机路由表里没有特定条目指明如何到达
1子网掩码用于识别ip地址中的网络地址和主机地址。2子网掩码也是32位二进制数字,在子网掩码中,对应于网络地址部分全用1表示,主机部分全用0表示3还可以用网络前缀表示子网掩码,即"<网络地址位数>",如172.16.45.0/24表示B类网络172.16.45.0的子网掩码为255.255.255.0
5子网划分步骤确定要划分的子网数以及每个子网的主机数求出子网数目对应的二进制的位数N及主机数目对应的二进制数的位数M对该ip地址的原子网掩码,将其主机地址部分的前N位置1(其余全部置0)或后M位置0(其余全置1)即得出该ip地址划分子网后的子网掩码
7划分子网注意事项1在子网划分时不仅需要考虑目前需要,还应该了解将来需要多说子网和主机。子网掩码使用较多的主机位,可以得到更多子网,节约了ip地址资源,若将来需要更多的子网时,不用再重新分配ip地址,但每个子网的主机数量有限;反之,子网掩码使用较少的主机位,每个子网的主机数允许有更大的增长,但可用子网数有限2一般来说,一个网络中的节点数太多,网络会因为广播通信而饱和,所以网络中的主机数量的增长是有限的,也就是说,在条件允许的情况下,应将更多的主机位用于子网位
8为何要子网划分及其优点Internet组织机构定义了五种IP地址,用于主机的有A、B、C三类地址。其中A类网络有126个,每个A类网络可能有16,777,214台主机,它们处于同一广播域。而在同一广播域中有这么多结点是不可能的,网络会因为广播通信而饱和,结果造成16,777,214个地址大部分没有分配出去,形成了浪费。而另一方面,随着互连网应用的不断扩大,IP地址资源越来越少。为了实现更小的广播域并更好地利用主机地址中的每一位,可以把基于类的IP网络进一步分成更小的网络,每个子网由路由器界定并分配一个新的子网网络地址,子网地址是借用基于类的网络地址的主机部分创建的。划分子网后,通过使用掩码,把子网隐藏起来,使得从外部看网络没有变化,这就是子网掩码。很简单的说就是,一个公司不可能使用254个公网地址,A公司想用6个地址,B公司也想用6个地址,如果把这两个公司的地址都放在一个大网段里面,这两个公司的地址就能够直接互通子网划分优点:1)减少网络流量2)提高网络性能3)简化管理4)易于扩大地理范围
动态主机设置协议(DynamicHostConfigurationProtocol,DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
DHCP分为两个部份:一个是服务器端,而另一个是客户端。所有的IP网络设定数据都由DHCP服务器集中管理,并负责处理客户端的DHCP要求;而客户端则会使用从服务器分配下来的IP环境数据。DHCP的分配形式首先,必须至少有一台DHCP工作在网络上面,它会监听网络的DHCP请求,并与客户端磋商TCP/IP的设定环境。它提供三种IP定位方式:
人工分配,获得的IP也叫静态地址,网络管理员为某些少数特定的在网计算机或者网络设备绑定固定IP地址,且地址不会过期。同一个路由器一般可以通过设置来划分静态地址和动态地址的IP段,比如一般家用TP-LINK路由器,常见的是从192.168.1.100~192.168.1.254,这样如果你的电脑是自动获得IP的话,一般就是192.168.1.100,下一台电脑就会由DHCP自动分到为192.168.1.101。而192.168.1.2~192.168.1.99为手动配置IP段。
自动分配,其情形是:一旦DHCP客户端第一次成功的从DHCP服务器端租用到IP地址之后,就永远使用这个地址。
动态分配,当DHCP客户端第一次从DHCP服务器端租用到IP地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个IP地址,以给其它工作站使用。当然,客户端可以比其它主机更优先的更新(renew)租约,或是租用其它的IP地址。DHCP除了能动态的设定IP地址之外,还可以将一些IP保留下来给一些特殊用途的机器使用,它可以按照硬件地址来固定的分配IP地址,这样可以给您更大的设计空间。同时,DHCP还可以帮客户端指定router、netmask、DNSServer、WINSServer、等等项目。
DHCP运作
假设多部计算机在同一个网域当中,也就是说,DHCPServer与他的Clients都在同一个网段之内,可以透过软件广播的方式来达到相互沟通的状态。那么Client藉由DHCPServer得到IP的程序为:
③当Client端接受响应的讯息之后,首先会以ARP封包在网域内发出讯息,以确定来自DHCP主机发放的IP并没有被占用!如果该IP已经被占用了,那么Client对于这次的DHCP信息将不接受,而将再次向网域内发出DHCP的需求广播封包;若该IP没有被占用,则client可以接受DHCP主机所给的网络的参数,同时Client端也会对DHCP主机发出确认封包,告诉Server这次的需求已经确认!而Server也会将该信息记录下来;
④Client端结束该IP的使用权:当Client开始使用这个DHCP发放的IP之后,有几个情况下他可能会失去这个IP的使用权:
Client端离线:不论是关闭网络接口(ifdown)、重新开机(reboot)、关机(shutdown)等行为,皆算是离线状态,这个时候Server端就会将该IP回收,并放到Server自己的备用区中,等待未来的使用;
一旦DHCP客户端成功地从服务器那里取得DHCP租约之后,除非其租约已经失效并且IP地址也重新设定回0.0.0.0,否则就无需再发送DHCPdiscover信息了,DHCP服务器会尽量让客户端使用原来的IP地址,如果没问题的话,直接响应DHCPack来确认则可。如果该地址已经失效或已经被其它机器使用了,服务器则会响应一个DHCPNACK封包给客户端,要求其重新执行DHCPdiscover。IP的租约期限是非常考究的,以NT为例子:DHCP客户端除了在开机的时候发出DHCPrequest请求之外,在租约期限一半的时候也会发出DHCPrequest,如果此时得不到DHCP服务器的确认的话,客户端还可以继续使用该IP;当租约期过了87.5%时,如果客户端仍然无法与当初的DHCP服务器联系上,它将与其它DHCP服务器通信。如果网络上再没有任何DHCP服务器在运行时,该客户端必须停止使用该IP地址,并从发送一个Dhcpdiscover数据包,开始再一次重复整个过程。
跨网络的DHCP运作
从前面描述的过程中,我们不难发现:DHCPDISCOVER是以广播方式进行的,其情形只能在同一网络之内进行,因为router是不会将广播传送出去的。但如果DHCP服务器安设在其它的网络上面呢?由于DHCP客户端还没有IP环境设定,所以也不知道Router地址,因此这情形下DHCPDISCOVER是永远没办法抵达DHCP服务器那端的,当然也不会发生OFFER及其它动作了。要解决这个问题,我们可以用DHCPAgent(或DHCPProxy)主机来接管客户的DHCP请求,然后将此请求传递给真正的DHCP服务器,然后将服务器的回复传给客户。这里,Proxy主机必须自己具有路由能力,且能将双方的封包互传对方。若不使用Proxy,您也可以在每一个网络之中安装DHCP服务器,但这样的话,一来设备成本会增加,而且,管理上面也比较分散。
NAT(NetworkAddressTranslation网络地址转换)属接入广域网技术,是一种将私有地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。NAT是将IP数据包头中的IP地址转换为另一个IP地址的过程。在实际应用中,NAT主要用于实现私有网络访问公共网络的功能。这种通过使用少量的公有IP地址代表较多的私有IP地址的方式,将有助于减缓可用IP地址空间的枯竭。
说明:
私有IP地址是指内部网络或主机的IP地址,它是不会在因特网上被分配,RFC1918为私有网络预留出了三个IP地址块如下:
A类:10.0.0.0~10.255.255.255
B类:172.16.0.0~172.31.255.255
C类:192.168.0.0~192.168.255.255
NAT工作流程
①如右图这个client的gateway设定为NAT主机,所以当要连上Internet的时候,该封包就会被送到NAT主机,这个时候的封包Header的sourceIP为192.168.1.100(假设);
②而透过这个NAT主机,她会将client的对外联机封包的sourceIP(192.168.1.100)伪装成ppp0(假设为拨接情况)这个接口所具有的公共IP,因为是公共IP了,所以这个封包就可以连上Internet了!同时NAT主机会记住这个联机的封包是由哪一个(192.168.1.100)client端传送来的;
③由Internet传送回来的封包,由NAT主机来接收,这个时候NAT主机会去查询原本记录的路由信息,并将目标IP由ppp0上面的公共IP改回原来的192.168.1.100;
④最后则由NAT主机将该封包传送给原先发送封包的Client!
NAT的功能至少有这两项:
安全防护:NAT之内的PC联机到Internet上面时,他所显示的IP是NAT主机的公共IP,所以Client端的PC当然就具有一定程度的安全了!最起码人家在进行portscan的时候,就侦测不到你的Client端的PC!
NAT技术的作用
借助于NAT,私有地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。否则,在报文数据部分嵌入IP地址的应用程序就不能正常工作。
如何将大量的内部地址,映射成少量的外部地址?
对于第四层是TCP或UDP的数据包,NAT通过更改源端口号,来实现多对少的映射。例如:内部IP1~IP4,4个地址映射成外部一个地址IP5。
(IP1,Port1)映射成(IP5,Port1)
(IP2,Port1)映射成(IP5,Port2)
(IP3,Port2)映射成(IP5,Port3)
(IP4,Port2)映射成(IP5,Port4)
对于ICMP包,NAT通过更改ICMP的ID,来实现多对少的映射。
NAT有什么弊端
在一个具有NAT功能的路由器下的主机并没有建立真正的端对端连接,并且不能参与一些因特网协议。一些需要初始化从外部网络建立的TCP连接,和使用无状态协议(比如UDP)的服务将被中断。除非NAT路由器作一些具体的努力,否则送来的数据包将不能到达正确的目的地址。(一些协议有时可以在应用层网关的辅助下,在参与NAT的主机之间容纳一个NAT的实例,比如FTP。)NAT也会使安全协议变的复杂。
NAT技术实现方式
静态转换
是指将内部网络的私有IP地址转换为公有IP地址时,是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
静态地址转换的实现
第一步,设置外部端口。
interfaceserial0
ipaddress61.159.62.129255.255.255.248
ipnatoutside
第二步,设置内部端口。
interfaceethernet0
ipaddress192.168.0.1255.255.255.0
ipnatinside
第三步,在内部本地与外部合法地址之间建立静态地址转换。
ipnatinsidesourcestatic内部本地地址内部合法地址。
示例:
ipnatinsidesourcestatic192.168.0.261.159.62.130//将内部网络地址192.168.0.2转换为合法IP地址61.159.62.130
ipnatinsidesourcestatic192.168.0.361.159.62.131//将内部网络地址192.168.0.3转换为合法IP地址61.159.62.131
ipnatinsidesourcestatic192.168.0.461.159.62.132//将内部网络地址192.168.0.4转换为合法IP地址61.159.62.132
ipnatinsidesourcestatic192.168.0.561.159.62.133//将内部网络地址192.168.0.5转换为合法IP地址61.159.62.133
ipnatinsidesourcestatic192.168.0.661.159.62.134//将内部网络地址192.168.0.6转换为合法IP地址61.159.62.134
至此,静态地址转换配置完毕。
动态转换
动态地址转换的实现
假设内部网络使用的IP地址段为172.16.100.1~172.16.100.254,路由器局域网端口(即默认网关)的IP地址为172.16.100.1,子网掩码为255.255.255.0。网络分配的合法IP地址范围为61.159.62.128~61.159.62.191,路由器在广域网中的IP地址为61.159.62.129,子网掩码为255.255.255.192,可用于转换的IP地址范围为61.159.62.130~61.159.62.190。要求将内部网址172.16.100.1~172.16.100.254动态转换为合法IP地址61.159.62.130~61.159.62.190。
设置外部端口命令的语法如下:
interfaceserial0//进入串行端口serial0
ipaddress61.159.62.129255.255.255.192//将其IP地址指定为61.159.62.129,子网掩码为255.255.255.192
ipnatoutside//将串行口serial0设置为外网端口
注意,可以定义多个外部端口。
设置内部接口命令的语法如下:
interfaceethernet0//进入以太网端口Ethernet0
ipaddress172.16.100.1255.255.255.0//将其IP地址指定为172.16.100.1,子网掩码为255.255.255.0
ipnatinside//将Ethernet0设置为内网端口。
注意,可以定义多个内部端口。
第三步,定义合法IP地址池。
定义合法IP地址池命令的语法如下:
ipnatpool地址池名称起始IP地址终止IP地址子网掩码
其中,地址池名字可以任意设定。
ipnatpoolchinanet61.159.62.13061.159.62.190netmask255.255.255.192//指明地址缓冲池的名称为chinanet,IP地址范围为61.159.62.130~61.159.62.190,子网掩码为255.255.255.192。需要注意的是,即使掩码为255.255.255.0,也会由起始IP地址和终止IP地址对IP地址池进行限制。
或ipnatpooltest61.159.62.13061.159.62.190prefix-length26
注意,如果有多个合法IP地址范围,可以分别添加。例如,如果还有一段合法IP地址范围为"211.82.216.1~211.82.216.254",那么,可以再通过下述命令将其添加至缓冲池中。
ipnatpoolcernet211.82.216.1211.82.216.254netmask255.255.255.0
或
ipnatpooltest211.82.216.1211.82.216.254prefix-length24
第四步,定义内部网络中允许访问Internet的访问列表。
定义内部访问列表命令的语法如下:
access-list标号permit源地址通配符(其中,标号为1~99之间的整数)
access-list1permit172.16.100.00.0.0.255//允许访问Internet的网段为172.16.100.0~172.16.100.255,反掩码为0.0.0.255。需要注意的是,在这里采用的是反掩码,而非子网掩码。反掩码与子网掩码的关系为:反掩码+子网掩码=255.255.255.255。例如,子网掩码为255.255.0.0,则反掩码为0.0.255.255;子网掩码为255.0.0.0,则反掩码为0.255.255.255;子网掩码为255.252.0.0,则反掩码为0.3.255.255;子网掩码为255.255.255.192,则反掩码为0.0.0.63。
另外,如果想将多个IP地址段转换为合法IP地址,可以添加多个访问列表。例如,当欲将172.16.98.0~172.16.98.255和172.16.99.0~172.16.99.255转换为合法IP地址时,应当添加下述命令:
access-list2permit172.16.98.00.0.0.255
access-list3permit172.16.99.00.0.0.255
第五步,实现网络地址转换。
在全局设置模式下,将第四步由access-list指定的内部本地地址列表与第三步指定的合法IP地址池进行地址转换。命令语法如下:
ipnatinsidesourcelist访问列表标号pool内部合法地址池名字
ipnatinsidesourcelist1poolchinanet
如果有多个内部访问列表,可以一一添加,以实现网络地址转换,如
ipnatinsidesourcelist2poolchinanet
ipnatinsidesourcelist3poolchinanet
如果有多个地址池,也可以一一添加,以增加合法地址池范围,如
ipnatinsidesourcelist1poolcernet
ipnatinsidesourcelist2poolcernet
ipnatinsidesourcelist3poolcernet
至此,动态地址转换设置完毕。
端口多路复用(PortaddressTranslation,PAT)
是指改变外出数据包的源端口并进行端口转换,采用端口多路复用方式,内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源,同时又可隐藏网络内部的所有主机有效避免来自internet的攻击。因此目前网络中应用最多的就是端口多路复用方式。在配置网络地址转换的过程之前,首先必须搞清楚内部接口和外部接口,以及在哪个外部接口上启用NAT。通常情况下连接到用户内部网络的接口是NAT内部接口,而连接到外部网络(如Internet)的接口是NAT外部接口。
端口复用动态地址转换(PAT)
内部网络使用的IP地址段为10.100.100.1~10.100.100.254,路由器局域网端口(即默认网关)的IP地址为10.100.100.1,子网掩码为255.255.255.0。网络分配的合法IP地址范围为202.99.160.0~202.99.160.3,路由器广域网中的IP地址为202.99.160.1,子网掩码为255.255.255.252,可用于转换的IP地址为202.99.160.2。要求将内部网址10.100.100.1~10.100.100.254转换为合法IP地址202.99.160.2。
ipaddress202.99.160.1255.255.255.252
ipaddress10.100.100.1255.255.255.0
ipnatpoolonlyone202.99.160.2202.99.160.2netmask255.255.255.252
//指明地址缓冲池的名称为onlyone,IP地址范围为202.99.160.2,子网掩码为255.255.255.252。由于本例只有一个IP地址可用,所以,起始IP地址与终止IP地址均为202.99.160.2。如果有多个IP地址,则应当分别键入起止的IP地址。
第四步,定义内部访问列。
access-list1permit10.100.100.00.0.0.255
允许访问Internetr的网段为10.100.100.0~10.100.100.255,子网掩码为255.255.255.0。需要注意的是,在这里子网掩码的顺序跟平常所写的顺序相反,即0.0.0.255。
第五步,设置复用动态地址转换。
在全局设置模式下,设置在内部的本地地址与内部合法IP地址间建立复用动态地址转换。命令语法如下:
ipnatinsidesourcelist访问列表号pool内部合法地址池名字overload
ipnatinsidesourcelist1poolonlyoneoverload//以端口复用方式,将访问列表1中的私有IP地址转换为onlyoneIP地址池中定义的合法IP地址。
注意:overload是复用动态地址转换的关键词。
至此,端口复用动态地址转换完成。
还可以这样写:
ipnatinsidesourcelist1interfaceserial0overload
WiFi(WirelessFidelity无线保真技术)与蓝牙技术一样,同属于在办公室和家庭中使用的短距离无线技术。Wi-Fi是一个无线网路通信技术的品牌,由Wi-Fi联盟(Wi-FiAlliance)所持有。实质上是一种商业认证,同时也是一种无线联网的技术,以前通过网线连接电脑,而现在则是通过无线电波来连网;该技术使用2.4GHz或5GHz附近频段。2.4GHz频段是开放频段,不需要额外批准,任何人任何设备都可以使用,因此其他的无线通信如果进入该频段,会对Wi-Fi的稳定性造成一定影响。
2.4GWIFI穿墙能力强,5.0G的穿墙能力不强,但是2.4G频点少只有3个,5.0的多。目前的广泛应用的WiFi技术标准主要是802.11a、802.11b、802.11g。
802.11a定义了一个在5GHzISM频段上的数据传输速率可达54Mbit/s的物理层,
802.11b定义了一个在2.4GHz的ISM频段上但数据传输速率高达11Mbit/s的物理层,直线传播传输范围为室外最大300米,室内有障碍的情况下最大100米,是现在使用的最多的传输协议。
802.11g可达54Mbps;室外最大300米,室内有障碍的情况下最大100米。
802.11n也已有支持可以达到150M—600M。在信号较弱或有干扰的情况下,带宽可自动调整。传输距离比802.11b远。
802.11b/g同802.11a不兼容。但802.11n相前兼容所有这些协议。
3G
WLAN
蓝牙
ZigBee
频带费用
需要许可证,较贵
无需许可证,但功率10W以上需报备
无需许可
使用范围
国家级
50-150米
5-10米
100米到2500米不等
带宽
最高2Mbps
11-54Mbps
1-2Mbps
业务能力
话音/数据
主要是数据
话音/数据机器到机器
数据
频率技术
码分
FH跳频/DSSS直序扩频
FH跳频
Wi-Fi联盟所公布的认证种类
*WPA/WPA2:WPA/WPA2是基于IEEE802.11a、802.11b、802.11g的单模、双模或双频的产品所建立的测试程序。内容包含通讯协定的验证、无线网络安全性机制的验证,以及网络传输表现与相容性测试。
*WMM(Wi-FiMultiMedia):当影音多媒体透过无线网络的传递时,要如何验证其带宽保证的机制是否正常运作在不同的无线网络装置及不同的安全性设定上是WMM测试的目的。
*WPS(Wi-FiProtectedSetup):这是一个2007年年初才发布的认证,目的是让消费者可以透过更简单的方式来设定无线网络装置,并且保证有一定的安全性。目前WPS允许透过PinInputConfig(PIN)、PushButtonConfig(PBC)、USBFlashDriveConfig(UFD)以及NearFieldCommunication、ContactlessTokenConfig(NFC)的方式来设定无线网络装置。
*ASD(ApplicationSpecificDevice):这是针对除了无线网络存取点(AccessPoint)及站台(Station)之外其他有特殊应用的无线网络装置,例如DVD播放器、投影机、打印机等等。
*CWG(ConvergedWirelessGroup):主要是针对Wi-Fimobileconvergeddevices的RF部分测量的测试程序。
1.IE802.11简介
标准号
IEEE802.11b
IEEE802.11a
IEEE802.11g
IEEE802.11n
1999年9月
2003年6月
2009年9月
工作频率范围
2.4-2.4835GHz
5.150-5.350GHz
5.475-5.725GHz
5.725-5.850GHz
5.150-5.850GHz
非重叠信道数
3
24
15
物理速率(Mbps)
11
54
600
实际吞吐量(Mbps)
6
100以上
频宽
20MHz
20MHz/40MHz
调制方式
CCK/DSSS
OFDM
CCK/DSSS/OFDM
MIMO-OFDM/DSSS/CCK
兼容性
802.11b
802.11a
802.11b/g
802.11a/b/g/n
2.频谱划分
下图是常用的2.4GHz(=2400MHz)频带的信道划分,一共有14个信道,但第14信道一般不用。表中只列出信道的中心频率。每个信道的有效宽度是20MHz,另外还有2MHz的强制隔离频带(类似于公路上的隔离带)。即,对于中心频率为2412MHz的1信道,其频率范围为2401~2423MHz。20MHz的信道宽度也只是“有效带宽”,因为实际上一个信道在其中心频率两侧有很宽的延展,但是超过10MHz以外的部分强度很弱,基本无用。从下图很容易看到其中1、6、11这三个信道(红色标记)之间是完全没有交叠的,也就是人们常说的三个不互相重叠的信道。每个信道20MHz带宽。图中也很容易看清楚其他各信道之间频谱重叠的情况。另外,如果设备支持,除1、6、11三个一组互不干扰的信道外,还有2、7、12;3、8、13;4、9、14三组互不干扰的信道。
1)IEEE802.11b/g标准工作在2.4G频段,频率范围为2.400—2.4835GHz,共83.5M带宽
2)划分为14个子信道
3)每个子信道宽度为22MHz
4)相邻信道的中心频点间隔5MHz
5)相邻的多个信道存在频率重叠(如1信道与2、3、4、5信道有频率重叠)
6)整个频段内只有3个(1、6、11)互不干扰信道
现在大家的无线设备都多了起来,楼上楼下邻里之间,一不小心就搜出来十几个无线路由器。要完全错开使用信道还真是不容易。不过1通道貌似是用得最多的。现在新式的无线路由器都可以自动跳转信道了,但设备多了,还是会遭遇干扰。所以很多设备开始使用5GHz附近(5.15~5.85GHz)的频带。该频段在划分时,每个信道与相邻信道都不发生重叠,因而干扰较小。但是也有缺点:5GHz频率较高,在空间传输时衰减较为严重,因而如果距离稍远,性能会严重降低。
3.接收灵敏度
误码率要求
速率
最小信号强度
PER(误码率)不超过8%
6Mbps
-82dBm
9Mbps
-81dBm
12Mbps
-79dBm
18Mbps
-77dBm
24Mbps
-74dBm
36Mbps
-70dBm
48Mbps
-66dBm
54Mbps
-65dBm
4.2.4GHz中国信道划分
802.11b和802.11g的工作频段在2.4GHz(2.4GHz-2.4835GHz),其可用带宽为83.5MHz,中国划分为13个信道,每个信道带宽为22MHz
北美/FCC2.412-2.461GHz(11信道)
欧洲/ETSI2.412-2.472GHz(13信道)
日本/ARIB2.412-2.484GHz(14信道)
2.4GHz频段WLAN信道配置表
信道
中心频率(MHz)
信道低端/高端频率
1
2412
2401/2423
2
2417
2406/2428
2422
2411/2433
4
2427
2416/2438
5
2432
2421/2443
2437
2426/2448
7
2442
2431/2453
8
2447
9
2452
2441/2463
10
2457
2446/2468
2462
2451/2473
12
2467
2456/2478
13
2472
2461/2483
5.SSID和BSSID
1)基本服务集(BSS)
基本服务集是802.11LAN的基本组成模块。能互相进行无线通信的STA可以组成一个BSS(BasicServiceSet)。如果一个站移出BSS的覆盖范围,它将不能再与BSS的其它成员通信。
2)扩展服务集(ESS)
多个BSS可以构成一个扩展网络,称为扩展服务集(ESS)网络,一个ESS网络内部的STA可以互相通信,是采用相同的SSID的多个BSS形成的更大规模的虚拟BSS。连接BSS的组件称为分布式系统(DistributionSystem,DS)。
3)SSID
服务集的标识,在同一SS内的所有STA和AP必须具有相同的SSID,否则无法进行通信。SSID是一个ESS的网络标识(如:TP_Link_1201),BSSID是一个BSS的标识,BSSID实际上就是AP的MAC地址,用来标识AP管理的BSS,在同一个AP内BSSID和SSID一一映射。在一个ESS内SSID是相同的,但对于ESS内的每个AP与之对应的BSSID是不相同的。如果一个AP可以同时支持多个SSID的话,则AP会分配不同的BSSID来对应这些SSID。
BSSID(MAC)<---->SSID
6.AP种类
(1)FatAP(胖AP)将WLAN的实体层、加密、用户认证、网路管理等功能集於一身;而FitAP(瘦AP)是一个只有射频和通信功能的AP,功能单一,不能独立工作。
(2)FatAP无线网路解决方案可由FatAP直接在有线网的基础上构成,所有AP都单独进行配置,且难於集中管理;而FitAP无线网路解决方案则是由无线网路控制器和FitAP在有线网的基础上构成,且FitAP上“零配置”,所有配置都集中到无线网路控制器上。易於集中管理。
7.无线接入过程三个阶段
STA(工作站)启动初始化、开始正式使用AP传送数据帧前,要经过三个阶段才能够接入(802.11MAC层负责客户端与AP之间的通讯,功能包括扫描、接入、认证、加密、漫游和同步等功能):
1)扫描阶段(SCAN)
2)认证阶段(Authentication)
3)关联(Association)
7.1Scanning
802.11MAC使用Scanning来搜索AP,STA搜索并连接一个AP,当STA漫游时寻找连接一个新的AP,STA会在在每个可用的信道上进行搜索。
2)ActiveScanning(特点:能迅速找到)STA依次在13个信道发出ProbeRequest帧,寻找与STA所属有相同SSID的AP,若找不到相同SSID的AP,则一直扫描下去..
7.2Authentication
当STA找到与其有相同SSID的AP,在SSID匹配的AP中,根据收到的AP信号强度,选择一个信号最强的AP,然后进入认证阶段。只有身份认证通过的站点才能进行无线接入访问。AP提供如下认证方法:
1)开放系统身份认证(open-systemauthentication)
2)共享密钥认证(shared-keyauthentication)
3)WPAPSK认证(Pre-sharedkey)
4)802.1XEAP认证
7.3Association
当AP向STA返回认证响应信息,身份认证获得通过后,进入关联阶段。
1)STA向AP发送关联请求
2)AP向STA返回关联响应
至此,接入过程才完成,STA初始化完毕,可以开始向AP传送数据帧。
7.4认证和关联过程
7.5漫游过程
8、认证加密方式
1)OPEN+WEP
OPEN+WEP采用空认证和WEP加密,无线终端无需经过验证,即可与相应的AP进行关联。该模式只对传输数据进行WEP加密,由于目前使用的无线网卡在硬件上均支持WEP加密,因此该模式兼容性较强。
2)SHARED+WEP
SHARED+WEP采用共享密钥认证和WEP加密,与OPEN+WEP方式相比,只是用户关联过程不同,加密过程完全一致。在SHARED+WEP方式中,无线终端与相应的AP进行关联时,需提供双方事先约定好的WEP口令,只有在双方的WEP相匹配的情况下,才能关联成功。
3)Open与share
开放系统认证(OpenSystemAnthentication)和共享密钥认证(SharedKeyAuthentication),其中开放系统认证是802.11的缺省认证方法。认证类型用MAC帧的认证算法码(authenticationalgorithmnumber)字段标识。认证算法码字段值为"0"代表开放系统认证,字段值为"1"代表共享密钥认证。MAC帧的认证处理序列号(authenticationtransactionsequencenumber)字段用于指示认证过程的当前状态。开放式系统验证其实可以称为“无验证”,因为实际上没有进行验证——工作站说“请求验证”,而AP也不管是否密钥是否正确,先“答应了再说”,但最终AP会验证密钥是否正确,决定是否允许接入——这种验证方式的AP,往往你随便输入一个密码,都可以连接,但如果密码不正确,会显示为“受限制”。共享密钥验证稍微强大一些,工作站请求验证,而访问点(AP)用WEP加密的质询进行响应。如果工作站的提供的密钥是错误的,则立即拒绝请求。如果工作站有正确的WEP密码,就可以解密该质询,并允许其接入,因此,连接共享密钥系统,如果密钥不正确,通常会立即显示“该网络不存在等提示”。这就是开放系统和共享密钥二种验证方式的区别。
4)IEEE802.1X+WEP
5)IEEE802.1X+WEP
6)WPA-PSK/WPA2-PSK(TKIPorCCMP)
WPA-PSK/WPA2-PSK(TKIPorCCMP)均采用预共享密钥认证WPA(Wi-FiProtectedAccess)基于IEEE802.11i草案三制定;WPA2则是基于IEEE802.11i的正式规范制定,相比WPA具有更高的安全性。根据WiFi联盟的规定,WPA-PSK必须支持基于TKIP(TemporalKeyIntegrityProtocol)的密钥管理和数据加密,而对于WPA是否支持基于CCMP的密钥管理和数据加密WiFi联盟即没有进行规定,也不提供兼容性测试。WiFi联盟要求WPA2-PSK必须能够同时支持TKIP和CCMP,而且这两种方式都必须通过兼容性测试
7)WPA/WPA2(TKIPorCCMP)
WPS(Wi-FiProtectedSetup)
类似称呼:QSS/SES/AOSS/EZ-SETUP
为了解决无线安全设置比较繁琐、专业性强的问题
过程:站点通过WPS协商过程获得AP当前的无线安全设置(SSID,安全模式,密码),正常接入到BSS
2种常见的启动WPS协商的方式:PIN和PBC(PIN:在AP上输入站点的PIN码,PBC:2分钟内分别按下AP和站点上的按钮)
可以让站点快速接入
ZigBee的特点是低功耗、高可靠性、强抗干扰性,布网容易。通过无线中继器可以非常方便地将网络覆盖范围扩展至数十倍,因此从小空间到大空间、从简单空间环境到复杂空间环境的场合都可以使用。Zigbee是定位于低传输速率的应用,因此Zigbee显然不适合于高速上网、大文件下载等场合。
WIFI在开放性区域距离可达305米,在封闭性区域,通讯距离为76米到122米,ZigBee通讯距离从100米到2500米不等,2.4GHZ频段的Zigbee在室外可以达到1200米距离,在室内通常能达到30-50米的作用距离。
ZigBee具有大规模的组网能力,ZigBee中每个协调点最多可连接255个节点,一个ZigBee网络最多可容纳65535个节点,而每个蓝牙网络只有8个节点。ZigBee网络的拓扑结构主要有三种,星型网、网状(mesh)网和混合网。
433MHz技术使用433MHz无线频段,因此相比于Zigbee,433MHz的显著优势是无线信号的穿透性强、能够传播得更远。但其缺点也是很明显的,就是其数据传输速率只有9600bps,远远小于Zigbee的数据速率,因此433Mhz技术一般只适用于数据传输量较少的应用场合。从通讯可靠性的角度来讲,433Mhz技术,只支持星型网络的拓扑结构,通过多基站的方式实现网络覆盖空间的扩展,因此其无线通讯的可靠性和稳定性也逊于Zigbee技术。另外,不同于Zigbee技术中所采用的加密功能,433Mhz网络中一般采用数据透明传输协议,因此其网络安全可靠性也是较差的。
DLNA成立于2003年6月24日,其前身是DHWG(DigitalHomeWorkingGroup数字家庭工作组),由Sony、Intel、Microsoft等发起成立、旨在解决个人PC,消费电器,移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务的无限制的共享和增长成为可能。现在绝大多数的电子制造商都加入了该组织。
DLNA并不是创造技术,而是形成一种解决的方案,一种大家可以遵守的规范。所以DLNA选择的各种技术和协议都是目前所应用很广泛的技术和协议。在讲DLNA的架构之前先讲一下DLNA规定的设备分类,这些设备就是DLNA标准执行的物理和逻辑对象。
1.HomeNetWorkDevice(HND)。这类设备具有比较大的尺寸及较全面的功能,主要与移动设备区别开来,下属5类设备:
(1)DigitalMediaServer(DMS)。数字媒体服务器,提供媒体获取、记录、存储和输出功能。同时,内容保护功能是对DMS的强制要求。DMS总是包含DMP的功能,并且肯能包含其他智能功能,包括设备/用户服务的管理;丰富的用户界面;媒体管理/收集和分发功能。DMS的例子有PC、数字机顶盒(附带联网,存储功能)和摄像机等等。
(2)DMP。数字媒体播放器。能从DMS/M-DMS上查找并获取媒体内容并播放和渲染显示。比如智能电视、家庭影院等。
(3)DMC。数字媒体控制器,查找DMS的内容并建立DMS与DMR之间的连接并控制媒体的播放。如遥控器。
(4)DMR。数字媒体渲染设备。通过其他设备配置后,可以播放从DMS上的内容。与DMP的区别在于DMR只有接受媒体和播放功能,而没查找有浏览媒体的功能。比如显示器、音箱等。
(5)DMPr。数字媒体打印机,提供打印服务。网络打印机,一体化打印机就属于DMPr。
2.MobileHandheldDevices(MHD)手持设备。相比家庭设备,手持设备的功能相对简化一些,支持的媒体格式也会不同。
(2)M-DMP。与DMP类似。比如智能移动电视。
(3)M-DMD。移动多媒体下载设备。如随身音乐播放器,车载音乐播放器和智能电子相框等
(4)M-DMU。移动多媒体下载设备。如摄像设备和手机等。
(5)M-DMC。与DMC类似。P如DA,智能遥控器。手持设备没有定义M-DMR,因为手持设备会讲究便利性,会附加查找控制功能,要不然就只是普通的移动电视或收音机了。
3.NetworkedInfrastructureDevices(NID)联网支持设备。
(1)MobileNetworkConnectivityFunction(M-NCF)。移动网络连接功能设备。提供各种设备接入移动网络的物理介质。DLNA的希望是全部实现无线化。
(2)InteroperabilityUnit(MIU)媒体交互设备。提供媒体格式的转换以支持各种设备需要。
设想一下这样一个scenario:你下了班回到家,掏出手机拨到家庭模式,然后就在手机上遥控打开了等离子电视和PC,然后把订阅的新闻通过PC下载完成后打到等离子电视上播放。这时手机就是一个DMC/M-DMC,等离子电视是一个DMR,PC就是DMS。然后你手机上收到一张朋友从巴西传来的照片,你看完之后把它同步到PC上存储起来,这样手机现在的身份是M-DMU,然后你把这张图片放到电子相框里面。这个电子相框就是一个M-DMD,相框也有play的能力,所以他又是一个M-DMP。所以说这些设备的功能角色都是不定的,界限也不是那么严格。在DLNAGuidelinesv1.0的时候还没有智能手机,后来在v1.5加入了。这个设备分类只是定义了功能,而且功能也会变的。以后还会出其它新设备,像pad,tab,touch各种各样,到时候标准也会变的。
DLNA的架构
DLNA架构是个互联系统,因此在逻辑上它也类似OSI七层网络模型。DLNA架构分为如下图7个层次:
(1)NetWorkingConnectivity网络互联方式:包括物理连接的标准,有有线的,比如符合IEEE802.3标准的Ethernet,;有无线的,比如符合IEEE802.11a/g标准的WiFi,能做到54Mbps,蓝牙(802.15)等,技术都很成熟。现在OFDM和MIMO(802.11n)已经能做到300Mbps了,早就超过比较普及的100Mbps的Ethernet了,只不过产品还没有普及,以后肯定会用到。
(2)NetWorkingStack网络协议栈:DLNA的互联传输基本上是在IPV4协议簇的基础上的。用TCP或者UDP来传都可以。这一层相当于OSI网络层。
(3)DeviceDiscovery&Control设备发现和控制。这个层次是比较essential的,是DLNA的基础协议框架。DLNA用UPnP协议来实现设备的发现和控制。
UPnP,英文是UniversalPlugandplay,翻译过来就是通用即插即用。简单的来说,UPnP最大的愿景就是希望任何设备只要一接上网络,所有在网络上的设备马上就能知道有新设备加入,这些设备彼此之间能互相沟通,更能直接使用或控制它,一切都不需要设定。
DNLA主要是在推UPnP。UPnP以Internet标准和技术(例如TCP/IP、HTTP和XML)为基础,使这样的设备彼此可自动连接和协同工作,从而使网络(尤其是家庭网络)对更多的人成为可能。UPnP的另外一个作用是给家庭网内的devices做自动的网络地址转换NAT和端口映射(PortMapping),因为家庭网络里面没有那么多IP,所有的devices可能都要通过同一个ip出去。转换映射之后,家庭网络内外的devices就可以通过internet自由地相互连接,而不受内网地址不可访问的阻碍。
UPnP在控制指针和被控制设备之间提供通讯功能。而网络介质、TCP/IP协议、HTTP仅提供基本的连接和IP地址分配。整个工作过程需要处理六个方面的内容,即设备寻址、发现设备、对设备的描述、设备控制、设备事件、设备表达。
2UPnP的结构规范
2.1UPnP的基本组件
服务、设备和控制点是UPnP网络的基本组件。其组件图如图1所示:
●服务(Service)
●设备(Device)
UPnP网络中定义的设备具有很广泛的含义,各种各样的家电、电脑外设、智能设备、无线设备、个人电脑等等都可以成为其中一员。一个UPnP设备可以是多个服务的载体和多个子设备的嵌套集。例如一台印表机有提供列印这样的服务;一台电视有提供收讯的服务,这些都属于设备。
●控制点(ControlPoint)
在UPnP网络中,控制点指的是可以发现并控制其它设备的控制设备。在UPnP网络中,设备可以和控制点合并。也就是说,同一个设备,可以同时具有设备的功能和控制点的功能,即可以作为设备提供服务,也可以作为控制点发现和控制其它设备。
2.2UPnP部分术语
●UUID
●UDN
●URI
●URL
URL是URI命名机制的一个子集,URL是UniformResourceLocation的缩写,译为“统一资源定位符”。通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种www客户程序和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
●URN
2.3UPnP设备协议栈
UPnP定义了设备之间、设备和控制点、控制点之间通讯的协议。完整的UPnP由设备寻址、设备发现、设备描述、设备控制、事件通知和基于Html的描述界面几部分构成。UPnP设备协议栈如下图所示:
UPnP协议结构最底层的TCP/IP协议是UPnP协议结构的基础。IP层用于数据的发送与接收。对于需要可靠传送的信息,使用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来发送消息,并且可以用于多播通信。
2.3.1SSDP协议
简单服务发现协议(SimpleServiceDiscoveryProtocol:SSDP),内建在HTTPU/HTTPMU里,定义如何让网络上有的服务被发现的协议。包括控制点如何发现网络上有哪些服务,并取得这些服务的资讯,还有装置本身宣告他提供哪些服务。该协议运用在UPnP工作流程的设备发现部分。
2.3.2SOAP协议
简易物件存取协议(SimpleObjectAccessProtocol:SOAP)定义如何使用XML与HTTP来执行远端程序呼叫(RemoteProcedureCall)。包括控制点如何发送命令消息给设备,及设备接收到命令消息后如何发送响应消息给控制点。该协议运用在UPnP工作流程的设备控制部分。
2.3.3GENA协议
一般事件通知架构(GenericEventNotificationArchitecture:GENA)定义在控制点想要监听设备的某个服务状态变量的状况时,控制点如何传送订阅讯息并如何接收通知讯息用的。该协议运用在UPnP工作流程的事件订阅部分。
2.4基于XML的UPnP描述
2.4.1XML简介
与HTML类似,XML描述的内容封装在开始标签<标签名>和结束标签标签名>之间,一对标签及其封装的内容,如
XML命名空间采用“两段式命名法”定义所谓的“合法名称”,例如“学生:姓名”。其中第一段是指代特定命名空间的“命名空间前缀”,第二段是元素或属性的名字,两段之间用西文冒号“:”分隔。需要注意的是,“学生:姓名”和“班主任:姓名”虽然名称都是“姓名”,但却是两个不同的元素名,因为它们分别由“学生”和“班主任”命名空间定义。
xmlns:【命名空间前缀】=【命名空间名】
其中,xmlns就是XML命名空间的缩写。例如:
分别定义了命名空间前缀“学生”和“班主任”。
其后,XML就可以用命名空间和名的组合,即合法名称来无岐义地表示不同应用中的元素名和/或属性名,给出元素的描述和属性值的描述。例如:
<学生:姓名>李明学生:姓名>
<学生:班级学生:数字类型=”中文”>三年级二班学生:班级>
<学生:住址学生:数字类型=”阿拉伯”>135楼210室学生:住址>
学生:学生>
2.4.2TV设备的设备描述编写
在UPnP协议中,要实现控制点和设备之间的互相通信,设备的描述文件起着很重要的作用。对于设备的描述文件,是以XML文件形式存在的。在论文的第五节,我们会讨论TV设备的代码实现,在这我们就对TV设备的设备描述文件编写进行介绍。
一般来说,设备描述都是基于UPnP论坛上己定义的模板,这些标准化的模板提供一系列基本的服务和预定义的设备类型,厂商可以在其中作出自己的扩充。对于后面开发的TV设备,因为只是为了阐述UPnP协议的实现,所以自行开发其设备模板及其XML文档,以使其最简化。
根据UPnP规范,包括两个主要部分。第一部分包括根设备类型、特定厂商、制造商信息,如模块名称和编号、序列号、制造商名称、特定厂商网站URL等。第二部分包括设备所支持服务的信息。对于第一部分,为了使设备描述文件更简单,为简单计,省略了厂商名、厂商网址等可选元素,这些省略并不会对系统运行产生任何影响。下面就是TV设备的设备描述文件:
基本信息编写
●设备类型
设备类型元素的格式如下:
对于基于标准设备模板的设备,描述文件中这一属性为:
<...urn:schemas-upnp-org...>
我们把设备类型叫做tvdevice,版本号定为1,于是我们得到了一个完整的设备类型元素:
●friendlyname
我们为设备取了一个相对简单的用户友好的别名:UPnPTelevisionEmulator,于是得到了
接下来需设计的是唯一设备名字(UDN),这是该实例的唯一标识符。为了保持唯一性,采用设备的名字和设备网卡的MAC地址组合而成。假设MAC地址为1234567890001,就可以把UDN元素写为:
设备服务编写
设备所含服务是设备描述的主体部分,它们体现为设备的功能。在设计时,可根据设备的功能映射确定可提供给控制点的服务。在这里,TV设备只定义一个control服务。
control服务负责处理TV的开关(power),调整音量(volume)及设置频道(channel),其在设备描述文档中的第一个元素是serviceType,其命名原则与deviceType类似,遵从一定的约定,定义为:
类似地,
另一需要定义的是服务描述文档的地址
3UPnP实现的工作流程
稍微了解有哪些通讯协议后,我们来看UPnP是如何运作的。图4是UPnP的运作流程,我们先介绍各部分在做什么,再做详细介绍:
0.控制点跟设备都先取得IP地址才能做之后的沟通。
1.控制点寻找整个网络上的UPnP设备,而设备同时也要宣告他本身的存在。
2.控制点取得设备的描述,这包括设备提供什么样的服务。
3.控制点发出动作信息(对设备操作的命令信息)给设备。
4.控制点监听设备的状态,当状态改变时做出相应的处理动作。
5.控制点利用HTML界面来控制设备和监看设备状态。
3.1寻址(Addressing)
一个设备可以使用UPnP之外的更高层的协议,这些协议将为设备使用友好的名称。在这种情况下,将这些友好的主机名解析为IP地址就很必要了,DNS通常是用来实现此功能的。使用此功能的设备可能要包含一个DNS客户端,而且支持动态的DNS注册,通过注册将它自己的名字加入到地址分布图中。
3.2发现(Discovery)
一旦设备连接到网上并且分配了地址,就要进行发现的操作了。设备发现是UPnP网络实现的第一步。设备发现是由简单发现协议SSDP(SimpleServiceDiscoveryProtocol)来定义的。在设备发现操作之后,控制点可以发现感兴趣的设备,并使得控制点获得设备能力的描述,同时控制点也可以向设备发送命令,侦听设备状态的改变,并将设备展示给用户,即是描述、控制、监听、展示的基础。
当一个设备加入到网络中,设备发现过程允许设备向网络上的控制点告知它提供的服务。当一个控制点加入到网络中时,设备发现过程允许控制点寻找网络上感兴趣的设备。在这两种情况下,基本的交换信息就是发现消息。发现消息包括设备的一些特定信息或者某项服务的信息,例如它的类型、标识符、和指向XML设备描述文档的指针。图5画出了发现流程的框架图。
3.3描述(Description)
UPnP网络结构的第二步是设备描述。在控制点发现了一个设备之后,控制点仍然对设备知之甚少,控制点可能仅仅知道设备或服务的UPnP类型,设备的UUID和设备描述的URL地址。为了让控制点更多的了解设备和它的功能或者与设备交互,控制点必须从发现消息中得到设备描述的URL,通过URL取回设备描述。设备描述的一般过程如图6所示:
对于一个设备的UPnP描述一般分成两个部分:设备描述和设备的服务描述。
●设备描述
UPnP对某一设备的描述以XML形式表示出来,设备描述包括制造商信息,包括模块名称和编号,序列号,制造商名称,制造商网站的URL等等。设备描述也包括所有嵌入设备描述和URL地址集。对于一个物理设备可以包含多个逻辑设备,多个逻辑设备既可以是一个根设备其中嵌入多个设备,也可以是多个根设备的方式实现。设备描述是由设备制造商提供的,采用XML表述,并且遵循UPnP设备模版。此模版是由UPnP工作委员会生成的。
●服务描述
包括一系列命令或者动作,服务响应,动作的参数。服务的描述也包含一系列变量,这些变量描述了服务运行时刻的状态,这包括数据类型、取值范围和事件特性的描述。服务描述也是由设备制造商提供的,采用XML方式表述,遵循UPnP服务模版。
3.4控制(Control)
在接收设备和服务描述之后,控制点可以向这些服务发出动作,同时控制点也可以轮询服务的状态变量值。发出动作实质上是一种远程过程调用;控制点将动作发送到设备服务,在动作完成(或失败)后,服务返回相应的结果或错误。状态变量值轮询是这种场景下的特例,动作及其结果都是预定义的。其基本过程如下图所示:
控制点可能会轮询服务的状态变量值以获得状态变量的当前值。与发出一个动作的过程相似,控制点向服务的控制URL发送一个适当的查询消息。而服务则返回相应的变量值;每个服务必须保持状态表的一致性,以便控制点能够轮询并接收到有意义的值。
3.5事件(Eventing)
发布者通过发送事件消息提醒订阅者状态变量改变。事件消息包含多个状态变量名称和这些变量的当前值,以XML表示。在订阅者第一次订阅时,需要发送一个专门的初始化事件消息。该事件消息包含所有事件变量的名称和值,并且允许订阅者初始化其服务状态模型。为了支持多个控制点,在动作生效后所有订阅者均会收到通知。由此,将向所有订阅者发送全部事件消息,订阅者会收到所有事件触发变量的事件消息(不只是一部分)。不管状态变量因何种原因发生改变(无论为了响应所要求的动作,还是由于服务模拟的状态发生变化)均会发送事件消息。事件消息使用HTTP协议传送,事件详细定义在通用事件通知结构(GeneralEventNotificationArchitecture)协议中。
3.6展示(Presentation)
在控制点发现设备和取得设备描述之后,控制点即准备开始提供展示。如果设备拥有进行展示的URL,那么控制点就可以通过此URL取得一个页面,在浏览器中加载该页面,并根据页面功能,支持用户控制设备和/或浏览设备状态。每一项完成的程度取决于展示页面和设备的具体功能。
设备表征包含在设备描述的presentationURL字段。设备表征可以完全由设备制造商提供,它采用HTML页的形式,使用HTTP进行发布。图9画出了展示流程的示意图。
4UPnP协议消息分析
4.1发现设备的消息分析
UPnP协议的发现过程是通过SSDP协议来实现的,SSDP消息至少包含以下四部分:
·服务类型URI
用来标识一种服务,如宣告消息中的NT字段,搜索消息中的ST字段。
·唯一的服务名字(USN)URI
USN用来区分同一服务类型的不同的具体服务。
·有效期信息
CACHE.CONTROL字段。
·位置信息
服务所在位置,如宣告消息中的LOCATION字段。
4.1.1SSDP发现请求
SSDP发现请求用来寻找希望得到的设备及其服务。它使用SEARCH消息,用URIssdp:discover标识。SEARCH消息必须包括一个ST(搜索类型)头,还可能含有消息体。ST头用来指明希望发现的设备及服务类型。目前只指定了在多播UDP中使用该请求,以后可能扩展到TCP。
只有那些与ST匹配的服务才可能通过SSDP端口给出响应,响应应该在AL头中表示出服务的地址,同时,响应中还要包括缓存控制信息:有效期。没有缓存控制信息的响应将被视作无效响应。由4.1.1知,本例没有设备的响应消息。
以下是TV控制点发出的发现设备请求消息:
4.1.2SSDP存在宣告
SSDP存在宣告可以让SSDP客户知道设备及服务的存在、更新缓存中的过期信息、服务的位置改变或即将无效。SSDP存在宣告使用NOTIFY消息,NOTIFY消息包括位置和/或AL头部(指示设备及服务的地址)、NT头(指示设备及服务类型)、USN(唯一服务名称,可以和其它同类型服务相区别)以及Cache-Control或者Expiration头部(缓存控制信息)。对方收到后根据NOTIFY的NT判定是否是自己感兴趣的设备及服务。如果是,若缓存中未见此USN,则增加记录,否则更新记录。对此消息不需要给出响应。
从NT头知道,TV设备是根设备,由NTS子类型知道,该设备目前可用,且由USN指出了TV设备的唯一设备名称UUID。
4.2描述数据包分析
一般情况而言,在描述部分,控制点会得到两类描述,设备描述和服务描述,本例只获得了设备描述。因为TV设备只定义了一个服务,其变量为power、channel、volume。这三个变量直接是通过在代码里定义,然后进行操作的。
4.2.1获取设备描述的请求消息
控制点是通过发送HTTPGET消息来请求获得设备描述的。GET指出了设备描述的路径,此处为设备描述URL(发现消息中的LOCATION标头);HOST指出了设备描述URL的域名或IP地址及可选端口部分。
4.2.2TV设备的设备描述消息
空白处前面的数据为HTTP消息头,描述了XML描述文件的一些基本信息,空白处下面的数据就为XML文件的具体内容,具体的参数内容详见图3。
4.3事件数据包分析
4.3.1订阅请求的消息分析
4.3.2续订请求的消息分析
由上图知,TV控制点直接通过SID完成对tvcontrol的续订任务。
4.3.3NOTIFY事件通知消息分析
当设备的服务状态变量有变更时,设备会发布其状态变量变更的事件消息。对于控制点而言,在完成订阅或者续订了某项服务之后,它就会收到关于此服务的状态变量变更的事件消息。
以下是设备发送的关于tvcontrol的事件通知消息。
在空白处上方是事件消息的命令行和标头。标头里的SEQ是事件编号,对于事件消息均标有事件编号,为便于进行错误检查,发布者必须保持每个订阅有一个单独的事件编号。当发布者发送初始化事件消息时,订阅事件编号被初始化为0(图22所示的便是这种情况)。对于以后的每条事件消息,发布者会增加订阅事件编号,包括事件消息更新的编号。
空白处下方是该事件消息的消息体部分,以XML文档形式存在。在消息体内,指出了关于tvcontrol服务的所有状态变量(Power、Channel、Volume)及其当前值。
4.4控制数据包分析
4.4.1动作调用的消息分析
●SOAP动作调用
简单对象访问协议(SOAP)定义使用XML和HTTP的远程过程调用。UPnP使用SOAP来向设备提供控制消息,并将结果或错误返回控制点。
为了向设备的服务发出一个动作,控制点必须采用以下格式的POST方法发送一个请求。以下是TV控制点向TV设备发送的SOAP控制消息(以PowerOn为例):
●事件通知的消息分析
在控制点发送的动作消息,设备执行了之后,除了发送相应的响应消息,设备还会采用GENA协议发送一个事件通知消息给控制点,该消息会经由miniserver模块处理,然后由回调函数TvCtrlPointCallbackEventHandler()更新相应的状态变量表。
在数据包的消息体部分,返回了Power服务变量的当前值为1,即PowerOn的状态。
4.4.2查询变量的消息分析
除了向设备的服务发出动作,控制点还可以对服务进行轮询,以通过发送查询消息获得状态变量值。查询消息只能查询一个状态变量,必须发送多个查询消息以查询多个状态变量。此查询消息与该服务的事件(如果有)相分离。以下是TV例子所发送的查询消息和响应消息:
与前面的动作调用一样,前一部分是发送的查询请求消息,在标头部分,SOAPACTION中的QueryStateVariable表明是查询信息,这与动作调用区分开来;在消息体的BODY部分,指明了查询的服务状态变量(Power)及其所在的服务(control)。
后一部分是TV设备返回的响应消息,在消息体的BODY部分,返回了服务状态变量Power的当前值为1。
简单服务发现协议是在HTTPU和HTTPMU的基础上实现的协议。按照协议的规定,当一个控制点(客户端)接入网络的时候,它可以向一个特定的多播地址的SSDP端口使用M-SEARCH方法发送“ssdp:discover”消息。当设备监听到这个保留的多播地址上由控制点发送的消息的时候,设备会分析控制点请求的服务,如果自身提供了控制点请求的服务,设备将通过单播的方式直接响应控制点的请求。类似的,当一个设备接入网络的时候,它应当向一个特定的多播地址的SSDP端口使用NOTIFY方法发送“ssdp:alive”消息。控制点根据自己的策略,处理监听到的消息。考虑到设备可能在没有通知的情况下停止服务或者从网络上卸载,“ssdp:alive”消息必须在HTTP协议头CACHE-CONTROL里面指定超时值,设备必须在约定的超时值到达以前重发“ssdp:alive”消息。如果控制点在指定的超时值内没有再次收到设备发送的“ssdp:alive”消息,控制点将认为设备已经失效。
如果你想让你的软件能自动发现LAN上面其它正在执行相同软件的机器,并在连上网络时,自动通知其它机器,那么SSDP这个通讯协议能帮助你。
SSDP其实不复杂,可以想成是在多播的UDP上执行HTTPprotocol(HTTPU),而一般的HTTPprotocol是使用TCP。因此,你可以透过multicasting的方式,把HTTP的request送到LAN里的每一台执行SSDP的机器。收到request的SSDPservice若有足够的信息,则响应该request,反之则丢掉该request不回应。因此,SSDP不需要一个固定的server。
如何广播你的服务
当一个SSDP的服务上线之后,必需定期的在LAN上面进行广播。如此,其它机器才能知道该服务的存在。这有点像网芳,当一台新机器上线时,在网络芳临就会立即出现该计算机的icon。在SSDP是透过multicast一个NOTIFY的request到网络上。request的内容如下
NOTIFY*HTTP/1.1
HOST:239.255.255.250:1900
CACHE-CONTROL:max-age=120
NT:urn:schemas-wifialliance-org:service:WFAWLANConfig:1
USN:uuid:3b968ed4-7666-11e0-a686-002215d227b8
SERVER:UNIX/unknownUPnP/1.0dcports/1.0
NTS:ssdp:alive
基本上就是一个HTTPrequest,只是command为NOTIFY而非GET/POST/...。将这个request透过一个UDP的socket,传送到239.255.255.250:1900这个multicastIP地址即可。
importsocket
SSDP_PORT=1900
SSDP_MCAST_ADDR='239.255.255.250'
msg='NOTIFY*HTTP/1.1\r\n....'
msock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)
msock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
msock.sendto(msg,0,(SSDP_MCAST_ADDR,SSDP_PORT))
这个request必需定时发送,你必需在max-age到达之前,重新传送数次,以确保其它机器知道你的服务还在在线。
1.截获(比如抓包抓到了你传输的消息)2.篡改(截获消息然后修改掉再发送,破坏消息的完整性)3.伪造(比如非法源站冒充合法源站给目的站发消息)4.拒绝服务(向目的站发起大量的恶意连接或者发送大量无意义消息使得服务瘫痪)