应用层
为什么需要应用层
运输层给应用进程提供了端到端的通信服务,但不同的网络进程之间,还需要有不同的通信规则,因此运输层之上还需要有应用层。
应用层协议定义:
- 应用进程交换的报文类型,请求还是响应?
- 各种报文类型的语法、语义;
- 进程何时、如何发送报文,以及对报文进行响应的规则。
应用层功能与协议:
- 域名服务:DNS;
- 文件传输:FTP;
- 电子邮件:SMTP、POP3;
- 远程登陆:TELNET;
- WWW服务:HTTP。
工作模式
应用层有两种工作模式: Client/Server 模式和 P2P 模式。
Client/Server
服务器:
- 提供网络服务的设备(由硬件和服务软件组成);
- 永久提供服务;
- 有永久性访问地址/域名;
- 通常采用多线程或多进程实现。
客户机:
- 请求服务的主机;
- 与服务器通信,使用服务器提供的服务;
- 间歇性接入网络;
- 可能使用动态IP地址;
- 不与其他客户直接通信。
P2P-特殊的客户服务器方式
- 不存在永远在线的服务器;
- 每个主机既可提供服务,也可以请求服务;
- 任意端系统/节点之间可以直接通信;
- 结点间歇性接入网络;
- 结点可能改变IP地址。
优点
- 可扩展性好;
- 网络健壮性好;
- 资源分散管理。
域名系统
域名系统是互联网使用的命名系统,用来便于人们使用的机器名字转换成 IP 地址。点分十进制的 IP 地址不容易记住而使用域名,类似人们的身份证号码不易记住而使用姓名。数字适合于机器,名字适合于人类。
域名结构,级别最低的域名卸载最左边,级别最高的域名就写在最右边。
根域名服务器
根域名服务器是最高层次,最重要的域名服务器。根域名服务器知道所有的顶级域名服务器的域名和 IP 地址。本地域名服务器要对互联网上任何一个域名进行解析,如果自己无法解析,首先求助根域名服务器。
域名解析的过程
- 主机向本地域名服务器的查询采用递归查询。如果本地域名服务器不能解析域名的 IP 地址,本地域名服务器就以 DNS 客户的身份,向根域名服务器发出查询请求报文;
- 本地域名服务器向根域名服务器的查询采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。
DNS 服务器高速缓存
每个域名服务器都会维护一个高速缓存,存放最近用过的名字以及从何处获取名字的映射信息的记录。
可大大减轻根域名服务器的负荷,使互联网上的 DNS 查询请求和回答报文的数量大为减少。
为保持高速缓存中的内容正确,域名服务器需要为每项内容设置过期计时器,然后过期删除。
FTP
FTP 文件传输协议,是互联网中使用最广泛的文件传输协议。
- FTP 实现的是通过网络实现异构计算机间文件的“拷”;
- FTP 屏蔽了计算机系统的细节,适合在异构网络中任意计算机之间传送文件。
- FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。
FTP 的工作原理
FTP 采用 C/S 模式,可为多个客户提供服务;
FTP 的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求;
消除了不同操作系统下的文件系统的不兼容性;
实现了文件传送的基本服务;
使用 TCP 可靠传输协议。
客户端使用任意分配的端口号(>1023),服务器端用熟知端口号21传输控制信息,服务器端用熟知端口号20传输数据。
1、服务器主程序打开21号端口,等待客户进程发送连接请求;
2、启动从属进程处理客户进程请求;
3、回到等待状态,继续接受其他客户进程请求。
使用两个不同端口号的好处
1、使协议更加简单和更容易实现;
2、在传输文件时还可以利用控制连接。
TFTP
TFTP (Trivial File Transfer Protocol) 是一个很小且易于实现的文件传送协议:
- TFTP 使用客户服务器方式和使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施;
- TFTP 只支持文件传输而不支持交互;
- TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。
TFTP 的主要特点
1、每次传送的数据 PDU 中有 512 字节的数据,但最后一次可不足 512 字节;
2、数据 PDU 也称为文件块 (block),每个块按序编号,从 1 开始;
3、支持 ASCII 码或二进制传送;
4、可对文件进行读或写;
5、使用很简单的首部。
TFTP 的工作方式像是停止等待协议。发送完一个文件块后就等待对方的确认,确认时应该指明所确认的块编号。发完数据在规定的时间收不到确认就要重新发送数据 PDU。发送 PDU 的一方若在规定时间内收不到下一个文件块,也要重发确认 PDU。这样就保证文件的传输不致因某一个数据报丢失而失败的情况。
开始工作时,TFTP 客户进程发送一个读请求 PDU 或写请求PDU 给 TFTP 服务器进程,其熟知端口号码为69。TFTP 服务器进程要选择一个新的端口和 TFTP 客户进程进行通信。若文件度恰好为 512 字节的整数倍,则在文件传送完毕后,还必须在最后发送一个只含首部而无数据的数据 PDU。若文件度不是 512 字节的整数倍,则最后传送数据 PDU 的数据字段一定不满 512 字节,这正好可作为文件结束的标志。
TELNET
TELNET 是一个简单的远程终端协议,是互联网正式标准。用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远程的另一个主机上(使用主机名或 IP 地址),TELNET 将用户的击键传到远地主机,并且将远程主机的输出通过 TCP 连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远得程主机上;TELNET 使用客户/服务器方式。本地系统运行 TELNET 客户进程,远程主机则运行 TELNE服务器进程;服务器中的主进程等待新的请求,并产生从属进程来处理每一个连接。
TELNET 能够适应许多计算机和操作系统的差异,例如对于文本中一行的结束,有的系统使用 ASCII 的回车,有的系统使用两个字符,回车换行。为了适应这种差异,TELNET 定义了数据和命令如何通过互联网。这些所谓的定义就是所谓的网络虚拟终端 NVT 。
- 客户软件把用户的击键和命令转换成 NVT 格式,并送交服务器;
- 服务器软件把收到的数据和命令,从 NVT 格式转换成远地系统所需的格式;
- 向用户返回数据时,服务器把远地系统的格式转换为 NVT 格式,本地客户再从 NVT 格式转换到本地系统所需的格式。
SSH 与 TELNET
相同点
- 远程登录其他主机;
- 运输层采用TCP协议。
不同点
- Telnet明文传送;SSH加密传送,且支持压缩;
- Telnet服务默认端口号为23;SSH服务默认监听22号端口;
- SSH使用对称加密算法实现数据安全传输;
- 对称加密算法的密钥是通过非对称加密算法(RSA)进行交换的。
超文本传输协议 HTTP
HTTP 协议定义浏览器(即万维网客户端)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传递给浏览器。
从层次角度看,HTTP 是面向事务的应用层协议,它是万维上能够可靠的交换文件(包括声音,文本,图像等各种多媒体文件)的重要基础,所谓事务就是指一系列的信息交换,这一些列的信息交换是不可分割的一个整体。
HTTP 使用了面向连接的 TCP 作为运输层的协议,保证了数据的可靠传输。HTTP 不用考虑数据在传输过程中被丢弃又怎样被重传。但是,HTTP 本身又是无连接的,就是说虽然 HTTP 使用了 TCP 连接,但通信的双方在交换 HTTP 报文之间不需要先建立 HTTP 连接。
HTTP 协议是无状态的。就是同一个客户第二次访问同一个服务器上的页面时,服务的响应和第一次的响应相同,因为服务器并不记得曾经访问过这个用户,也不记得为该用户服务多少次。HTTP 的这种设计,简化了服务器的设计,使服务器容易实现支持大量并发的 HTTP 请求。
为什么 HTTP 是无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
早期这么做的原因是 HTTP 协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、发散性导致两次传送的数据关联性很低,大部分通道实际上会很空闲、无端占用资源。因此 HTTP 的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。
随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。后来,Keep-Alive 被提出用来解决这效率低的问题。Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接。
为什么 HTTP 是无状态
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。
HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。
缺少状态意味着如果后续处理需要前面的信息,就必须重传,这样可能导致每次连接传送的数据量增大。
优缺点
优点:解放了服务器,每一次请求“点到为止”不会造成不必要连接占用。
缺点:严重阻碍了客户端与服务器进行动态交互的 Web 应用程序,例如购物程序。
如何应对 HTTP 无状态的特点呢,可以通过 Cookie 和 Session。
请求一个 www 文档所需要的时间
持续连接
HTTP/1.1 协议使用持续连接 (persistent connection):
万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文;
这并不局限于传送同一个面上链接的文档,而是只要这些文档都在同一个服务器上就行;
目前一些流行的浏览器的默认设置就是使用 HTTP/1.1。
持续连接的两种工作方式
1、非流水线方式
客户端在收到前一个响应时候才发出下一个请求。但服务器在发完一个对象后,TCP 连接就处于空闲状态,浪费了服务器资源。
2、流水线方式
客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文。一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。使用流水线方式时,客户访问所有的对象只需花费一个 RTT时 间,使 TCP 连接中的空闲时间减少,提高了下载文档效率。
持续连接带来的问题
在持续连接情况下,客户端发出请求后,服务器发送回响应,由于连接没有释放,客户端无法知道服务器数据是否传输完毕,一直等待。当服务器进程退出之后,客户浏览器才会显示面内容。
如何解决
响应时采用Transfer-Encoding: chunked,解决传输数据的边界问题;
在HTTP响应头部中,用“Content-Length: 12395”告诉了客户端实度为12359字节。
HTTP/2
面的实时性要求越来越高(如视频聊天或直播),协议HTTP/1.1已无法适应其要求,特点如下:
o 服务器发回的响应无需排队,并行发回(使用同一个TCP连接);
o 允许客户复用TCP连接进行多个请求;
o 所有的报文都划分为许多较小的二进制编码的帧,并采用了新的压缩算法,不发送重复的首部字段,大大减小了首部的开销,提高了传输效率。
HTTP 响应的状态码
状态代码由三位数字组成,第一个数字定义了响应的类别,共分 5 种类别:
1xx :指示信息——表示请求已接收,继续处理;
2xx :成功——表示请求已被成功接收、理解和接受;
3xx :重定向——要完成请求必须进行更进一步的操作;
4xx :客户端错误——请求有语法错误或请求无法实现;
5xx :服务器端错误——服务器未能实现合法的请求。
动态主机配置协议 DHCP
动态主机配置协议 DHCP(Dynamic Host Configuration Protocol)是一种网络管理协议,用于集中对用户IP地址进行动态管理和配置。
DHCP于1993年10月成为标准协议,其前身是BOOTP协议。DHCP协议由RFC 2131定义,采用客户端/服务器通信模式,由客户端(DHCP Client)向服务器(DHCP Server)提出配置申请,DHCP Server为网络上的每个设备动态分配IP地址、子网掩码、默认网关地址,域名服务器(DNS)地址和其他相关配置参数,以便可以与其他IP网络通信。
为什么需要 DHCP
在IP网络中,每个连接Internet的设备都需要分配唯一的IP地址。DHCP使网络管理员能从中心结点监控和分配IP地址。当某台计算机移到网络中的其它位置时,能自动收到新的IP地址。DHCP实现的自动化分配IP地址不仅降低了配置和部署设备的时间,同时也降低了发生配置错误的可能性。另外DHCP服务器可以管理多个网段的配置信息,当某个网段的配置发生变化时,管理员只需要更新DHCP服务器上的相关配置即可,实现了集中化管理。
DHCP 解决的问题:
1、普通用户配置协议参数易出错;
2、管理员配置多台设备麻烦;
3、IP 地址数少于用户数。
DHCP采用客户/服务器模式
需要IP地址的主机在启动时广播发送DHCP发现报文:
该主机就成为 DHCP 客户,本地网络上DHCP服务器回答此广播报文,服务器首先在其数据库中查找该计算机的配置信息;
若找到,则返回找到的信息,否则,从服务器的IP地址池中取一个地址分配给该计算机,服务器的回答的报文称为提供报文(DHCPOFFER)。
租用期
DHCP服务器分配给DHCP客户的IP地址是临时的,DHCP客户只能在一段有限的时间内使用这个分配到的 IP 地址。DHCP协议称这段时间为租用期。
DHCP客户也可在自己发送的报文中(例如,发现报文)提出对租用期的要求,租用期的数值应由DHCP服务器决定。
(cisco默认租用期):
IP Address Lease Time 租期,默认1天;
Renewal Time Value 更新租约时间,租期的1/2;
Rebinding Time Value 最后更新时间,租期的7/8。
总结
1、应用层协议是为了解决某一类应用问题,而问题的解决又是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。应用层规定应用进程在通信时应遵循的协议。应用层的许多协议都是基于客户服务器方式的,客户端是服务请求方,服务器是服务提供方。
2、域名系统 DNS 是互联网使用的命名系统,用来便于把人们使用的机器名字转换成 IP 地址。DNS 是一个联机分布式数据库系统,采用客户服务器方式。
3、域名服务分为根域名服务器,顶级域名服务器,权限域名服务器和本地域名服务器。
4、文件传送协议 FTP 使用 TCP 可靠的运输服务,FTP 使用客户服务端方式,一个 FTP 服务器进程可以为多个客户提供服务。TFTP (Trivial File Transfer Protocol) 是一个很小且易于实现的文件传送协议,TFTP 使用客户服务器方式和使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施;TFTP 只支持文件传输而不支持交互;TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。
5、TELNET 是一个简单的远程终端协议,是互联网正式标准。用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远程的另一个主机上(使用主机名或 IP 地址),TELNET 将用户的击键传到远地主机,并且将远程主机的输出通过 TCP 连接返回到用户屏幕。
6、HTTP 使用了面向连接的 TCP 作为运输层的协议,保证了数据的可靠传输。
7、HTTP 本身又是无连接的,就是说虽然 HTTP 使用了 TCP 连接,但通信的双方在交换 HTTP 报文之间不需要先建立 HTTP 连接。
8、HTTP 协议是无状态的。就是同一个客户第二次访问同一个服务器上的页面时,服务的响应和第一次的响应相同,因为服务器并不记得曾经访问过这个用户,也不记得为该用户服务多少次。HTTP 的这种设计,简化了服务器的设计,使服务器容易实现支持大量并发的 HTTP 请求。
9、动态主机配置协议 DHCP(Dynamic Host Configuration Protocol)是一种网络管理协议,用于集中对用户IP地址进行动态管理和配置。
DHCP 解决的问题:
1、普通用户配置协议参数易出错;
2、管理员配置多台设备麻烦;
3、IP 地址数少于用户数。