网络

一、网络通信原理

互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite).
互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

互联网协议按照功能不同分为:osi七层、tcp/ip五层、tcp/ip四层

每层运行常见物理设备

 

 

 

 

 WebSocket属于应用层协议

 

二、tcp/ip五层模型

对于开发网络应用人员来说,一般把网络分成五层,这样比较容易理解。网络中的计算机互相通信就是实现了层与层之间的通信,要实现层与层之间的通信,则各层都要遵守规则,这样才能完成更好的通信。首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖于下一层,所以我们从最下一层开始切入,比较好理解每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件

1 物理层

物理层是五层模型中的最底层,物理层为计算机之间的数据通信提供了传输媒体和互连设备,为数据传输提供了可靠的环境,媒体包括电缆、光纤、无线信道等,互连设备指是计算机和调制解调器之间的互连设备,如各种插头、插座等。该层的作用是透明的传输比特流(即二进制流),为数据链路层提供一个传输原始比特流的物理连接
物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

2数据链路层
数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思
数据链路层的功能:定义了电信号的分组方式
数据链路层是模型中的第2层,该层对接受到物理层传输过来的比特流进行分组,一组电信号构成的数据包,就叫做"帧",数据链链路层就是来传输以"帧"为单位的数据包,把数据传递给上一层(网络层),帧数据由两部分组成:帧头和帧数据,帧头包括接受方物理地址(就是网卡的地址)和其他的网络信息,帧数据就是要传输的数据体。数据帧的最长为1500字节,如果数据很长,就必须分割成多个帧进行发送。


以太网协议:
早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet
ethernet规定
•一组电信号构成一个数据包,叫做‘帧’
•每一数据帧分成:报头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.1
ip地址分成两部分
•网络部分:标识子网
•主机部分:标识主机
注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网
例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网

子网掩码
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,
172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0

172.16.10.2:10101100.00010000.00001010.000000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
结果都是172.16.10.0,因此它们在同一个子网络。
总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

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/24
1:首先通过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为系统占用端口

通过MAC和IP地址,我们可以找到互联网上任意两台主机来建立通信。然而这里有一个问题,找到主机后,主机上有很多程序都需要用到网络,比如说你在一边听歌和好用QQ聊天, 当网络上发送来一个数据包时, 是怎么知道它是表示聊天的内容还是歌曲的内容的, 这时候就需要一个参数来表示这个数据包是发送给那个程序(进程)来使用的,这个参数我们就叫做端口号,主机上用端口号来标识不同的程序(进程),端口是0到65535之间的一个整数,0到1023的端口被系统占用,用户只能选择大于1023的端口。
传输层的功能就是建立端口到端口的通信,网络层就是建立主机与主机的通信,这样如果我们确定了主机和端口,这样就可以实现程序之间的通信了。我们所说的Socket编程就是通过代码来实现传输层之间的通信。因为初始化Socket类对象要指定IP地址和端口号。
在传输层有两个非常重要的协议:UDP 协议和TCP协议
采用UDP协议话传输的就是UDP数据包,同样UDP数据包也由头和数据两部分组成,头部分主要标识了发送端口和接受端口,数据部分就是具体的内容信息。同样UDP数据包是放入IP数据包中的"数据"部分,IP数据包再放入数据帧中在网络上传输。
由于UDP协议的可靠性差(数据发送后无法确定对方是否收到),所以又定义了一个可靠性高的协议——TCP协议,TCP协议采取了握手的方式要确保对方收到了数据。

tcp协议:
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
以太网头 ip 头 tcp头 数据

udp协议:
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
以太网头 ip头 udp头 数据

tcp报文

       image

 

tcp三次握手和四次挥手

5 应用层
应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开放的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式
应用层功能:规定应用程序的数据格式。
例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。

 

『应用层』算是距离用户最近的一层了,主机上的一个个的进程就构成了『应用层』。比如你在你的浏览器地址栏输入了 「www.baidu.com」,你的浏览器在应用层会做哪些事情呢?首先浏览器会使用 DNS 协议返回域名「www.baidu.com」所对应的 IP 地址,接着,应用层决定创建一个『TCP 套接字』,然后将这个请求动作封装成一个 Http 数据报并推入套接字中。套接字就是用于区分各个应用层应用的,往往由端口号和 IP 地址进行标识,运输层只要查看响应报文的源端口号和 IP 地址就能够知道该将报文推送给哪个套接字了。

DNS 原理

首先明确一点的是,DNS 是一个应用层协议,并且它选择的运输层协议是 UDP,所以你的域名解析过程一般会很快,但也会经常出现解析失败的情况,然而刷新一下又好了。

image

在 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 服务器』。

image

大家每次通过 DHCP 动态获取 IP 地址的时候,其实路由器不仅给你返回了 IP 地址,还会告诉你一个 DNS 服务器地址,这个就是你的本地 DNS 服务器地址,也就是说,你的所有域名解析请求只要告诉它就行了,它会帮你查并返回结果给你的。除此之外,本地 DNS 服务器往往是具有缓存功能的,通常两天内的记录都会被缓存,所以大部分时候你是感觉不到域名解析过程的,因为往往就是从缓存里拿的,非常快。下面我们看一个简单的案例:

网上找的一个图,自己画实在太费时间了,但足以说明问题,现在假设请求 「www.xx.com」 。

image

  • ①:主机向负责自己的本地 DNS 发送查询报文,如果本地服务器缓存中有,将直接返回结果
  • ②:本地服务器发现缓存中没有,于是从内置在内部的根服务器列表中选一个发送查询报文
  • ③:根服务器解析一下后缀名,告诉本地服务器负责 .com 的所有顶级服务器列表
  • ④:本地服务器选择一个顶级域服务器继续查询,.com 域服务器拿到域名后继续解析,返回负责 .xx 域的所有权威服务器列表
  • ⑥:本地服务器从返回的权威服务器之一再次发送查询报文,最终会从某一个权威服务器上得到具体的 IP 地址
  • ⑧:向主机返回结果

其实整个 DNS 报文的发送与响应过程都是要走我们的五层协议的,只是这里重点在于理解 DNS 协议本身,所以并未提及其他层的具体细节,这里的强调是提醒你 DNS 只是一个应用层协议。

7、总结
现在通过一个简单的访问网页的例子来说明网络中的通信。
当我们在浏览器中输入www.baidu.com时,这意味着浏览器要向百度发送一个网页数据包,要发送数据包,需要知道对方的IP地址,这里我们只知道网址为www.baidu.com,却不知道IP地址,此时应用层协议DNS协议会帮我们把网址解析为IP地址,此时会发送一个DNS数据包给DNS服务器,DNS服务器再做出响应来告诉我们百度的IP地址为220.181.111.147,这样我们就知道百度(我们需要通信的主机)的IP地址。

应用层:
浏览网页采用的是HTTP 协议,HTTP数据包会嵌入在TCP数据包中,此时我们发送的HTTP数据包内容为:
GET http://www.baidu.com/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Zune 4.7; InfoPath.3; MS-RTC LM 8)
Accept-Encoding: gzip, deflate, peerdist
Proxy-Connection: Keep-Alive
Host: www.baidu.com
Cookie: BDSFRCVID=H1K_JgC2l434o0a3SlYrhIyDwFLxPM7C3J; H_BDCLCKID_SF=tJAt_C8htDv5HTuRj63D5JcH-UnLqMkDWaOZ0h8-aI-5MbAx-jb6hhFXM-r80nblBTbT2C3nthF0HPonHj8Bej5L3J; BAIDUID=C0E879D1A40237E70E9FA559D40EE0AC:FG=1; BDUT=w5n3C0E879D1A40237E70E9FA559D40EE0AC13914a661370; BDUSS=FEQVdNdjllMTYyYlRxY3ZZbW1hM2htemdqZFVJcWRLWmFBaEtqd1FoTDNXeE5SQUFBQUFBJCQAAAAAAAAAAAoqyysAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEwLjI2LjE5Ny43NwAAAADAxFInAAAAAPcNJlD3DSZQYV; BDRCVFR[eYjbPwSqvSs]=2g3v5sBI-NCpv4EILPoXi4WUvY; Hm_lvt_9f14aaa038bbba8b12ec2a4a3e51d254=1344671219756; Hm_lpvt_9f14aaa038bbba8b12ec2a4a3e51d254=1344671219756
X-P2P-PeerDist: Version=1.0

传输层:
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七层网络协议

一、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中的较高层次了,从它的名字可以看出,它解决的是网络与网络之间,即网际的通信问题,而不是同一网段内部的事。网络层的主要功能即是提供路由,即选择到达目标主机的最佳路径,并沿该路径传送数据包。除此之外,网络层还要能够消除网络拥挤,具有流量控制和拥挤控制的能力。网络边界中的路由器就工作在这个层次上,现在较高档的交换机也可直接工作在这个层次上,因此它们也提供了路由功能,俗称“第三层交换机”。
网络层的功能包括:建立和拆除网络连接、路径选择和中继、网络连接多路复用、分段和组块、服务选择和流量控制。

这一层干的事就比较多了。它工作对象,概括的说就是:电路、数据包和信息交换。
网络层确定把数据包传送到其目的地的路径。就是把逻辑网络地址转换为物理地址。如果数据包太大不能通过路径中的一条链路送到目的地,那么网络层的任务就是把这些包分成较小的包。
这些光荣的任务就派给了路由器、网桥路由器和网关。
以后几层属于较高层,通常驻留在跨网络相互通信的计算机中,而不象以上几层可以独自为阵。设备中只有网关可跨越所有各层。

