应用层的主要任务:
解决通过进程的交互来实现特定网络应用的问题;
常见的网络应用:
客户进程向服务器进程请求服务。服务器收到请求后向客户提供服务
客户是服务请求方,服务器是服务提供方
服务器总是处于运行状态,并等待客户的服务请求。服务器具有固定端口号(如HTTP服务器默认端口号80),而运行服务器的主机也有固定的IP地址;
C/S是因特网上传统的,最成熟的方式,很多熟悉的网络应用采用的都是C/S方式,包括www万维网,电子邮件,文件传输FTP等;
C/S方式的应用服务是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上,由于一台服务器要向多个客户机提供服务,在C/S应用中,常会出现服务器计算机跟不上客户机请求的情况
为此常用计算机集群或服务器场构建一个强大的虚拟服务器 ;
在P2P中,没有固定的服务请求者和服务器提供者,分布在网络边缘各端系统中的应用进程是对等的。被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者;
如E的p2p进程正在从F下载文件,同时也为D的p2p进程提供下载服务;
目前,在因特网流行的P2P应用有:P2P文件共享、即时通信、P2P流媒体,分布式存储等;
基于P2P的应用是服务分散型的,因为服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中,这些计算机并不为服务提供商所有,而是个人计算机;
P2P的特性之一就是可扩展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也是服务的提供者,系统性能不会因为规模的增大而降低;
P2P具有成本上的优势,通常不需要庞大的服务器设施和带宽,为了降低成本,服务提供商将P2P方式用于应用的兴趣越来越大;
作用:
配置主机并能够使主机访问Web服务器, 需要给各主机配置正确的ip地址、子网掩码、默认网关;
假如给网络中添加一台DHCP服务器,在DHCP服务器中设置好可以为其他主机配置的网络配置信息,网络中各主机开机后自动启动DHCP程序,向DHCP服务器请求自己的网络配置信息,各主机就都可以从DHCP服务器获取网络配置信息,而不用手动配置;
DHCP的工作过程:
在DHCP服务器上运行DHCP服务器进程,在用户主机上运行DHCP客户进程;
DHCP使用运输层的UDP协议所提供的服务,也就是说DHCP报文在【运输层】会被封装成UDP数据报;
DHCP服务器使用的UDP端口号为67,DHCP客户使用的端口是68(熟知端口号)
封装了DHCP报文的UDP数据报在网络层被封装为IP数据报,再根据所使用的网络接口封装成相应的链路层的帧进行发送;
交互过程:
启用主机的DHCP后,DHCP客户将广播发送DHCP发现报文,该报文的源ip地址为0.0.0.0因为主机目前还未分配ip地址,目的地址为广播地址255.255.255.255,之所以使用广播发送,因为主机并不知道网络中有哪几个DHCP服务器以及DHCP服务器的ip地址是什么;
因为是广播发送,网络中的所有设备都会收到该数据报,并对其层层解封,DHCP并没有监听该数据报的目的端口号67的进程,所以丢弃该数据报;
而DHCP服务器,DHCP服务进程会接收该DHCP发现报文并做出响应;
DHCP发现报文中封装有事物ID和DHCP客户端的MAC地址;
DHCP服务器收到发现报文后,根据其中封装的DHCP客户端的MAC地址来查找自己的数据库,查看是否有针对该MAC地址的配置信息,如果有则使用这些配置信息来构建并发送提供报文,如果没有则采用默认信息来构建并发送DHCP提供报文,封装该ip数据报的源ip地址为DHCP服务器的IP地址,目的地址仍未广播地址(因为主机目前还没有配置ip地址)为了使主机可以收到,只能发送广播地址;
所有的设备都会收到该ip数据报,并对其层层解封,解封出封装有DHCP提供报文的UDP用户数据报,对于DHCP服务器,其应用层没有监听目的端口号68的进程,因此丢弃该报文;
DHCP客户主机应用层运行着DHCP客户进程,会接收提供报文并做出处理,DHCP会根据事物ID是否相同来判断该报文是否是自己请求的报文,是则接收报文否则丢弃。
如果事物ID和之前发送的发现报文中的事物ID相等,就将发现报文中的配置信息…
路由器不转发广播报文—防止广播风暴
解决方法:给路由器配置DHCP服务器的ip地址,使之成为DHCP中继代理;
DNS 是计算机域名服务器 (Domain Name Service) 的缩写,它是由解析器以及域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,而IP地址不一定只对应一个域名。
在浏览器输入域名,主机先在DNS高速缓存中查找该域名对应的IP地址;
如果没找到,则会向【网络中的】某台DNS服务器查询(主机发送UDP请求报文,封装成UDP数据报,目的端口号53,再封装成IP数据报,发送到DNS服务器);
当DNS服务器收到查询报文后(解封装,由端口号53找到服务器进程),会查询存有域名和IP地址映射的数据库,将查询结果返回给主机(响应报文,UDP数据报→IP数据报)
主机通过IP地址来访问Web服务器;
不能,英特网规模大,会造成服务器超负荷。
采用了分布式域名系统,使大多数域名都在本地解析,仅少量解析需要在英特网,所以效率较高;
由于是分布式系统,即使单个服务器出现故障,也不会妨碍整个系统的正常运行 ;
域名的结构由若干个分量构成,各分量之间用“点”隔开,分别代表不同级别的域名;
不区分大小写;
级别低的写在左边,级别高的写右边;
域名系统不规定一个域名需要包含多少个下级域名,也不规定每一级域名代表什么意思;
注意:
域名只是逻辑概念,并不代表计算机所在的物理地点;
不能将所有的信息都储存在一台域名服务器中,DNS使用分布在各地的域名服务器来实现域名到IP的转换;
根域名服务器:
根域名服务器是最高层次的域名服务器,每个根域名服务器都知道所有的顶级域名服务器的域名及IP地址,英特网共有13个不同IP地址的根域名服务器分布于世界各地,虽然视为一个服务器,但实际上是服务器集群。
当本地域名服务器向根域名服务器发出请求时,路由器会把查询请求报文转发到离这个DNS客户最近的一个根域名服务器。
根域名服务器通常并不直接对域名进行解析,而是返回该域名所属顶级域名的顶级域名服务器的IP地址;
顶级域名服务器:
负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时就给出相应的回答(可能是最后的结果,也可能是下一级权限域名服务器的IP地址);
权限域名服务器:
这些权限域名服务器负责管理某个区的域名,每个主机的域名都必须在某个权限域名服务器注册登记,因此权限域名服务器知道其管辖的域名和IP的映射关系,权限域名服务器还知道其下级域名服务器的地址;
本地域名服务器:
本地域名服务器不属于上述服务器的等级结构。当一个主机发出DNS请求报文时,这个报文就首先被送往该主机的本地域名服务器。本地域名服务器起着代理的作用,会将该报文转发到上述的域名服务器的等级结构中。每一个英特网的提供者如一个大型都可以拥有一个本地域名服务器,它也成为默认域名服务器。本地域名服务器的IP地址需要直接配置在需要域名解析的主机中。
递归查询:
主机先向本地域名服务器进行递归查询,
本地域名服务器收到递归查询的委托后,
采用递归查询的方式向某个根域名服务器查询,
根域名服务器收到递归查询的委托后,采用递归查询的方式向某个顶级域名服务器查询,
顶级域名服务器收到递归查询的委托后,也采用递归查询的方式向某个权限域名服务器查询,当查询到域名所对应的IP地址后,查询结果会在之前委托的各域名服务器之间传递,最终传回用户主机;
缺点:
递归查询对于被查询的域名服务器负担太大;
迭代查询:
主机先向本地域名服务器进行迭代查询,
本地域名服务器采用迭代查询,先向某个根域名服务器查询,根域名服务器告诉本地域名服务器 下一次应查询的顶级域名服务器的IP地址;
本地域名服务器又向顶级域名服务器进行迭代查询,顶级域名服务器告诉本地域名服务器,下一次应查询的权限域名服务器的IP地址;
本地域名服务器向权限域名服务器进行迭代查询,权限域名服务器告诉本地域名服务器所查询的域名的IP地址;
本地域名服务器把查询结果告诉主机 ;
实际上使用的查询方式:
从请求【主机到本地域名服务器】的查询使用递归查询,其余使用迭代查询;
高速缓存:
为了提高DNS查询效率,并减轻根域名服务器的符合和减少DNS查询报文数量,在域名服务器中广泛使用了高速缓存,高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录;
如果不久前有用户查询过y.abc.com的地址,则本地域名服务器的高速缓存中英寸有该域名对应的IP地址
当主机向本地域名服务器递归查询该域名时,本地域名服务器将不再向根域名服务器迭代查询,而是直接将高速缓存中存放的 该域名对应IP地址返回给主机;
由于域名和IP地址的映射并不是永久不变,为保持缓存中的内容正确,域名服务器会设置计时器并删除超时内容;
不止在本地域名服务器需要高速缓存,在主机中也需要缓存,主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护自己的高速缓存,并且只在缓存中找不到域名时,才想域名服务器查询。
文件传送协议FTP是英特网上使用最广泛的文件传送协议;
FTP提供交互式的访问,允许客户指明文件的类型与格式(是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须授权,并输入有效的口令)
FTP屏蔽了各计算机系统的细节,因而适合在异构网络中任意计算机间传送文件;
用途:
FTP的用途实在计算机之间传输文件,尤其是批量传输文件 ;
让网站设计者将构成网站内容的大量文件批量上传到Web服务器;
基本原理:
主动模式:(建立数据通道时,FTP服务器主动连接FTP客户)
FTP监听熟知端口号21;
FTP客户随机选择一个临时端口号与其建立TCP连接(命令通道),控制连接在整个会话期间一直保持打开。用于传送FTP相关的控制命令
当有数据要传输时,FTP客户会告知FTP服务器建立另一个TCP连接(数据通道),这里是服务器用自己的熟知端口号为20与客户建立连接,数据连接用于文件传输,在每次传输时才建立,在每次文件传输时才建立,传输结束就关闭,
被动模式:(建立数据通道时,FTP服务器被动连接FTP客户)
命令通道的建立与主动模式相同
当有数据要传输时,FTP客户通过命令通道告知FTP服务器开启某个临时端口被动等待TCP连接,建立数据通道,被动等待来自FTP客户的TCP连接以建立数据通道;
万维网www并非某种特殊的计算机网络,它是一个大规模的、联机式的信息储藏所,是运行在英特网上的一个分布式应用;
浏览器最重要的部分是渲染引擎,也就是浏览器内核,负责对网页内容进行解析和显示。
资源定位符 URL:
为了方便访问世界范围内的文档,万维网统一使用资源定位符URL来指明因特网上任何种类资源的位置;
格式:
如:
超文本标记语言HTML:
使用多种“标签”来描述网页的结构和内容;
层叠样式表CSS:
从审美角度来描述网页的样式;
HTTP协议是超文本传输协议,是基于TCP的协议,默认为80端口。
是一种用于请求与响应模式的、无状态的应用层协议。
由于HTTP协议是一种【请求-响应模式】,所以一般需要关注HTTP请求和HTTP响应;
作用:是用来规定客户端和服务器的数据传输格式。
HTTP 是⼀种不保存状态的协议,即无状态协议,它的每个请求都是完全独立的, HTTP 协议自身不对请求和响应之间的通信状态进⾏保存。
请求报文:请求行 + 请求头(头部行)+ 消息实体
响应报文:状态行 + 响应头(头部行)+ 消息实体
(1)HTTP请求报文
请求报文的方法:
HTTP/1.0 只有 GET、HEAD、POST 命令;
(2)HTTP响应报文
状态行中的状态码:
HTTP1.0采用短连接,客户端和服务器每进行⼀次HTTP操作,就建⽴⼀次连接,任务结束(客户端收到响应报文)就结束连接。当客户端每遇到Web资源,浏览器就会重新建⽴⼀个HTTP会话。
从HTTP/1.1起,默认使⽤⻓连接,⽤以保持连接特性。使⽤⻓连接的HTTP协议,会在【头部行】加⼊这⾏ Connection:keep-alive
在使⽤⻓连接的情况下,当⼀个⽹⻚打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使⽤这⼀条已经建立的连接。
在HTTP/1.0中,默认使⽤的是短连接,也就是说每次请求都要重新建⽴⼀次连接。
HTTP 是基于TCP/IP协议的,每⼀次建⽴或者断开连接都需要三次握⼿四次挥⼿的开销,如果每次请求都要这样的话,开销会比较⼤。
HTTP 1.1起,默认使⽤长连接 ,默认开启 Connection: keep-alive
HTTP1.1 相对于 HTTP1.还新增请求方法,如 PUT、OPTIONS 等 ;
(HTTP1.0只有GET、POST、HRAD三种请求方法)(GET - 请求数据,POST - 提交要被处理的数据,HEAD和GET相似但只返回头部信息不返回正文)
HTTP1.1增加了响应报文中的 24个错误状态响应码;
带宽优化: HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了;HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分
新的二进制格式:HTTP1.x的解析是基于文本(明文),而HTTP2.0的协议采用了二进制格式,实现方便且健壮,数据紧凑,提升网络吞吐。
多路复用,大大提升了速度! 做到同一个连接可以并发处理多个请求,而且并发的数量比HTTP1.1大好几个数量级,解决阻塞问题,提升处理效率,
头部数据压缩:HTTP1.1中会对消息主体进行压缩,但是不会对请求行状态行、头部行压缩,而头部行内容越来越多;HTTP2.0对头部行进行压缩,减小体积
服务器推送: 当我们对支持HTTP2.0的web 服务器请求数据的时候,服务器会相关的所有资源都发送给浏览器(请求html,自动把css和js一起给到客户端),减少请求次数
HTTP 1.1 为若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞 ;
HTTP 2.0多个请求可同时在一个连接上并发执行。某个请求任务耗时严重,不会影响到其它连接的正常执行;
引入: HTTP存在安全缺陷:
①明文传输,容易被窃听 ;
②缺乏完整性验证,容易被纂改 ;
③没有验证对方身份,存在冒充危险;
HTTPS其实只是在【HTTP协议和TCP层】之间增加了一个SSL/TLS的安全传输协议,(TLS是SSL的升级版);
① 通过 SSL证书可以验证服务器的身份,② 并为浏览器和服务器之间的通信进行加密;
整个传输的加密过程都在新的安全层SSL/TLS中实现,
而原来的HTTP层的传输流程保持不变,这样就很好地兼容了旧的HTTP协议,也沿袭了TCP/IP协议族的分层思想;