应用层
为什么需要应用层
运输层给应用进程提供了端到端的通信服务,但不同的网络进程之间,还需要有不同的通信规则,因此运输层之上还需要有应用层。
应用层协议定义:
-
应⽤进程交换的报⽂类型,请求还是响应?
-
各种报⽂类型的语法、语义;
-
进程何时、如何发送报⽂,以及对报⽂进⾏响应的规则。
应用层功能与协议:
-
域名服务: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已⽆法适应其要求,特点如下:
• 服务器发回的响应⽆需排队,并⾏发回(使⽤同⼀个TCP连接);
• 允许客户复⽤TCP连接进⾏多个请求;
• 所有的报⽂都划分为许多较⼩的⼆进制编码的帧,并采⽤了新的压缩算法,不发送重复的⾸部字段,⼤⼤减⼩了⾸部的开销,提⾼了传输效率。
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 地址数少于⽤户数。
参考
【极客时间-趣谈网络协议】https://time.geekbang.org/column/intro/100007101
【计算机网络第八版】https://www.bilibili.com/video/BV1WP4y1j7JU?p=1
【计算机网络学习笔记】https://github.com/boilingfrog/Go-POINT/tree/master/tcp
【DHCP】https://info.support.huawei.com/info-finder/encyclopedia/zh/DHCP.html