4)传输层——Transport
传输层解决的是数据在网络之间的传输质量问题,它属于较高层次。传输层用于提高网络层服务质量,提供可靠的端到端的数据传输,如常说的QoS就是这一层的主要服务。这一层主要涉及的是网络传输协议,它提供的是一套网络数据传输标准,如TCP协议。
传输层的功能包括:映像传输地址到网络地址、多路复用与分割、传输连接的建立与释放、分段与重新组装、组块与分块。
根据传输层所提供服务的主要性质,传输层服务可分为以下三大类:
A类:网络连接具有可接受的差错率和可接受的故障通知率(网络连接断开和复位发生的比率),A类服务是可靠的网络服务,一般指虚电路服务。
C类:网络连接具有不可接受的差错率,C类的服务质量最差,提供数据报服务或无线电分组交换网均属此类。
B类:网络连接具有可接受的差错率和不可接受的故障通知率,B类服务介于A类与C类之间,在广域网和互联网多是提供B类服务。
网络服务质量的划分是以用户要求为依据的。若用户要求比较高,则一个网络可能归于C型,反之,则一个网络可能归于B型甚至A型。例如,对于某个电子邮件系统来说,每周丢失一个分组的网络也许可算作A型;而同一个网络对银行系统来说则只能算作C型了。
确保按顺序无错的发送数据包。传输层把来自会话层的大量消息分成易于管理的包以便向网络发送。

5)会话层——Senssion
会话层利用传输层来提供会话服务,会话可能是一个用户通过网络登录到一个主机,或一个正在建立的用于传输文件的会话。
会话层的功能主要有:会话连接到传输连接的映射、数据传送、会话连接的恢复和释放、会话管理、令牌管理和活动管理。
在分开的计算机上的两种应用程序之间建立一种虚拟链接,这种虚拟链接称为会话(session)。会话层通过在数据流中设置检查点而保持应用程序之间的同步。允许应用程序进行通信的名称识别和安全性的工作就由会话层完成。

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.1
•DNS的IP地址:8.8.8.8

2.打开浏览器,想要访问Google,在地址栏输入了网址:www.google.com。

3.dns协议(基于udp协议)

13台根dns:
A.root-servers.net198.41.0.4美国
B.root-servers.net192.228.79.201美国(另支持IPv6)
C.root-servers.net192.33.4.12法国
D.root-servers.net128.8.10.90美国
E.root-servers.net192.203.230.10美国
F.root-servers.net192.5.5.241美国(另支持IPv6)
G.root-servers.net192.112.36.4美国
H.root-servers.net128.63.2.53美国(另支持IPv6)
I.root-servers.net192.36.148.17瑞典
J.root-servers.net192.58.128.30美国
K.root-servers.net193.0.14.129英国(另支持IPv6)
L.root-servers.net198.32.64.12美国
M.root-servers.net202.12.27.33日本(另支持IPv6)

域名定义:http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html
顶级域名:以.com,.net,.org,.cn等等属于国际顶级域名,根据目前的国际互联网域名体系,国际顶级域名分为两类:类别顶级域名(gTLD)和地理顶级域名(ccTLD)两种。类别顶级域名是以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等结尾的域名,均由国外公司负责管理。地理顶级域名是以国家或地区代码为结尾的域名,如"CN"代表中国,"UK"代表英国。地理顶级域名一般由各个国家或地区负责管理。
二级域名:二级域名是以顶级域名为基础的地理域名,比喻中国的二级域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
一般来说,二级域名是域名的一条记录,比如alidiedie.com是一个域名,www.alidiedie.com是其中比较常用的记录,一般默认是用这个,但是类似*.alidiedie.com的域名全部称作是alidiedie.com的二级

4.HTTP部分的内容,类似于下面这样:
GET / HTTP/1.1
Host: www.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) ……
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: … …
我们假定这个部分的长度为4960字节,它会被嵌在TCP数据包之中。

5 TCP协议
TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。
TCP数据包的标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节。

6 IP协议
然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是192.168.1.100(本机),接收方是172.194.72.105(Google)。
IP数据包的标头长度为20字节,加上嵌入的TCP数据包,总长度变为5000字节。

7 以太网协议
最后,IP数据包嵌入以太网数据包。以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。
以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560。

8 服务器端响应
经过多个网关的转发,Google的服务器172.194.72.105,收到了这四个以太网数据包。
根据IP标头的序号,Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的”HTTP请求”,接着做出”HTTP响应”,再用TCP协议发回来。
本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。


 

五、ip地址基本知识

1 ip地址的结构和分类
根据tcp/ip协议,连接在internet上的每个设备都必须有一个ip地址,他是一个32位二进制数,也可以用点分十进制表示,每八位一组,用一个十进制表示即0~255,每组用"."分隔开,例如172.16.45.10
将ip地址中的网络位和主机位固定下来后,ip地址被分成了不同的积累:A类,B类,C类,D类,E类

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类地址
6 0.0.0.0:指已经不是真正意义上的ip地址,它表示的是所有不清楚主机和目的网络,这里的不清楚指的是在本机路由表里没有特定条目指明如何到达

3 子网掩码
子网划分是通过借用ip地址的若干位主机位来充当子网地址的从而将原来的网络分为若干个彼此隔离的子网实现的

1子网掩码用于识别ip地址中的网络地址和主机地址。
2子网掩码也是32位二进制数字,在子网掩码中,对应于网络地址部分全用1表示,主机部分全用0表示
3还可以用网络前缀表示子网掩码,即"<网络地址位数>",如172.16.45.0/24表示B类网络172.16.45.0的子网掩码为255.255.255.0

•arp协议通过ip地址获取目标主机的mac地址这一过程使用的是广播的方式,这个广播地址就是通过子网地址与子网掩码计算而来的,只有计算出的这一子网内的主机才能收到这个arp广播包
•子网划分与vlan都可以做到隔离广播域,只是子网划分是三层隔离,二vlan是二层

4 c类子网划分初探

5子网划分步骤
•确定要划分的子网数以及每个子网的主机数
••求出子网数目对应的二进制的位数N及主机数目对应的二进制数的位数M
•对该ip地址的原子网掩码,将其主机地址部分的前N位置1(其余全部置0)或后M位置0(其余全置1)即得出该ip地址划分子网后的子网掩码

6子网划分案例
给C类网络211.168.10.0划分5个子网
2**2-2<5<2**3-2所以需要3位网络号,主机号为8-3=5
子网掩码为255.255.255.224
每个子网可容纳2**5-2=30台主机

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)易于扩大地理范围

 

 

六、防火墙

防火墙顾名思义就是一睹隔离危险的墙,能够阻止恶意的入侵或攻击,简而言之就是起到一个过滤的作用。其中分组过滤路由器能够对网络层和传输层的数据进行过滤。应用网关也称代理服务器,能够对应用层数据进行过滤。防火墙可以对来自外部的攻击进行有效的防护,但对来自内部的攻击却无能为力,因而不可以代替内部网络安全措施,防火墙技术可分为:IP过滤、线路过滤、用户代理。构成防火墙的技术有主要二种:包(IP分组)过滤技术、代理服务技术。包过滤技术是防火墙实现的最基本的技术。代理服务软件运行在一台主机上构成代理服务器,Internet上的服务www、ftp、gopher等都可采用这种代理机制实现。

 

 

 

 

七、TCP与UCP

TCP(IP协议6)是一个“可靠的”、面向链接的传输机制,它提供一种可靠的字节流保证数据完整、无损并且按顺序到达。TCP尽量连续不断地测试网络的负载并且控制发送数据的速度以避免网络过载。另外,TCP试图将数据按照规定的顺序发送。这是它与UDP不同之处。较新的SCTP也是一个“可靠的”、面向连结的传输机制。它是面向纪录而不是面向字节的,它在一个单独的连结上提供了通过多路复用提供的多个子流。它也提供了多路自寻址支持,其中连结终端能够被多个IP地址表示(代表多个物理接口),这样的话即使其中一个连接失败了也不中断。它最初是为电话应用开发的(在IP上传输SS7),但是也可以用于其他的应用。

UDP(IP协议号17)是一个无连链接的数据报协议。它是一个不可靠协议,它不检查数据包是否已经到达目的地,并且不保证它们按顺序到达。如果一个应用程序需要这些特点,它必须自己提供或者使用TCP。UDP的典型性应用是如流媒体(音频和视频等)这样按时到达比可靠性更重要的应用,或者如DNS查找这样的简单查询/响应应用,如果建立可靠的连结所作的额外工作将是不成比例地大。

 

 

八、DHCP

