文章目录
- 应用层
- 1. 应用层协议原理
- 1.1 网络应用程序体系结构
- 1.2 进程通信
- 1.3 可供程序使用的运输服务
- 1.4 因特网提供的运输服务
- 1.5 应用层协议
- 2.Web应用和HTTP协议
- 2.1 HTTP概况
- 2.2 非持久连接和持久连接
- 2.3 HTTP报文格式
- 2.4 用户服务器的交互:cookie
- 2.5 Web缓存器
- 3、文件传输协议:FTP
- 4、因特网中的电子邮件
- 4.1 SMTP
- 4.2 与HTTP的对比
- 4.3 邮件访问协议
- 4、DNS因特网的目录服务
- 5.1 DNS提供的服务
- 5.2 DNS工作机理
这篇文章我们主要说的是计算机网络中的应用层,尽量用简单有逻辑的语言让大家对应用层有一个更深入的了解~
在本篇文章中我们会使用大量的例子来帮助大家理解
应用层
应用层是网络应用程序及其应用层协议存留的地方。因特网的应用层包含了许多协议,例如HTTP(它为Web文档提供了传送和请求)、SMTP(它提供了电子邮件保温的传输)和FTP(它提供了两个端系统之间的文件的传送)。
1. 应用层协议原理
研发网络应用程序的核心就是能写出在不同的端系统下能运行且能够通过网络相互通信的程序。例如在Web应用程序中,两个相互通信的不同程序:一个运行在用户机上的浏览器程序;另一个是运行在Web服务器主机上的Web服务器程序。在研发新的应用程序时,开发者需要写出能在多台端系统上运行的软件。
1.1 网络应用程序体系结构
网络应用体系结构是固定的,并为应用程序提供特定的服务集合。应用程序体系结构由应用研发者所确定,规定了如何在各种端系统上组织该应用程序。应用程序研发者很有可能利用现代网络程序中所使用的的两种主流体系结构之一:客户机/服务器体系结构或对等(P2P)体系结构。
∙ \bullet ∙ 客户机/服务器体系结构:在这种体系结构中,有一个总是打开的服务器,它服务于来自客户机的请求。这种结构其中一个特征是客户机之间是不能相互通信的。另一个特征就是每台服务器都有一个固定的、周知的地址,成为IP地址。因为服务器的地址是周知的,并且总是打开的,所以客户机总是可以通过向服务器的IP地址发送请求联系到服务器。使用这种体系、结构的应用程序包括Web、FTP、Telent和电子邮件。
∙ \bullet ∙ P2P体系结构:对总是打开的基础设施服务器有最小的依赖。但是呢,任意间断连接的主机对——称为对等方,直接相互通信。目前很多的流行的流量密集型应用程序基本都是用的P2P结构,包括文件分发、文件搜索/共享、因特网电话。P2P有一个很突出的特性就是自扩展性。因为客户机之间可以进行相互通信,那么对于服务器的压力就会变得很小。虽然每个对等方都由请求文件产生负载,但是每个对等方向其它对等方发文件也为系统增加了服务能力。
1.2 进程通信
∙ \bullet ∙ 客户机和服务器进程:网络应用程序是由进程对组成的,这些进程通过网络相互发送报文。对每对通信进程我们总是能指定一个为客户机,一个为服务器。在给定的每对进程通信会话中,发起通信(即在该话开始时与其他进程联系)的进程被标识为客户机,在会话开始时等待联系的进程是服务器。
∙ \bullet ∙ 进程与计算机网络之间的接口:如上所述,多数应用程序是由通信进程对组成,每对中的两个进程相互发送报文。从一个进程向另一个进程发送报文必须通过下面的网络。进程通过一个称为套接字的软件接口在网络上发送和接受报文。我们现在举个例子,我们把进程看做是房子,而它的套接字相当于它的门。当进程想向位于另外一台主机上的另外一个进程发送报文时,它把报文推出门(套接字)。套接字是同一台主机内应用层与运输层之间的接口。
1.3 可供程序使用的运输服务
∙ \bullet ∙ 可靠数据传输:分组可能在网络的传输中丢失,但是我们有些需求是不能丢失的如果出现丢失的情况那将造成严重的后果,这就需要一种协议提供确保数据交付的服务,这种传输就被称为可靠数据传输。运输层的协议可以潜在的向应用程序提供一个重要的服务是进程到进程的可靠传输服务。当一个运输层协议不提供可靠数据传输时,由发送进程的数据可能到达不了接受的进程,这对于可容忍丢失的应用来说是可以接受的。
∙ \bullet ∙ 吞吐量:可用吞吐量就是发送进程能够向接收进程交付的比特率。那么这就可以激发另一种服务就是保证吞吐量的服务,这个服务也是考运输层上的协议实现的。具有吞吐量有要求的应用被称为带宽敏感的应用。弹性应用则与之相反它可以充分利用当前的吞吐量。
∙
\bullet
∙ 定时:当然有的应用对吞吐量有要求那么自然有的应用对时间有要求。
这就要保证时延在一定的范围内。
∙ \bullet ∙ 安全性:最后运输层协议能够提供的服务还能保证数据的安全性,
1.4 因特网提供的运输服务
1、TCP服务
TCP服务包括面向连接服务和可靠性数据传输。
∙
\bullet
∙ 面向连接服务:这个就是在应用层的报文数据开始流动之前,其客户机程序和服务器程序先相互交换运输层控制信息,为相互传输信息做准备。在这个所谓的“握手”过程之后,两个进程的套接字之间就会建立一个TCP连接。这个连接是全双工的,也就是说这个连接双方可以同时进行报文收发。当应用程序结束报文的发送时必须拆除改连接。
∙ \bullet ∙ 可靠性数据传输:进程通信可以通过TCP协议的服务,无差错、适当顺序交付发送的数据,没有字节的丢失和冗余。
∙ \bullet ∙ TCP协议还有拥塞控制机制,当发送方和接收方之间的网络出现拥堵的时候,这个机制会及时的抑制发送进程。由于这个原因,TCP通常会试图限制每个TCP的连接,以此来达到到带宽平因的这种目的。但是对有最低带宽限制的某些实时应用来说这种机制就十分的不好,因此很多的实时的应用通常就是使用UDP协议进行服务。
2、UDP服务
UDP是一种不提供不必要服务的轻量级运输协议层,它仅提供最小服务。UDP是无连接的,因此在两个进程相互通信时是没有“握手” 的过程的。UDP协议提供的是不可靠数据传输服务,也就是说,进程通过UDP套接字发送报文时,接收方不一定能够收到。并且UDP没有拥塞控制机制,所以发送端可以以任何速率向其下层(网络层)传输数据。
3、因特网运输层协议所不提供的服务
前面我们说过TCP和UDP其实可以提供可靠数据传输,我们还可以通过SSL来提供安全服务。但是TCP和UDP其实是不提供保证吞吐量和时间的服务,总之现在因特网只能提供较为满意的服务,但是并不能作出保证。
4、进程寻址
我们为了识别和接收信息我们需要定义两种信息:(1)、该主机的名称或地址(2)、用来指定目的主机上接收进程的标识。在因特网中主机使用IP地址进行标识的。我们除了可以识别主机的IP地址外,发送程序必须还能识别运行在主机上的接收进程。。目的端口号就是服务于这个目的的。每一个网络应用程序都有一个特定的端口号,所以当研发者开发了新的应用程序,那么就必须为这个应用程序分配一个新的端口号。
1.5 应用层协议
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文。
(1)交换的报文类型,如请求报文和相应报文
(2)各种报文的语法,如报文中的各个字段及其详细描述
(3)字段的语义,即包含在字段中的信息的含义
(4)进程何时、如何发送报文及时对报文进行响应的规则
应用层的协议只是网络应用的一部分。
2.Web应用和HTTP协议
2.1 HTTP概况
Web的应用层的协议是超文本传输协议及HTTP协议。HTTP协议由两部分协议组成,一个是运行在客户端上的程序,一个是运行在服务器上的程序,它们两个运行在不同的端系统中,然后通过HTTP报文进行会话。HTTP协议定义了报文的格式以及客户机和服务器是如何进行报文交换的。
首先我们来看一下Web中常用的术语。Web页面是由对象组成的对象简单来说就是文件。多数的Web网页含有一个基本的HTML文件以及几个应用对象。在基本的HTML文件中通过对象的URL地址进行引用。每个URL地址由两不份组成:存放对象的服务器主机名和对象的路径名。Web服务器用于存数Web对象,每个对象有URL寻址。
HTTP使用的是TCP协议作为它的支撑运输层协议。HTTP
是一种无状态协议,它不会保存客户机的任何信息,所以即使你请求了一个某个文件两次,那么服务器就会给你发送两次相同的文件。
2.2 非持久连接和持久连接
研发者需要确定每一个请求/响应对是否通过一个单独的TCP连接,还是一系列请求通过一个相同的TCP进行连接。使用前一种方法的话我们就叫做非持久连接使用后一种方法的话我们就叫做非持久连接。持久连接一旦发送进程结束就立即断开TCP连接。
而非持久连接是如果通过一定的时间间隔仍未被使用的话,那HTTP服务器就会断开相应的连接。
RTT。
2.3 HTTP报文格式
HTTP请求报文的第一行叫做请求行,其后继行叫做首部行。
相应报文
HTTP响应报文通用格式
2.4 用户服务器的交互:cookie
我们先看一个cookie的例子
从上面的图片中我们能看到,cookie可以用于标识用户。 Web站点将产生一个唯一识别码放在set-cookie中:例如是1678,作为一个用户的ID,Web站点并不知道具体的某个人看了那些网页,但是它知道ID为1678的用户访问了哪些网页。这个时候Web将会通过1678访问过的网页推荐相关1678可能感兴趣的网页或者其它东西。
2.5 Web缓存器
Web缓存器也叫代理服务器,它可以代表初始Web服务器来满足网络实体发送的HTTP请求。Web缓存器既是服务器又是客户机。
在没有Web缓存器的时候我们的分布是如图2-12所示的,我们每次请求都要机构的局域网通过链路连接到公共的因特网,此时我们就会产生三个时延,局域网时延、接入时延、因特网时延我们现在的时延还是相对比较高的。
但是如果我们采用了Web缓存器的话,我们的Web缓存器是在局域网中,首先我们相对于上面的结构的话,我们只会产生一种时延那就是局域网时延,其余两个时延都没有了,而且局域网时延相对于上述的两个被省略掉的时延还是非常小的。所以大大提高了运行的效率。
3、文件传输协议:FTP
HTTP和FTP都是文件传输协议,并且有很多共同点。例如它们都运行在TCP上。它们也有很多的不同。其中最著名的区别就是FTP是用两个并行的TCP连接来传输文件,一个是控制连接、一个是数据连接。控制连接用于在两个主机之间传输控制信息,数据连接用于实际的问价传输。
FTP是怎么运作的呢?
上图表示的就是FTP用户代理和FTP服务器的一个交互过程。首先给用户提供远程主机的主机名使本地主机的FTP客户机建立一个到远程FTP服务器的TCP连接。然后该用户提供用户标识和口令作为FTP命令的一部分在该TCP连接上传输。一旦服务器向该用户授权的话,那么用户就可以向远程的文件系统拷贝存放在本地系统的文件。
4、因特网中的电子邮件
因特网中的电子邮件系统中有三个重要的组成部分:用户代理(邮件阅读器)、邮件服务器、简单邮件传输协议(SMTP)。
我们假设一个A给B发送邮件的过程,首先A想给B发送一个邮件时,A会先向A的服务器发送,然后A的服务器会和B的服务器建立一个TCP连接,然后B的服务器收到之后会在发送给B客户代理。A的服务器还要处理B服务器的问题,如果B的服务器并没有接收成功的话,A所发送的报文就会先在A中的报文队列中等待,每间隔一段时间会再发送一次,但是,如果长时间仍然没有发送成功的话,就会将次报文抛弃并通知A。
4.1 SMTP
SMTP也是网络中的一个基本的协议,它作用于发送服务器和接受服务器之间。
SMTP规定了报文的主题部分只能采用简单的7位ASCII码表示,在SMTP传送邮件之前必须先把二进制多媒体数据编码为ASCII码,并且在使用SMTP传输之后需要将相应的ASCII码还原为多媒体数据。
4.2 与HTTP的对比
这两种协议都是从一台主机到另一台主机传送文件:HTTP是从Web服务器想Web服务器向Web客户机(通常是浏览器)传送文件;SMTP是从一个邮件服务器向另一个邮件服务器传送文件。HTTP主要是一个拉协议,也就是用户机从服务器上拉去信息。特别是,TCP连接是由文件服务器的机器发起的。另一方面,SMTP是一个推协议,即发送邮件服务器把文件推向接收邮件服务器。
4.3 邮件访问协议
我们根据前面学习过的知识可以知道,给B发送邮件的话,首先应该是A的用户代理通过SMTP推给A的邮件服务器,然后A的邮件服务器在通过SMTP推给B的邮件服务器,那么B此时还是读不到A发送的邮件的,因为SMTP是一推个协议,B的用户代理是无法通过SMTP从B的邮件服务器中获得相应的报文的。那么此时怎么办呢,就需要我们这些小节要了解的邮件访问协议。
∙
\bullet
∙ POP3:这个协议是一个非常简单的协议使用的链路层协议是TCP协议。POP3执行的时候只有3个阶段:特许、事务处理及更新。特许的阶段是,明文的形式发送用户名个口令以鉴别用户。事务处理的阶段是对报文做删除标记和取消删除标记,以及获取邮件的统计信息。更新阶段的话就是结束POP3会话。结束之后服务器会删除那些被标记为删除的报文。POP3有两种模式,一种是“下载并删除”,另一种是“下载并保留”。使用前一种方式的话,一般是不太好的,因为我们收邮件方的用户代理端可能是移动的,比如我们使用前一种方式,我们在公司的PC接收了邮件,但是我们晚上回到家时就不能再次接收同一个邮件了,因为已经被删除了。但是我们使用第二中方式的话我们就能在多个端进行邮件的访问。
∙
\bullet
∙ IMAP:这个协议的话功能是非常的全面的,全面的话自然就相对于POP3来说的话就比较复杂。IMAP可以建立邮件文件夹,并将下载的文件放入该文件夹中,然后用户也可以删除报文,然后把报文在文件夹中移动。IMAP的另一个重要的特性就是它允许用户代理获取报文的组件。例如一个邮件非常的大,用户只想要其中的文字的部分不想要视屏的部分,IMAP可以支持这种操作。
∙
\bullet
∙ 基于Web的电子邮件:这种方式就是基于浏览器进行发送。它用的是HTTP协议。由A浏览器到A的邮件服务器用的是HTTP协议,从B的浏览器到B的服务器用的是HTTP,但是服务器之间还是用的SMT协议。
4、DNS因特网的目录服务
5.1 DNS提供的服务
我们在现实生活中有很多的方式去识别一个人,比如记住一个人的名字,计算机呢也有很多的方式去识别别的计算机,其中一种方式就是识别计算机的主机名,但是主机名不定长而且提供的信息有限,所以一般采用的是IP地址来识别。
DNS协议和HTTP、FTP和SMTP协议一样,DNS是应用层的协议,作用就是将主机名转换为它的IP地址。DNS是由一个分层的DNS服务器实现分布式数据库;一个允许主机查询分布式数据库的应用层协议。DNS运行在UDP之上。
DNS除了转换IP地址外还提供的服务是主机别名、邮件服务器别名、负载分配
5.2 DNS工作机理
DNS一简单的设计方式是一个DNS服务器,一个DNS服务器的话就会出现很多的问题,例如:单点的故障,如果该DNS服务器故障的话,那么整个因特网将随之瘫痪!;通信容量的问题单个的DNS服务器将不得不处理所有的DNS查询;还有就是传输距离的问题,因为只有一个服务器的,要是在北半球的话,那么南半球要是想要发出请求的话,那必须要从南半球发送请求,跨越半个地球;还有维护等等问题。
∙
\bullet
∙ 我们来看一下分布式。层次数据库:通过上面那种设计我们发现了很多的问题。由此优秀的计算机科研领域的人们设计了一种更合理的分布。那就是根DNS服务器、顶级域服务器(TLD)、权威DNS服务器。
总结来说的话其实就是根DNS服务器中存的是要查询的主机名的顶级域名所在的顶级域名服务器的地址。然后顶级服务器存的是对应的权威DNS服务器的地址。权威地址存的就是DNS记录这些记录可以将主机名映射成相应的IP地址。
还有一种非常中要得东西就是本地DNS服务器,他可以帮助我们去转换地址。过程如下
请求主机发送一个请求给本地DNS服务器,然后根DNS服务器会返回一个对应顶级域名服务器的地址。然后本地DNS服务器会再给顶级域名服务器发送一个请求,然后顶级域名服务器会返回一个权威域名服务器的地址。然后本地DNS服务器会给权威服务器发送一个请求,权威服务器返回一个相应的IP地址。本地DNS服务器会把IP地址返回给请求主机。