动态主机设置协议(Dynamic Host Configuration Protocol, 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 还可以帮客户端指定 routernetmaskDNS ServerWINS Server、等等项目。

 

DHCP运作

假设多部计算机在同一个网域当中,也就是说,DHCP Server 与他的 Clients 都在同一个网段之内,可以透过软件广播的方式来达到相互沟通的状态。那么Client 藉由DHCP Server得到IP的程序为:

① 当 DHCP 客户端第一次登录网络的时候,也就是客户发现本机上没有任何 IP 数据设定,它会向网络发出一个 DHCP DISCOVER 封包。因为客户端还不知道自己属于哪一个网络,所以封包的来源地址会为 0.0.0.0 ,而目的地址则为 255.255.255.255 ,然后再附上 DHCP discover 的信息,向网络进行广播。网域内的其它没有提供DHCP 服务的计算机,收到这个封包之后会自动的将该封包丢弃而不回应;

DHCP 主机响应讯息:如果是 DHCP 主机收到这个Client DHCP 需求时,那么 DHCP 主机首先会针对该次需求的讯息所携带的 MACDHCP 主机本身的设定值去比对,如果 DHCP 主机的设定有针对该 MAC 做静态IP的提供时,则提供 Client 端相关的固定 IP 与相关的网络参数;否则 DHCP 主机会选取目前网域内没有使用的IP来发放给 client 端使用!此外需要特别留意的是,在DHCP 主机发放给 Client 端的讯息当中,会附带一个『租约期限』的讯息,以告诉Client 端,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 自己的备用区中,等待未来的使用;

Client 端租约到期:前面提到 DHCP server 端发放的IP 有使用的期限, Client 使用这个 IP 到达期限规定的时间,就需要将IP缴回去!这个时候就会造成断线,而Client 也可以再向 DHCP 主机要求再次分配IP

 

第一次登录

一旦 DHCP 客户端成功地从服务器那里取得 DHCP 租约之后,除非其租约已经失效并且 IP地址也重新设定回 0.0.0.0 ,否则就无需再发送 DHCP discover 信息了, DHCP 服务器会尽量让客户端使用原来的 IP 地址,如果没问题的话,直接响应 DHCPack 来确认则可。如果该地址已经失效或已经被其它机器使用了,服务器则会响应一个 DHCPNACK 封包给客户端,要求其重新执行 DHCP discoverIP 的租约期限是非常考究的,以 NT 为例子:DHCP 客户端除了在开机的时候发出 DHCP request 请求之外,在租约期限一半的时候也会发出 DHCP request ,如果此时得不到 DHCP 服务器的确认的话,客户端还可以继续使用该 IP ;当租约期过了87.5%时,如果客户端仍然无法与当初的DHCP服务器联系上,它将与其它DHCP服务器通信。如果网络上再没有任何DHCP服务器在运行时,该客户端必须停止使用该IP地址,并从发送一个Dhcp discover数据包,开始再一次重复整个过程。

 

跨网络的 DHCP 运作

从前面描述的过程中,我们不难发现:DHCP DISCOVER 是以广播方式进行的,其情形只能在同一网络之内进行,因为 router 是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢?由于 DHCP 客户端还没有 IP 环境设定,所以也不知道 Router 地址,因此这情形下 DHCP DISCOVER 是永远没办法抵达DHCP服务器那端的,当然也不会发生 OFFER 及其它动作了。要解决这个问题,我们可以用 DHCP Agent (DHCP Proxy )主机来接管客户的 DHCP 请求,然后将此请求传递给真正的 DHCP 服务器,然后将服务器的回复传给客户。这里,Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。若不使用 Proxy,您也可以在每一个网络之中安装 DHCP 服务器,但这样的话,一来设备成本会增加,而且,管理上面也比较分散。

 

 

九、NAT

NAT (Network Address Translation网络地址转换)属接入广域网技术,是一种将私有地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。NAT是将IP 数据包头中的IP 地址转换为另一个IP 地址的过程。在实际应用中,NAT 主要用于实现私有网络访问公共网络的功能。这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用IP 地址空间的枯竭。

  说明:

  私有 IP 地址是指内部网络或主机的IP 地址,它是不会在因特网上被分配,RFC 1918 为私有网络预留出了三个IP 地址块如下:

  A 类:10.0.0.010.255.255.255

  B 类:172.16.0.0172.31.255.255

  C 类:192.168.0.0192.168.255.255

 

NAT工作流程

  ①如右图这个 client gateway 设定为 NAT 主机,所以当要连上 Internet 的时候,该封包就会被送到 NAT 主机,这个时候的封包 Header source IP 192.168.1.100(假设);

  ②而透过这个 NAT 主机,她会将 client 的对外联机封包的 source IP ( 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 的朋友大部分都是希望达到频宽分享的目的!这是 NAT 主机的最大功能!

安全防护: NAT 之内的 PC 联机到 Internet 上面时,他所显示的 IPNAT主机的公共IP,所以 Client 端的PC当然就具有一定程度的安全了!最起码人家在进行 portscan 的时候,就侦测不到你的 Client 端的 PC

 

NAT技术的作用

借助于NAT,私有地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。否则,在报文数据部分嵌入IP地址的应用程序就不能正常工作。

 

如何将大量的内部地址,映射成少量的外部地址?

  对于第四层是TCPUDP的数据包,NAT通过更改源端口号,来实现多对少的映射。例如:内部IP1~IP44个地址映射成外部一个地址IP5

  IP1Port1)映射成(IP5Port1

  IP2Port1)映射成(IP5Port2

  IP3Port2)映射成(IP5Port3

  IP4Port2)映射成(IP5Port4

  对于ICMP包,NAT通过更改ICMPID,来实现多对少的映射。

 

NAT有什么弊端

  在一个具有NAT功能的路由器下的主机并没有建立真正的端对端连接,并且不能参与一些因特网协议。一些需要初始化从外部网络建立的TCP连接,和使用无状态协议(比如UDP)的服务将被中断。除非NAT路由器作一些具体的努力,否则送来的数据包将不能到达正确的目的地址。(一些协议有时可以在应用层网关的辅助下,在参与NAT的主机之间容纳一个NAT的实例,比如FTP。)NAT也会使安全协议变的复杂。

 

NAT技术实现方式

静态转换

是指将内部网络的私有IP地址转换为公有IP地址时,是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。

静态地址转换的实现

 假设内部局域网使用的lP地址段为192.168.0.1~192.168.0.254,路由器局域网端(即默认网关)的IP地址为192.168.0.1,子网掩码为255.255.255.0。网络分配的合法IP地址范围为61.159.62.128~61.159.62.135,路由器在广域网中的IP地址为61.159.62.129,子网掩码为255.255.255.248可用于转换的IP地址范围为61.159.62.130~61.159.62.134。要求将内部网址192.168.0.2~192.168.0.6分别转换为合法IP地址61.159.62.130~61.159.62.134

  第一步,设置外部端口。

  interface serial 0

  ip address 61.159.62.129 255.255.255.248

  ip nat outside

  第二步,设置内部端口。

  interface ethernet 0

  ip address 192.168.0.1 255.255.255.0

  ip nat inside

  第三步,在内部本地与外部合法地址之间建立静态地址转换。

  ip nat inside source static 内部本地地址内部合法地址。

  示例:

  ip nat inside source static 192.168.0.2 61.159.62.130 //将内部网络地址192.168.0.2转换为合法IP地址61.159.62.130

  ip nat inside source static 192.168.0.3 61.159.62.131 //将内部网络地址192.168.0.3转换为合法IP地址61.159.62.131

  ip nat inside source static 192.168.0.4 61.159.62.132 //将内部网络地址192.168.0.4转换为合法IP地址61.159.62.132

  ip nat inside source static 192.168.0.5 61.159.62.133 //将内部网络地址192.168.0.5转换为合法IP地址61.159.62.133

  ip nat inside source static 192.168.0.6 61.159.62.134 //将内部网络地址192.168.0.6转换为合法IP地址61.159.62.134

  至此,静态地址转换配置完毕。

 

动态转换

是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的是随机的,所有被授权访问Internet的私有IP地址可随机转换为任何指定的合法IP地址。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时,可以采用动态转换的方式。

动态地址转换的实现

假设内部网络使用的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

  第一步,设置外部端口。

  设置外部端口命令的语法如下:

  ip nat outside

  示例:

  interface serial 0 //进入串行端口serial 0

  ip address 61.159.62.129 255.255.255.192//将其IP地址指定为61.159.62.129,子网掩码为255.255.255.192

  ip nat outside //将串行口serial 0设置为外网端口

  注意,可以定义多个外部端口。

  第二步,设置内部端口。

  设置内部接口命令的语法如下:

  ip nat inside

  示例:

  interface ethernet 0 //进入以太网端口Ethernet 0

  ip address 172.16.100.1 255.255.255.0 // 将其IP地址指定为172.16.100.1,子网掩码为255.255.255.0

  ip nat inside //Ethernet 0 设置为内网端口。

  注意,可以定义多个内部端口。

  第三步,定义合法IP地址池。

  定义合法IP地址池命令的语法如下:

  ip nat pool 地址池名称起始IP地址终止IP地址子网掩码

  其中,地址池名字可以任意设定。

  示例:

  ip nat pool chinanet 61.159.62.130 61.159.62.190 netmask 255.255.255.192 //指明地址缓冲池的名称为chinanet,IP地址范围为61.159.62.130~61.159.62.190,子网掩码为255.255.255.192。需要注意的是,即使掩码为255.255.255.0,也会由起始IP地址和终止IP地址对IP地址池进行限制。

  ip nat pool test 61.159.62.130 61.159.62.190 prefix-length 26

  注意,如果有多个合法IP地址范围,可以分别添加。例如,如果还有一段合法IP地址范围为"211.82.216.1~211.82.216.254",那么,可以再通过下述命令将其添加至缓冲池中。

  ip nat pool cernet 211.82.216.1 211.82.216.254 netmask 255.255.255.0

  

  ip nat pool test 211.82.216.1 211.82.216.254 prefix-length 24

  第四步,定义内部网络中允许访问Internet的访问列表。

  定义内部访问列表命令的语法如下:

  access-list 标号 permit 源地址通配符(其中,标号为1~99之间的整数)

  access-list 1 permit 172.16.100.0 0.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.255172.16.99.0~172.16.99.255转换为合法IP地址时,应当添加下述命令:

  access-list2 permit 172.16.98.0 0.0.0.255

  access-list3 permit 172.16.99.0 0.0.0.255

  第五步,实现网络地址转换。

  在全局设置模式下,将第四步由access-list指定的内部本地地址列表与第三步指定的合法IP地址池进行地址转换。命令语法如下:

  ip nat inside source list 访问列表标号 pool 内部合法地址池名字

  示例:

  ip nat inside source list 1 pool chinanet

  如果有多个内部访问列表,可以一一添加,以实现网络地址转换,如

  ip nat inside source list 2 pool chinanet

  ip nat inside source list 3 pool chinanet

  如果有多个地址池,也可以一一添加,以增加合法地址池范围,如

  ip nat inside source list 1 pool cernet

  ip nat inside source list 2 pool cernet

  ip nat inside source list 3 pool cernet

至此,动态地址转换设置完毕。

 

端口多路复用(Port address Translation,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

  第一步,设置外部端口。

  interface serial 0

  ip address 202.99.160.1 255.255.255.252

  ip nat outside

  第二步,设置内部端口。

  interface ethernet 0

  ip address 10.100.100.1 255.255.255.0

  ip nat inside

  第三步,定义合法IP地址池。

  ip nat pool onlyone 202.99.160.2 202.99.160.2 netmask 255.255.255.252

  // 指明地址缓冲池的名称为onlyone,IP地址范围为202.99.160.2,子网掩码为255.255.255.252。由于本例只有一个IP地址可用,所以,起始IP地址与终止IP地址均为202.99.160.2。如果有多个IP地址,则应当分别键入起止的IP地址。

  第四步,定义内部访问列。

  access-list 1 permit 10.100.100.0 0.0.0.255

  允许访问Internetr的网段为10.100.100.0~10.100.100.255,子网掩码为255.255.255.0。需要注意的是,在这里子网掩码的顺序跟平常所写的顺序相反,即0.0.0.255

  第五步,设置复用动态地址转换。

  在全局设置模式下,设置在内部的本地地址与内部合法IP地址间建立复用动态地址转换。命令语法如下:

  ip nat inside source list访问列表号pool内部合法地址池名字overload

  示例:

  ip nat inside source list1 pool onlyone overload //以端口复用方式,将访问列表1中的私有IP地址转换为onlyone IP地址池中定义的合法IP地址。

  注意:overload是复用动态地址转换的关键词。

  至此,端口复用动态地址转换完成。

  还可以这样写:

  ip nat inside source list 1 interface serial 0 overload 

 

 

十、代理服务器

代理服务器(Proxy Server)的工作主要在OSI模型的会话层,从而起到防火墙的作用。代理服务器就是代理网络用户去取得网络信息。在一般情况下我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,是直接联系到目的站点服务器,然后由目的站点服务器把信息传送回来。代理服务器是介于客户端和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。
大部分代理服务器都具有缓冲的功能,就好像一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。在国内,所谓中国公众多媒体信息网(169)和教育网都是独立的大型国家级局域网,是与国际互联网隔绝的。出于各种需要,某些集团或个人在两网之间开设了代理服务器,如果我们知道这些代理服务器的地址,就可以利用它到达国外网站。

主要功能
(1)设置用户验证和记账功能,可按用户进行记账,没有登记的用户无权通过代理服务器访问Internet网。并对用户的访问时间、访问地点、信息流量进行统计。
(2)对用户进行分级管理,设置不同用户的访问权限,对外界或内部的Internet地址进行过滤,设置不同的访问权限。
(3)增加缓冲器(Cache),提高访问速度,对经常访问的地址创建缓冲区,大大提高热门站点的访问效率。通常代理服务器都设置一个较大的硬盘缓冲区(可能高达几个GB或更大),当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度。
(4)连接内网与Internet,充当防火墙(Firewall):因为所有内部网的用户通过代理服务器访问外界时,只映射为一个IP地址,所以外界不能直接访问到内部网;同时可以设置IP地址过滤,限制内部网对外部的访问权限。
(5)节省IP开销:代理服务器可以减少对IP地址的需求,对于使用局域网方式接入Internet ,用代理服务器后,只需代理服务器上有一个合法的IP地址,LAN内其他用户可以使用私有IP地址,这样可以节约大量的IP,降低网络的维护成本。

代理服务器除了网络服务商为了各种目的而开设外,大部分是新建网络服务器设置的疏漏!虽然法律尚无具体规定,但没有经过允许而使用他人的服务器当然还是不太好!虽然目的主机一般只能得到您使用的代理服务器IP,似乎有效的遮掩了你的行程,但是值得一提的是:网络服务商开通的专业级代理服务器一般都有路由和流程记录,因此可以轻易的通过调用历史纪录来查清使用代理服务器地址的来路。

 

 

十一、WiFi

WiFi(Wireless Fidelity无线保真技术)与蓝牙技术一样,同属于在办公室和家庭中使用的短距离无线技术。Wi-Fi是一个无线网路通信技术的品牌,由Wi-Fi联盟(Wi-Fi Alliance)所持有。实质上是一种商业认证,同时也是一种无线联网的技术,以前通过网线连接电脑,而现在则是通过无线电波来连网;该技术使用2.4GHz或5GHz附近频段。2.4GHz频段是开放频段,不需要额外批准,任何人任何设备都可以使用,因此其他的无线通信如果进入该频段,会对Wi-Fi的稳定性造成一定影响。

2.4G WIFI穿墙能力强,5.0G的穿墙能力不强,但是2.4G频点少只有3个,5.0的多。目前的广泛应用的WiFi技术标准主要是802.11a、802.11b、802.11g。

802.11a定义了一个在5GHz ISM频段上的数据传输速率可达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是基于IEEE 802.11a、802.11b、802.11g的单模、双模或双频的产品所建立的测试程序。内容包含通讯协定的验证、无线网络安全性机制的验证,以及网络传输表现与相容性测试。

  * WMM(Wi-Fi MultiMedia):当影音多媒体透过无线网络的传递时,要如何验证其带宽保证的机制是否正常运作在不同的无线网络装置及不同的安全性设定上是WMM测试的目的。

  * WMM Power Save:在影音多媒体透过无线网络的传递时,如何透过管理无线网络装置的待命时间来延长电池寿命,并且不影响其功能性,可以透过WMM Power Save的测试来验证。

  * WPS(Wi-Fi Protected Setup):这是一个2007年年初才发布的认证,目的是让消费者可以透过更简单的方式来设定无线网络装置,并且保证有一定的安全性。目前WPS允许透过Pin Input Config(PIN)、Push Button Config(PBC)、USB Flash Drive Config(UFD)以及Near Field Communication 、Contactless Token Config(NFC)的方式来设定无线网络装置。

  * ASD(Application Specific Device):这是针对除了无线网络存取点(Access Point)及站台(Station)之外其他有特殊应用的无线网络装置,例如DVD播放器、投影机、打印机等等。

  * CWG(Converged Wireless Group):主要是针对Wi-Fi mobile converged devices 的RF 部分测量的测试程序。

 

1. IE802.11简介

标准号

IEEE 802.11b

IEEE 802.11a

IEEE 802.11g

IEEE 802.11n

标准发布时间

1999年9月

1999年9月

2003年6月

2009年9月

工作频率范围

2.4-2.4835GHz

5.150-5.350GHz

5.475-5.725GHz

5.725-5.850GHz

2.4-2.4835GHz

2.4-2.4835GHz

5.150-5.850GHz

非重叠信道数

3

24

3

15

物理速率(Mbps)

11

54

54

600

实际吞吐量(Mbps)

6

24

24

100以上

频宽

20MHz

20MHz

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. 频谱划分

信道也称作通道(Channel)、频段,是以无线信号(电磁波)作为传输载体的数据信号传送通道。无线网络(路由器、AP热点、电脑无线网卡)可在多个信道上运行。在无线信号覆盖范围内的各种无线网络设备应该尽量使用不同的信道,以避免信号之间的干扰。目前主流的无线WIFI网络设备不管是802.11b/g还是802.11b/g/n 一般都支持13个信道。它们的中心频率虽然不同,但是因为都占据一定的频率范围,所以会有一些相互重叠的情况。

下图是常用的 2.4GHz(=2400MHz)频带的信道划分,一共有14个信道,但第14信道一般不用。表中只列出信道的中心频率。每个信道的有效宽度是20MHz,另外还有2MHz的强制隔离频带(类似于公路上的隔离带)。即,对于中心频率为 2412 MHz 的1信道,其频率范围为 2401~2423MHz。20MHz的信道宽度也只是“有效带宽”,因为实际上一个信道在其中心频率两侧有很宽的延展,但是超过10MHz以外的部分强度很弱,基本无用。从下图很容易看到其中 1、6、11 这三个信道(红色标记)之间是完全没有交叠的,也就是人们常说的三个不互相重叠的信道。每个信道 20MHz 带宽。图中也很容易看清楚其他各信道之间频谱重叠的情况。另外,如果设备支持,除 1、6、11 三个一组互不干扰的信道外,还有 2、7、12;3、8、13;4、9、14 三组互不干扰的信道。

 

1)IEEE 802.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

北美/FCC    2.412-2.461GHz(11信道)

欧洲/ETSI   2.412-2.472GHz(13信道)

日本/ARIB    2.412-2.484GHz(14信道)

2.4GHz频段WLAN信道配置表

 

 

信道

中心频率(MHz)

信道低端/高端频率

1

2412

2401/2423

2

2417

2406/2428

3

2422

2411/2433

4

2427

2416/2438

5

2432

2421/2443

6

2437

2426/2448

7

2442

2431/2453

8

2447

2426/2448

9

2452

2441/2463

10

2457

2446/2468

11

2462

2451/2473

12

2467

2456/2478

13

2472

2461/2483

 

 5. SSID和BSSID

1)基本服务集(BSS)

基本服务集是802.11 LAN的基本组成模块。能互相进行无线通信的STA可以组成一个BSS(Basic Service Set) 。如果一个站移出BSS的覆盖范围,它将不能再与BSS的其它成员通信。

  

2)扩展服务集(ESS)

多个BSS可以构成一个扩展网络,称为扩展服务集(ESS)网络,一个ESS网络内部的STA可以互相通信,是采用相同的SSID的多个BSS形成的更大规模的虚拟BSS。连接BSS的组件称为分布式系统(Distribution System,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)Fat AP(胖AP)将WLAN的实体层、加密、用户认证、网路管理等功能集於一身;而 Fit AP(瘦AP)是一个只有射频和通信功能的AP,功能单一,不能独立工作。

2)Fat AP无线网路解决方案可由Fat AP直接在有线网的基础上构成, 所有AP都单独进行配置,且难於集中管理; 而Fit AP无线网路解决方案则是由无线网路控制器和Fit AP在有线网的基础上构成, 且Fit AP上“零配置”,所有配置都集中到无线网路控制器上。易於集中管理。

7. 无线接入过程三个阶段

STA(工作站)启动初始化、开始正式使用AP传送数据帧前,要经过三个阶段才能够接入(802.11MAC层负责客户端与AP之间的通讯,功能包括扫描、接入、认证、加密、漫游和同步等功能):

1)扫描阶段(SCAN)

2)认证阶段 (Authentication)

3)关联(Association)

 

7.1 Scanning

802.11 MAC 使用Scanning来搜索AP,STA搜索并连接一个AP,当STA漫游时寻找连接一个新的AP,STA会在在每个可用的信道上进行搜索。

1)Passive Scanning(特点:找到时间较长,但STA节电)通过侦听AP定期发送的Beacon帧来发现网络,该帧提供了AP及所在BSS相关信息:“我在这里”…

2)Active Scanning(特点:能迅速找到)STA依次在13个信道发出Probe Request帧,寻找与STA所属有相同SSID的AP,若找不到相同SSID的AP,则一直扫描下去..

 

7.2 Authentication

STA找到与其有相同SSID的AP,在SSID匹配的AP中,根据收到的AP信号强度,选择一个信号最强的AP,然后进入认证阶段。只有身份认证通过的站点才能进行无线接入访问。AP提供如下认证方法:

1)开放系统身份认证(open-system authentication)

2)共享密钥认证(shared-key authentication)

3)WPA PSK认证( Pre-shared key)

4)802.1X EAP认证

7.3 Association

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

开放系统认证(Open System Anthentication)和共享密钥认证(Shared Key Authentication),其中开放系统认证是802.11的缺省认证方法。认证类型用MAC帧的认证算法码(authentication algorithmnumber)字段标识。认证算法码字段值为"0"代表开放系统认证,字段值为"1"代表共享密钥认证。MAC帧的认证处理序列号(authentication transaction sequence number)字段用于指示认证过程的当前状态。 开放式系统验证其实可以称为“无验证”,因为实际上没有进行验证   —— 工作站说“请求验证”,而AP也不管是否密钥是否正确,先“答应了再说”,但最终AP会验证密钥是否正确,决定是否允许接入——这种验证方式的AP,往往你随便输入一个密码,都可以连接,但如果密码不正确,会显示为“受限制”。共享密钥验证稍微强大一些,工作站请求验证,而访问点(AP)用WEP加密的质询进行响应。如果工作站的提供的密钥是错误的,则立即拒绝请求。如果工作站有正确的WEP密码,就可以解密该质询,并允许其接入,因此,连接共享密钥系统,如果密钥不正确,通常会立即显示“该网络不存在等提示”。这就是开放系统和共享密钥二种验证方式的区别。

4)IEEE 802.1X+WEP

IEEE802.1x+WEP 基于802.1x 身份认证和WEP 加密。与上述两种认证加密方式相比,只是用户认证过程不同,加密过程完全一致。IEEE 802.1x 协议起源于802.11,其主要目的是为了解决无线局域网用户的接入认证问题。802.1x 协议又称为基于端口的访问控制协议(Port-Based Network Access Control),可提供对802.11 无线局域网和对有线以太网络的验证的网络访问权限。802.1x 协议仅仅关注端口的打开与关闭,对于合法用户接入时,打开端口;对于非法用户接入或没有用户接入时,则端口处于关闭状态。

5)IEEE 802.1X+WEP

802.1 x 采用IETF 的可扩展身份验证协议(Extensible Authentication Protocol,简称EAP)制定而成。然而EAP 只是一个验证框架协议,它只定义了通讯格式、要求与回应、验证成功与失败以及验证方式的类型代码,并不处理验证的细节。EAP 将验证的细节处理授权给一个称为EAP method(一组验证用户身份的规则)的附属协议,而EAP 本身以“验证方式的类型代码”来指定由那个“EAP method”来完成后续的验证过程。

6)WPA-PSK/WPA2-PSK(TKIP or CCMP)

WPA-PSK/WPA2-PSK(TKIP or CCMP)均采用预共享密钥认证WPA(Wi-Fi Protected Access)基于IEEE802.11i 草案三制定;WPA2 则是基于IEEE802.11i 的正式规范制定,相比WPA 具有更高的安全性。根据WiFi 联盟的规定,WPA-PSK 必须支持基于TKIP(Temporal Key Integrity Protocol)的密钥管理和数据加密,而对于WPA 是否支持基于CCMP 的密钥管理和数据加密WiFi 联盟即没有进行规定,也不提供兼容性测试。WiFi 联盟要求WPA2-PSK 必须能够同时支持TKIP 和CCMP,而且这两种方式都必须通过兼容性测试

7)WPA/WPA2(TKIP or CCMP)

为了改善WPA-PSK 或WPA2-PSK(指Personal 的标准,主要用于个人用户)在密钥管理方面的不足,WiFi 联盟提供了WPA/WPA2(   TKIP or CCMP)(指Enterprise 的标准,主要用于企业用户),它们使用802.1x 来进行用户认证并生成用于加密数据的根密钥,而不再使用手工设定的预共享密钥,但加密过程则没有区别。在WPA(或WPA2)中,RADIUS 服务器取代了WPA-PSK或WPA2-PSK 认证过程中的单一密码机制。用户在接入无线网络前,首先需要提供相应的身份证明,通过与用户身份数据库中的认证信息进行比对检查,以确认是否具有权限并向客户端动态分发用于加密数据的密钥。由于采用了802.1X 进行用户身份认证,每个用户的登录信息都由其自身进行管理,有效减少信息泄漏的可能性。并且用户每次接入无线网络时的数据加密密钥都是通过RADIUS服务器动态分配的,攻击者难于获取加密密钥。因此,WPA/WPA2(TKIP or CCMP)极大的提高了网络的安全性,并成为高安全无线网络的首选接入方式。

WPS (Wi-Fi Protected Setup)

类似称呼:QSS / SES / AOSS / EZ-SETUP

为了解决无线安全设置比较繁琐、专业性强的问题

过程:站点通过WPS协商过程获得AP当前的无线安全设置(SSID, 安全模式,密码),正常接入到BSS

2种常见的启动WPS协商的方式:PIN和PBC(PIN:在AP上输入站点的PIN码,PBC:2分钟内分别按下AP和站点上的按钮)

可以让站点快速接入

 

 

 

十二、zigbee

ZigBee的特点是低功耗、高可靠性、强抗干扰性,布网容易。通过无线中继器可以非常方便地将网络覆盖范围扩展至数十倍,因此从小空间到大空间、从简单空间环境到复杂空间环境的场合都可以使用。Zigbee是定位于低传输速率的应用,因此Zigbee显然不适合于高速上网、大文件下载等场合。    

WIFI在开放性区域距离可达305米,在封闭性区域,通讯距离为76米到122米,ZigBee通讯距离从100米到2500米不等,2.4GHZ频段的Zigbee在室外可以达到1200 米距离,在室内通常能达到30-50米的作用距离。

ZigBee具有大规模的组网能力,ZigBee中每个协调点最多可连接255个节点,一个ZigBee网络最多可容纳65535个节点,而每个蓝牙网络只有8个节点。ZigBee网络的拓扑结构主要有三种,星型网、网状(mesh)网和混合网。

ZigBee中,只有PAN协调点可以建立一个新的ZigBee网络。当ZigBeePAN协调点希望建立一个新网络时,首先扫描信道,寻找网络中的一个空闲信道来建立新的网络。如果找到了合适的信道,ZigBee协调点会为新网络选择一个PAN标识符(PAN标识符是用来标识整个网络的,因此所选的PAN标识符必须在信道中是唯一的)。一旦选定了PAN标识符,就说明已经建立了网络,此后,如果另一个ZigBee协调点扫描该信道,这个网络的协调点就会响应并声明它的存在。另外,这个ZigBee协调点还会为自己选择一个16bit网络地址。ZigBee网络中的所有节点都有一个64bitIEEE扩展地址和一个16 bit网络地址,其中,16bit的网络地址在整个网络中是唯一的,也就是802.15.4中的MAC短地址。

 ZigBee网络中传输的数据可分为三类:周期性数据,例如传感器网中传输的数据,这一类数据的传输速率根据不同的应用而确定;间歇性数据,例如电灯开关传输的数据,这一类数据的传输速率根据应用或者外部激励而确定;反复性的、反应时间低的数据,例如无线鼠标传输的数据,这一类数据的传输速率是根据时隙分配而确定的。为了降低ZigBee节点的平均功耗,ZigBee节点有激活和睡眠两种状态,只有当两个节点都处于激活状态才能完成数据的传输。在有信标的网络中,ZigBee协调点通过定期地广播信标为网络中的节点提供同步;在无信标的网络中,终端节点定期睡眠,定期醒来,除终端节点以外的节点要保证始终处于激活状态,终端节点醒来后会主动询问它的协调点是否有数据要发送给它。在ZigBee网络中,协调点负责缓存要发送给正在睡眠的节点的数据包。

433MHz技术使用433MHz无线频段,因此相比于Zigbee,433MHz的显著优势是无线信号的穿透性强、能够传播得更远。但其缺点也是很明显的,就是其数据传输速率只有9600bps,远远小于Zigbee的数据速率,因此433Mhz技术一般只适用于数据传输量较少的应用场合。从通讯可靠性的角度来讲,433Mhz技术,只支持星型网络的拓扑结构,通过多基站的方式实现网络覆盖空间的扩展,因此其无线通讯的可靠性和稳定性也逊于Zigbee技术。另外,不同于Zigbee技术中所采用的加密功能,433Mhz网络中一般采用数据透明传输协议,因此其网络安全可靠性也是较差的。

 

 

十三、DLNA

DLNA 成立于2003 年6 月24 日, 其前身是DHWG (Digital Home Working Group 数字家庭工作组),由Sony、Intel、Microsoft等发起成立、旨在解决个人PC ,消费电器,移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务的无限制的共享和增长成为可能。现在绝大多数的电子制造商都加入了该组织。

 DLNA并不是创造技术,而是形成一种解决的方案,一种大家可以遵守的规范。所以DLNA选择的各种技术和协议都是目前所应用很广泛的技术和协议。在讲DLNA的架构之前先讲一下DLNA规定的设备分类,这些设备就是DLNA标准执行的物理和逻辑对象。

1.Home NetWork Device(HND)。这类设备具有比较大的尺寸及较全面的功能,主要与移动设备区别开来,下属5类设备:

(1)Digital Media Server(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.Mobile Handheld Devices(MHD)手持设备。相比家庭设备,手持设备的功能相对简化一些,支持的媒体格式也会不同。

(1)M-DMS。与DMS类似,如移动电话,随身音乐播放器等。

(2)M-DMP。与DMP类似。比如智能移动电视。

(3)M-DMD。移动多媒体下载设备。如随身音乐播放器,车载音乐播放器和智能电子相框等

(4)M-DMU。移动多媒体下载设备。如摄像设备和手机等。

(5)M-DMC。与DMC类似。P如DA,智能遥控器。 手持设备没有定义M-DMR,因为手持设备会讲究便利性,会附加查找控制功能,要不然就只是普通的移动电视或收音机了。

3.Networked Infrastructure Devices (NID) 联网支持设备。

(1)Mobile Network Connectivity Function (M-NCF)。移动网络连接功能设备。提供各种设备接入移动网络的物理介质。 DLNA的希望是全部实现无线化。

(2)Interoperability Unit (MIU)媒体交互设备。提供媒体格式的转换以支持各种设备需要。

 设想一下这样一个scenario:你下了班回到家,掏出手机拨到家庭模式,然后就在手机上遥控打开了等离子电视和PC,然后把订阅的新闻通过PC下载完成后打到等离子电视上播放。这时手机就是一个DMC/M-DMC,等离子电视是一个DMR,PC就是DMS。然后你手机上收到一张朋友从巴西传来的照片,你看完之后把它同步到PC上存储起来,这样手机现在的身份是M-DMU,然后你把这张图片放到电子相框里面。这个电子相框就是一个M-DMD,相框也有play的能力,所以他又是一个M-DMP。所以说这些设备的功能角色都是不定的,界限也不是那么严格。在DLNA Guidelines v1.0的时候还没有智能手机,后来在v1.5加入了。这个设备分类只是定义了功能,而且功能也会变的。以后还会出其它新设备,像pad,tab,touch各种各样,到时候标准也会变的。

DLNA的架构

DLNA架构是个互联系统,因此在逻辑上它也类似OSI七层网络模型。DLNA架构分为如下图7个层次:

(1) NetWorking Connectivity 网络互联方式:包括物理连接的标准,有有线的,比如符合IEEE802.3标准的Ethernet,;有无线的 ,比如符合IEEE802.11a/g标准的WiFi,能做到54Mbps,蓝牙(802.15)等,技术都很成熟。现在OFDM和MIMO(802.11n)已经能做到300Mbps了,早就超过比较普及的100Mbps的Ethernet了,只不过产品还没有普及,以后肯定会用到。

(2) NetWorking Stack 网络协议栈:DLNA的互联传输基本上是在IPV4协议簇的基础上的。用TCP或者UDP来传都可以。这一层相当于OSI网络层。

(3)Device Discovery&Control 设备发现和控制。这个层次是比较essential的,是DLNA的基础协议框架。DLNA用UPnP协议来实现设备的发现和控制。

 

 

十四、UPnP协议

UPnP,英文是Universal Plug and play,翻译过来就是通用即插即用。简单的来说,UPnP 最大的愿景就是希望任何设备只要一接上网络,所有在网络上的设备马上就能知道有新设备加入,这些设备彼此之间能互相沟通,更能直接使用或控制它,一切都不需要设定。

DNLA主要是在推UPnP。UPnP 以 Internet 标准和技术(例如 TCP/IP、HTTP 和 XML)为基础,使这样的设备彼此可自动连接和协同工作,从而使网络(尤其是家庭网络)对更多的人成为可能。UPnP的另外一个作用是给家庭网内的devices做自动的网络地址转换NAT和端口映射(Port Mapping),因为家庭网络里面没有那么多IP,所有的devices可能都要通过同一个ip出去。转换映射之后,家庭网络内外的devices就可以通过internet自由地相互连接,而不受内网地址不可访问的阻碍。

UPnP在控制指针和被控制设备之间提供通讯功能。而网络介质、TCP/IP协议、HTTP仅提供基本的连接和IP地址分配。整个工作过程需要处理六个方面的内容,即设备寻址、发现设备、对设备的描述、设备控制、设备事件、设备表达。

 

2 UPnP的结构规范

2.1 UPnP的基本组件

服务、设备和控制点是UPnP网络的基本组件。其组件图如图1所示:

● 服务(Service)

在UPnP网络中,最小的控制单元就是服务。服务描述的是设备在不同的情况下的活动和设备的状态。例如,时钟服务可以表述为时间变化(状态变化)、当前的时间(时钟的状态)以及设置时间和读取时间两个活动,通过这两个活动.你就可以控制服务。

● 设备(Device)

UPnP网络中定义的设备具有很广泛的含义,各种各样的家电、电脑外设、智能设备、无线设备、个人电脑等等都可以成为其中一员。一个UPnP设备可以是多个服务的载体和多个子设备的嵌套集。例如一台印表机有提供列印这样的服务;一台电视有提供收讯的服务,这些都属于设备。

● 控制点(ControlPoint)

在UPnP网络中,控制点指的是可以发现并控制其它设备的控制设备。在UPnP网络中,设备可以和控制点合并。也就是说,同一个设备,可以同时具有设备的功能和控制点的功能,即可以作为设备提供服务,也可以作为控制点发现和控制其它设备。

2.2 UPnP部分术语

● UUID

UUID含义是通用唯一识别码(Universally Unique Identifier),其目的是让分布式系统中的所有元素,都有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。其格式为xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),分别为当前日期和时间,时钟序列,全局唯一的IEEE机器识别号,如果有网卡,从网卡mac地址获得,没有网卡以其他方式获得。

● UDN

单一设备名(Unique Device Name),基于UUID,表示一个设备。在不同的时间,对于同一个设备此值应该是唯一的。

● URI

Web上可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通用资源标志符(Universal Resource Identifier, 简称"URI")进行定位。 URI一般由三部分组成:访问资源的命名机制;存放资源的主机名;资源自身的名称,由路径表示。考虑下面的URI,它表示了当前的HTML 4.0规范:http://www.webmonkey.com.cn/html/html40/它表示一个可通过HTTP协议访问的资源,位于主机www.webmonkey.com.cn上,通过路径“/html/html40”访问。

● URL

URL是URI命名机制的一个子集,URL是Uniform Resource Location的缩写,译为“统一资源定位符”。通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种www客户程序和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。

● URN

URN:URL的一种更新形式,统一资源名称(URN, Uniform Resource Name)。唯一标识一个实体的标识符,但是不能给出实体的位置。标识持久性 Internet资源。URN可以提供一种机制,用于查找和检索定义特定命名空间的架构文件。尽管普通的URL可以提供类似的功能,但是在这方面,URN 更加强大并且更容易管理,因为 URN 可以引用多个 URL。

 

2.3 UPnP设备协议栈

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.1 SSDP协议

简单服务发现协议(Simple Service Discovery Protocol:SSDP),内建在HTTPU/HTTPMU 里,定义如何让网络上有的服务被发现的协议。包括控制点如何发现网络上有哪些服务,并取得这些服务的资讯,还有装置本身宣告他提供哪些服务。该协议运用在UPnP工作流程的设备发现部分。

2.3.2 SOAP协议

简易物件存取协议(Simple Object Access Protocol:SOAP)定义如何使用XML与HTTP来执行远端程序呼叫(Remote Procedure Call)。包括控制点如何发送命令消息给设备,及设备接收到命令消息后如何发送响应消息给控制点。该协议运用在UPnP工作流程的设备控制部分。

2.3.3 GENA协议

一般事件通知架构(Generic Event Notification Architecture:GENA)定义在控制点想要监听设备的某个服务状态变量的状况时,控制点如何传送订阅讯息并如何接收通知讯息用的。该协议运用在UPnP工作流程的事件订阅部分。

 

2.4 基于XML的UPnP描述

2.4.1 XML简介

XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。XML是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

与HTML类似,XML描述的内容封装在开始标签<标签名>和结束标签</标签名>之间,一对标签及其封装的内容,如<movie>Gone with the Wind</movie>,被称为一个元素。元素可以嵌套,一个XML文档正是由许多这样的元素嵌套而成的。元素可以有属性,可赋予属性值。

在实际应用中,人们常常根据需要自定义元素名和属性名,这些名字具有明确易懂的含义。但是由于应用的繁多,所定义的名字很有可能发生冲突,为此XML引入了命名空间(namespace)的概念,它给出元素名和属性名定义的来源处,允许不同应用使用相同的名字,不致引起混淆。

XML命名空间采用“两段式命名法”定义所谓的“合法名称”,例如“学生:姓名”。其中第一段是指代特定命名空间的“命名空间前缀”,第二段是元素或属性的名字,两段之间用西文冒号“:”分隔。需要注意的是,“学生:姓名”和“班主任:姓名”虽然名称都是“姓名”,但却是两个不同的元素名,因为它们分别由“学生”和“班主任”命名空间定义。

命名空间用URI标识,具有唯一性和持久性,所谓命名空间前缀就是命名空间的缩写表示,XML采用下述“命名空间声明"来绑定命名空间前缀和命名空间:

xmlns:【命名空间前缀】=【命名空间名】

其中,xmlns就是XML命名空间的缩写。例如:

xmlns:学生=http://www.xml.net.cn/学生

xmlns:班主任=http://www.xml.net.cn/班主任

分别定义了命名空间前缀“学生”和“班主任”。

其后,XML就可以用命名空间和名的组合,即合法名称来无岐义地表示不同应用中的元素名和/或属性名,给出元素的描述和属性值的描述。例如:

<?xml version=”1.0”encoding=”GB23 12”?>

<学生:学生xmlns:学生=http://www.xml.net.cn/学生>

<学生:姓名>李明</学生:姓名>

<学生:班级学生:数字类型=”中文”>三年级二班</学生:班级>

<学生:住址学生:数字类型=”阿拉伯”>135楼210室</学生:住址>

</学生:学生>

上述XML文档描述了关于学生的相关信息,所采用的元素名和属性名均源自“学生”命名空间。上面的描述使用了“学生”命名空间定义的4个元素名:学生、姓名、班级和住址,1个属性名:数字类型,并对于“学生:班级”元素的“数字类型”属性赋予属性值“中文”,对于“学生:住址"元素的“数字类型"属性赋予属性值”阿拉伯”。

类似地,可以用XML文档描述关于班主任的相关信息,只是需采用“班主任“命名空间定义的名字。只要不被其他命名空间声明所覆盖,命名空间声明对于它所说明的所有元素以及这些元素包含的所有内容都有效,这就是所谓命名空间的作用域范围。

2.4.2 TV设备的设备描述编写

在UPnP协议中,要实现控制点和设备之间的互相通信,设备的描述文件起着很重要的作用。对于设备的描述文件,是以XML文件形式存在的。在论文的第五节,我们会讨论TV设备的代码实现,在这我们就对TV设备的设备描述文件编写进行介绍。

一般来说,设备描述都是基于UPnP论坛上己定义的模板,这些标准化的模板提供一系列基本的服务和预定义的设备类型,厂商可以在其中作出自己的扩充。对于后面开发的TV设备,因为只是为了阐述UPnP协议的实现,所以自行开发其设备模板及其XML文档,以使其最简化。

根据UPnP规范,包括两个主要部分。第一部分包括根设备类型、特定厂商、制造商信息,如模块名称和编号、序列号、制造商名称、特定厂商网站URL等。第二部分包括设备所支持服务的信息。对于第一部分,为了使设备描述文件更简单,为简单计,省略了厂商名、厂商网址等可选元素,这些省略并不会对系统运行产生任何影响。下面就是TV设备的设备描述文件:

基本信息编写

● 设备类型

设备类型元素的格式如下:

<deviceType>命名空间:设备类型:版本号</deviceType>

对于基于标准设备模板的设备,描述文件中这一属性为:

<...urn:schemas-upnp-org...>

我们把设备类型叫做tvdevice,版本号定为1,于是我们得到了一个完整的设备类型元素:

<deviceType>urn:schemas-upnp-org:device:tvdevice:1</deviceType>

● friendlyname

我们为设备取了一个相对简单的用户友好的别名:UPnP Television Emulator,于是得到了<friendlyname>元素:

<friendlyName>UPnP Television Emulator</friendlyName>

● UDN

接下来需设计的是唯一设备名字(UDN),这是该实例的唯一标识符。为了保持唯一性,采用设备的名字和设备网卡的MAC地址组合而成。假设MAC地址为1234567890001,就可以把UDN元素写为:

<UDN>uuid:Upnp-TVEmulator-1_0-1234567890001</UDN>

设备服务编写

设备所含服务是设备描述的主体部分,它们体现为设备的功能。在设计时,可根据设备的功能映射确定可提供给控制点的服务。在这里,TV设备只定义一个control服务。

control服务负责处理TV的开关(power),调整音量(volume)及设置频道(channel),其在设备描述文档中的第一个元素是serviceType,其命名原则与deviceType类似,遵从一定的约定,定义为:

<serviceType>urn:schemas-upnp-org:service:tvcontrol:1</serviceType>

类似地,<serviceId>元素定义为:

<serviceId>urn:upnp-org:serviceId:tvcontrol1</serviceId>

另一需要定义的是服务描述文档的地址<SCPDURL>元素,这个元素非常重要,控制点就是通过这个地址来获取后续的服务描述文档。由于本设备服务描述文档与设备描述文档位于同一目录,名为tvcontrolSCPD.xml,因此该元素为:

<SCPDURL>/tvcontrolSCPD.xml</SCPDURL>

TV控制相关服务最后两个子元素是控制URL和事件URL。这两个URL是控制点发送动作请求和订阅请求的URL。定义为:

<controlURL>/upnp/control/tvcontrol1</controlURL>

<eventSubURL>/upnp/event/tvcontrol1</eventSubURL>

 

3 UPnP实现的工作流程

 

稍微了解有哪些通讯协议后,我们来看UPnP是如何运作的。图4是UPnP的运作流程,我们先介绍各部分在做什么,再做详细介绍:        

0. 控制点跟设备都先取得IP地址才能做之后的沟通。

1. 控制点寻找整个网络上的UPnP设备,而设备同时也要宣告他本身的存在。

2. 控制点取得设备的描述,这包括设备提供什么样的服务。

3. 控制点发出动作信息(对设备操作的命令信息)给设备。

4. 控制点监听设备的状态,当状态改变时做出相应的处理动作。

5. 控制点利用HTML界面来控制设备和监看设备状态。

3.1 寻址(Addressing)

UPnP网络的基础是TCP/IP协议族,这就决定了每一个UPnP组件(设备和控制点)必须分配一个IP地址。一个UPnP设备寻址的一般过程是:首先向 DHCP服务器发送DHCPDISCOVER消息,如果在指定的时间内,设备没有收到DHCPOFFERS回应消息,设备必须使用 Auto-IP完成IP地址的设置。在选中一个地址之后,设备测试此地址是否在使用。为了测试选择的地址是否未被占用,设备必须使用地址分辨协议(ARP)。

使用Auto IP的设备必须定时检测DHCP服务器是否存在,若存在,设备必须释放Auto IP分配的地址,此时设备必须取消所有的广告消息并重新发出新的。

一个设备可以使用UPnP之外的更高层的协议,这些协议将为设备使用友好的名称。在这种情况下,将这些友好的主机名解析为IP地址就很必要了,DNS通常是用来实现此功能的。使用此功能的设备可能要包含一个DNS客户端,而且支持动态的DNS注册,通过注册将它自己的名字加入到地址分布图中。

3.2 发现(Discovery)

一旦设备连接到网上并且分配了地址,就要进行发现的操作了。设备发现是UPnP网络实现的第一步。设备发现是由简单发现协议SSDP(Simple Service Discovery Protocol)来定义的。在设备发现操作之后,控制点可以发现感兴趣的设备,并使得控制点获得设备能力的描述,同时控制点也可以向设备发送命令,侦听设备状态的改变,并将设备展示给用户,即是描述、控制、监听、展示的基础。

当一个设备加入到网络中,设备发现过程允许设备向网络上的控制点告知它提供的服务。当一个控制点加入到网络中时,设备发现过程允许控制点寻找网络上感兴趣的设备。在这两种情况下,基本的交换信息就是发现消息。发现消息包括设备的一些特定信息或者某项服务的信息,例如它的类型、标识符、和指向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地址(在设备描述的服务元素controlURL子元素部分提供)发送一个适当的控制消息。而服务则会对此动作做出响应,返回相关结果或错误。动作的效果可以通过改变描述服务运行时状态的变量进行建模。在这些状态变量改变时,事件将被发布到所有相关的控制点。

控制点可能会轮询服务的状态变量值以获得状态变量的当前值。与发出一个动作的过程相似,控制点向服务的控制URL发送一个适当的查询消息。而服务则返回相应的变量值;每个服务必须保持状态表的一致性,以便控制点能够轮询并接收到有意义的值。

3.5 事件(Eventing)

正如描述部分所述,一个即插即用服务描述包括服务响应的动作列表和运行时描述服务状态的变量列表。如果一个或多个状态变量可以被事件触发,服务将会在这些变量发生变化时发布更新,控制点可以订阅以获得此信息。通过这一部分,发布者指事件的来源(通常为设备服务),订阅者指事件目的地(通常为控制点)。

如图8所示,要订阅事件,订阅者可发送一条请求订阅消息。如果发布者收到此消息,它将以这个订阅的持续时间作为响应。要保持订阅,订阅者必须在订阅过期之前进行续订。当订阅者不再需要发布者发送的事件时,订阅者应当取消其订阅。

发布者通过发送事件消息提醒订阅者状态变量改变。事件消息包含多个状态变量名称和这些变量的当前值,以XML表示。在订阅者第一次订阅时,需要发送一个专门的初始化事件消息。该事件消息包含所有事件变量的名称和值,并且允许订阅者初始化其服务状态模型。为了支持多个控制点,在动作生效后所有订阅者均会收到通知。由此,将向所有订阅者发送全部事件消息,订阅者会收到所有事件触发变量的事件消息(不只是一部分)。不管状态变量因何种原因发生改变(无论为了响应所要求的动作,还是由于服务模拟的状态发生变化)均会发送事件消息。 事件消息使用HTTP协议传送,事件详细定义在通用事件通知结构(General Event Notification Architecture)协议中。

3.6 展示(Presentation)

在控制点发现设备和取得设备描述之后,控制点即准备开始提供展示。如果设备拥有进行展示的URL,那么控制点就可以通过此URL取得一个页面,在浏览器中加载该页面,并根据页面功能,支持用户控制设备和/或浏览设备状态。每一项完成的程度取决于展示页面和设备的具体功能。

设备表征包含在设备描述的presentationURL字段。设备表征可以完全由设备制造商提供,它采用HTML页的形式,使用HTTP进行发布。图9画出了展示流程的示意图。

4 UPnP协议消息分析

4.1 发现设备的消息分析

UPnP协议的发现过程是通过SSDP协议来实现的,SSDP消息至少包含以下四部分:

·服务类型URI

用来标识一种服务,如宣告消息中的NT字段,搜索消息中的ST字段。

·唯一的服务名字(USN)URI

USN用来区分同一服务类型的不同的具体服务。

·有效期信息

指明SSDP客户在其缓存中保存该服务信息的时间,如宣告消息中的

CACHE.CONTROL字段。

·位置信息

服务所在位置,如宣告消息中的LOCATION字段。

4.1.1 SSDP发现请求

SSDP发现请求用来寻找希望得到的设备及其服务。它使用SEARCH消息,用URI ssdp:discover标识。SEARCH消息必须包括一个ST(搜索类型)头,还可能含有消息体。ST头用来指明希望发现的设备及服务类型。目前只指定了在多播UDP中使用该请求,以后可能扩展到TCP。

只有那些与ST匹配的服务才可能通过SSDP端口给出响应,响应应该在AL头中表示出服务的地址,同时,响应中还要包括缓存控制信息:有效期。没有缓存控制信息的响应将被视作无效响应。由4.1.1知,本例没有设备的响应消息。

以下是TV控制点发出的发现设备请求消息:

从ST头可以知道,TV控制点搜索的设备是tvdevice,设备号为1。其中HOST由互联网编号分配组织(IANA)为SSDP保留的多播信道和端口。必须是239.255.255.250:1900。MAN是强制扩展声明标头,一个含有强制扩展声明的HTTP请求被称作强制请求,在这个消息中使用强制扩展的用意在于确定接受方是否理解和支持ssdp:discover,接受方如果支持ssdp:discover,将会对扩展声明进行解析,否则返回出错信息。

4.1.2 SSDP存在宣告

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 获取设备描述的请求消息

控制点是通过发送HTTP GET消息来请求获得设备描述的。GET指出了设备描述的路径,此处为设备描述URL(发现消息中的LOCATION标头);HOST指出了设备描述URL的域名或IP地址及可选端口部分。

4.2.2 TV设备的设备描述消息

空白处前面的数据为HTTP消息头,描述了XML描述文件的一些基本信息,空白处下面的数据就为XML文件的具体内容,具体的参数内容详见图3。

4.3 事件数据包分析

4.3.1 订阅请求的消息分析

对于设备中的每项服务,描述消息均包含一个事件触发URL(设备描述中服务元素的eventSubURL子元素)和UPnP服务标识符(设备描述中服务元素的serviceId子元素)。为订阅特定服务的事件,订阅消息将被发送到该服务的事件触发URL。(注意,事件触发URL可能相对于基本URL。)消息中含该服务的标识符以及事件消息交付URL。订阅消息还可能包含所要求的订阅持续时间。

由上图可知,本订阅消息订阅的是TV的control服务,CALLBACK指出了回送的路径,即TV控制点的IP和端口,NT指出了TV控制点想接受的事件消息,HOST指出了事件触发URL(设备描述中服务元素的eventSubURL子元素)的域名或IP地址和可选端口组件。TIMEOUT指出了直到订阅期满所要求的持续时间。

由上图知,响应消息返回了一个用于本次订阅的订阅号SID,此SID在订阅期间必须是唯一的。DATE指出了响应生成的具体时间。

4.3.2 续订请求的消息分析

为续订特定服务的事件,续订消息将被发往该服务的事件触发URL。然而,与最初的订阅消息不同,续订消息既不包含服务标识符也不包含事件消息交付URL,而是包含由发布者(设备)分配的订阅标识符,为续订提供明确的参考。与订阅消息相同,续订消息还可能包含所要求的订阅持续时间。

由上图知,TV控制点直接通过SID完成对tvcontrol的续订任务。

4.3.3 NOTIFY事件通知消息分析

当设备的服务状态变量有变更时,设备会发布其状态变量变更的事件消息。对于控制点而言,在完成订阅或者续订了某项服务之后,它就会收到关于此服务的状态变量变更的事件消息。

以下是设备发送的关于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为例):

 

 

前一部分是控制点发送的控制请求消息,采用POST方法,消息体为XML文件形式。在标头部分,HOST指出了控制此服务的域名或IP地址、以及URL可选端口组件(设备描述服务元素的controlURL子元素);SOAPACTION 是SOAP协议规定使用的标头,由调用的服务类型、散列符号和动作名称组成,均用双引号括起来,PowerOn为要发送的动作名称。在消息体部分,Envelope的“http://schemas.xmlsoap.org/soap/envelope”用来表示SOAP使用了HTTP扩展框架;Body指出了具体的控制动作(PowerOn)。

后一部分是TV设备回送的响应消息,同样消息体以XML文件形式回复,回复消息表明了Power在动作执行后的当前值。在标头部分,DATE指出了响应生成的具体时间;在消息体的BODY部分,设备返回了被操作的服务状态变量(Power)在执行动作(PowerOn)后的当前值。

● 事件通知的消息分析

在控制点发送的动作消息,设备执行了之后,除了发送相应的响应消息,设备还会采用GENA协议发送一个事件通知消息给控制点,该消息会经由miniserver模块处理,然后由回调函数TvCtrlPointCallbackEventHandler()更新相应的状态变量表。

在数据包的消息体部分,返回了Power服务变量的当前值为1,即PowerOn的状态。

4.4.2 查询变量的消息分析

除了向设备的服务发出动作,控制点还可以对服务进行轮询,以通过发送查询消息获得状态变量值。查询消息只能查询一个状态变量,必须发送多个查询消息以查询多个状态变量。此查询消息与该服务的事件(如果有)相分离。以下是TV例子所发送的查询消息和响应消息:     

与前面的动作调用一样,前一部分是发送的查询请求消息,在标头部分,SOAPACTION中的QueryStateVariable表明是查询信息,这与动作调用区分开来;在消息体的BODY部分,指明了查询的服务状态变量(Power)及其所在的服务(control)。

后一部分是TV设备返回的响应消息,在消息体的BODY部分,返回了服务状态变量Power的当前值为1。

 

 

十五、SSDP

简单服务发现协议(SSDP,Simple Service Discovery Protocol)是一种应用层协议,是构成通用即插即用(UPnP)技术的核心协议之一。它提供了在局部网络里面发现设备的机制。控制点(也就是接受服务的客户端)可以通过使用简单服务发现协议,根据自己的需要查询在自己所在的局部网络里面提供特定服务的设备。设备(也就是提供服务的服务器端)也可以通过使用简单服务发现协议,向自己所在的局部网络里面的控制点声明它的存在。

简单服务发现协议是在HTTPU和HTTPMU的基础上实现的协议。按照协议的规定,当一个控制点(客户端)接入网络的时候,它可以向一个特定的多播地址的SSDP端口使用M-SEARCH方法发送“ssdp:discover”消息。当设备监听到这个保留的多播地址上由控制点发送的消息的时候,设备会分析控制点请求的服务,如果自身提供了控制点请求的服务,设备将通过单播的方式直接响应控制点的请求。 类似的,当一个设备接入网络的时候,它应当向一个特定的多播地址的SSDP端口使用NOTIFY方法发送“ssdp:alive”消息。控制点根据自己的策略,处理监听到的消息。考虑到设备可能在没有通知的情况下停止服务或者从网络上卸载,“ssdp:alive”消息必须在HTTP协议头CACHE-CONTROL里面指定超时值,设备必须在约定的超时值到达以前重发“ssdp:alive”消息。如果控制点在指定的超时值内没有再次收到设备发送的“ssdp:alive”消息,控制点将认为设备已经失效。

当一个设备计划从网络上卸载的时候,它也应当向一个特定的多播地址的SSDP端口使用NOTIFY方法发送“ssdp:byebye”消息。但是,即使没有发送“ssdp:byebye”消息,控制点也会根据“ssdp:alive”消息指定的超时值,将超时并且没有再次收到的“ssdp:alive”消息对应的设备认为是失效的设备。在IPv4环境,当需要使用多播方式传送相关消息的时候,SSDP一般使用多播地址239.255.255.250和UDP端口号1900。根据互联网地址指派机构的指派,SSDP在IPv6环境下使用多播地址FF0X::C,这里的X根据scope的不同可以有不同的取值。

如果你想让你的软件能自动发现 LAN 上面其它正在执行相同软件的机器,并在连上网络时,自动通知其它机器,那么 SSDP 这个通讯协议能帮助你。

SSDP -- Simple Service Discovery Protocol,如其名称,在 LAN 环境下提供 service 的搜寻/发现的服务。应用程序可以透过该协议,向 LAN 里面的其它机器广播应用程序所提供的 service,也可以透过 SSDP 搜寻网络上所有的特定 service。 SSDP 的功能其实就和 DNS 差不多,用以查询 service 和地址之间的对应关系。和 DNS 不同的是, SSDP 不需要集中化的固定 server,而是透过多播和P2P的方式运作。

SSDP 其实不复杂,可以想成是在多播的 UDP 上执行 HTTP protocol (HTTPU),而一般的 HTTP protocol 是使用 TCP。因此,你可以透过 multicasting 的方式,把 HTTP 的 request 送到 LAN 里的每一台执行 SSDP 的机器。收到 request 的 SSDP service 若有足够的信息,则响应该 request,反之则丢掉该 request 不回应。因此, SSDP 不需要一个固定的 server。

SSDP 有两个重要的 request,一个是 NOTIFY,另一个则是 MSEARCH。 NOTIFY 是向其它机器广播服务的项目和地址,你可以透过发送 NOTIFY 通知 LAN 里所有机器,告知你所提供的服务项目。而 MSEARCH 则是用来寻问其它机器,是否有提供特定的 service,以取得这些 service 的地址。因此,为了得知其它机器提供的 service,应用程序必需收集 NOTIFY,并/或送出 MSEARCH request。实作这两者都需要花一点时间,而且,你必需等待其它机器送 NOTIFY 或 MSEARCH 的回应。因此,使用上很没有效率。 miniSSDPd 是一个独立的 daemon,随时帮你收集透过 LAN 送来的 NOTIFY,并记录下来。因此,我们可以直接向 miniSSDPd 查询,就能随时取得最新的信息,不用等待。

如何广播你的服务?

当一个 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/unknown UPnP/1.0 dcports/1.0

LOCATION: http://example.net/test

NTS: ssdp:alive

基本上就是一个 HTTP request,只是 command 为 NOTIFY 而非 GET/POST/...。将这个 request 透过一个 UDP 的 socket,传送到 239.255.255.250:1900 这个 multicast IP 地址即可。

import socket

 

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 是告知其它机器,我有提供 IGD 的 service。但通常,我们会定义自已的 service,这时你必需修改 NT 和 USN 字段。 NT 是 service type,你可以定义自已的 service type,如 urn:my-company-domain:service:my-service:1 。 USN 则是一个代表该 service 的 unique number,你可以使用 uuidgen 为你的服务产生一个 USN。而 LOCATION 字段则是你的 service 的地址,你可以填入你的URL或 IP:port。需要使用该服务的程序,就会使用链接该地址。

这个 request 必需定时发送,你必需在 max-age 到达之前,重新传送数次,以确保其它机器知道你的服务还在在线。

  

 

 

十六、网络安全的四种威胁

1.截获(比如抓包抓到了你传输的消息)
2.篡改(截获消息然后修改掉再发送,破坏消息的完整性)
3.伪造 (比如非法源站冒充合法源站给目的站发消息)
4.拒绝服务(向目的站发起大量的恶意连接或者发送大量无意义消息使得服务瘫痪)

 

 

十七、两种加密方式

1.对称加密
对称加密就是加密秘钥和解密秘钥是相同的,其中具有代表性的就是DES算法。DES算法是公开的,但是秘钥是保密的,而保密性是由秘钥决定的。

2.非对称加密
非对称加密就是加密秘钥和解密秘钥是不一样的。其中公钥、加密算法、解密算法都是公开的,而私钥是保密的,非对称加密的保密性是由私钥来保障的。

 

posted @ 2016-08-06 00:25  liangww  阅读(1581)  评论(0编辑  收藏  举报