应用层

Posted Kunkun只喝怡宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用层相关的知识,希望对你有一定的参考价值。

考试内容:

  1. 应用层协议的原理
    应用层协议定义了运行在不同端系统上的应用程序如何相互传递报文。特别是定义了:
  • 交换的报文类型,例如请求报文和响应报文。
  • 各种报文类型的语法,如报文中各个字段及这些字段是如何描述的。
  • 字段的语义,即这些字段中的信息的含义
  • 确定一个进程何时以及如何发送报文,对报文进行响应的规划。
  1. 应用层协议的实现过程

  2. Web协议和HTTP协议

    3.1 Web和HTTP概况

  • Web是一个因特网应用,它将因特网从只是很多数据网之一的地位提升为仅有的一个数据网。Web最具有吸引力的是按需操作。当用户需要时,就能得到所需要的内容。
    Web页面(也叫文档)是由对象组成的。一个对象只是一个文件,诸如一个HTML文件、一个JPEG图形、一个Java小程序或一个视频片段这样的文件,且它们可通过一个URL地址寻址。每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名。
    Web浏览器实现了HTTP的客户端。Web服务器实现了HTTP的服务端,它用于存储Web对象。流行的Web服务器有Apache和Microsoft Internet Information Server(微软互联网信息服务器)。

  • 超文本协议(HTTP) 是Web的应用层协议,它是Web的核心。HTTP由两个程序实现:一个客户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中,通过交换HTTP报文进行会话。HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式。

  • HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。其基本思想是,当用户请求一个Web页面(如点击一个超链接)时,浏览器向服务器发出对该页面中所包含对象的HTTP请求报文,服务器接收到请求并用包含这些对象的HTTP响应报文进行响应。

  • HTTP使用TCP作为它的支撑运输协议(而不是在UDP上运行),HTTP协议不用担心数据丢失,也不关注TCP从网络的数据丢失和乱序故障中恢复的细节。那是TCP以及协议栈较底层协议的工作。HTTP客户首先发起一个与服务器的TCP连接。一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问TCP客户向它的套接字接口发送HTTP请求报文并从它的套接字接口接受HTTP响应报文。类似地,服务器从它的套接字接口接受HTTP请求报文和向他的套接字接口发送HTTP响应报文。一旦客户向他的套接字接口发送了一个请求报文,该报文就脱离了客户控制并进入了TCP的控制。

  • HTTP是一个无状态协议,因为HTTP服务器不保存关于客户的任何信息,即使某个客户在短短的几秒钟两次请求同一个对象,服务器并不会因为刚刚为该客户提供了该对象就不再做出反应,而是重新发送该对象,就想服务器已经完全忘记不久之前所做过的事一样。

    3.2 非持续连接和持续连接

  • 在许多因特网应用程序中,客户和服务器在一个相当长的时间内通信,其中客户发出一系列请求并且服务器对每个请求进行响应。当这种客户/服务器的交互是经TCP进行的,应用程序的研制者就需要做一个重要决定,即每个请求/响应是经一个TCP连接发送,还是所有的请求及其响应经相同的TCP链接发送呢?采用前一种方法,该应用程序就被称为非连续连接;采用后一种方法,该程序就被称为连续连接。为了深入理解该问题,我们研究在特定应用程序即HTTP的情况下持续连接的优缺点。HTTP默认情况下使用非持续连接,但也能使用持续连接。

  • 采用非持续连接的HTTP。在非连续连接情况下,从服务器向客户传送一个Web页面的步骤:
    1) HTTP客户进程在端口号80发起一个到服务器的TCP连接,该端口号是HTTP的默认端口。在客户和服务器上分别有一个套接字与该连接相关联。
    2) HTTP客户经它的套接字向该服务器发送一个HTTP请求报文。
    3) HTTP服务器进程经它的套接字接受该请求报文,从其存储器中检索出对象,在一个HTTP响应报文中封装对象,并通过其套接字向客户发送响应报文。
    4) HTTP服务器进程通知TCP断开该TCP连接。但是直到TCP确认客户已经完整地接受到响应报文为止,它才会实际中断连接。
    5) HTTP客户接受响应报文,TCP连接关闭。
    上面的步骤说明了非持续连接的使用,其中每个TCP连接在服务器发送一个对象后关闭,即该连接不为其他的对象而持续下来。值得注意的是每个TCP连接只传输一个请求报文和一个响应报文。
    非持续连接有一些缺点。第一,必须为每一个请求的对象建立和维护一个全新的连接。第二,每一个对象经受两倍RTT的交付时延,即一个RTT用于创建TCP连接,另一个RTT用于请求和接收一个对象。锟锟实质是臭猪,可是又是一头骨瘦如柴的臭猪,都卖不到好价钱。救命!我闻到了风油精的味道!天!

  • 采用持续连接的HTTP。在采用HTTP持续连接的情况下,服务器在发送响应后保持该TCP连接打开。在相同的客户与服务器之间,后续的请求和响应报文能够通过相同的连接进行传送。

3.3 HTTP报文格式
下面提供了一个典型的HTTP请求报文:
GET /somedir/page.html HTTP/1.1
Host:www.someschool.edu
Connection:close
User-agent:Mozilla/5.0
Accept-language:fr

第一行为请求行,后面的行叫首部行
请求行有三个字段:方法字段(GET、POST、HEADPUT和DELETE) 、URL字段 、HTTP版本字段
首部行Host:指明了对象所在的主机
首部行Connection:表示该浏览器告诉服务器不要频繁地使用持续连接,它要求服务器再发送完被请求的对象后就关闭这条连接。
首部行User-agent:用来指明用户代理,即向服务器发送请求的浏览器的类型,便于服务器有效地为不同类型的用户代理实际发送相同对象的不同版本。
首部行Accept-language:表示用户想得到该对象的语言

3.4 HTTP响应报文格式
下面提供了一个典型的HTTP响应报文:
HTTP/1.1 200 OK
Connection:close
Date:Tue,18 Aug 2015 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified:Tue, 18 Aug 2015 15:11:03 GMT
Content-Length:6821
Content-Type:text/html
(data data data data …)

第一行为初始状态行,后面6个首部行,然后是实体行。实体部分是报文的主要部分,即它包含了所请求的对象本身。
状态行有三个字段:协议版本字段、状态码和相应状态信息
首部行Connection:告诉客户,发送完报文后将关闭TCP连接
首部行Date:指示服务器产生并发送该响应报文的日期和时间。不是值对象创建或最后修改的时间,而是服务器从它的文件系统中检索到该对象,将该对象插入响应报文,并发送响应报文的时间。
首部行Server:指示该报文什么类型服务器产生。
首部行Last-Modified:指示了对象创建或者最后修改的日期和时间。
首部行Content-Length:指示了被发送对象中的字节数。
首部行Content-Type:指示了实体中的对象类型。

一些常见的状态码和相应状态信息包括:

  • 200 OK:请求成功,信息在返回的响应报文中。

  • 301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文的首部行Location:中。客户软件将自动获取新的URL。

  • 400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解。

  • 404 Not Found:被请求的文档不在服务器上。

  • 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本。

  • FTP协议的实现机制

  • DNS的功能和实现方法

    5.1 DNS提供的服务

    我们知道,识别主机的方式有两种,通过主机名或者IP地址。人们喜欢便于记忆的主机名标识方式,而路由器则喜欢定长的、有着层次结构的IP地址。为了折中这些不同偏好,我们需要一种能进行主机名到IP地址转换的目录服务。这就是域名系统(Domain Name System,DNS) 的主要任务。DNS是:①一个由分层的DNS服务器实现的分布式数据库;②一个使得主机能够查询分布式数据库的应用层协议。DNS服务器通常是运行BIND软件的UNIX机器。DNS协议运行在UDP之上,使用53号端口。

    DNS:通过客户-服务器模式提供的重要网络功能。与HTTP、FTP、SMTP协议一样,DNS协议也是应用层协议,原因在于:①使用客户-服务器模式运行在通信的端系统之间;②在通信的端系统之间通过下面的端到端运输协议来传送DNS报文。然而,与其他应用程序不同的是,DNS不是一个直接和用户打交道的应用。相反,DNS是为因特网上的用户应用程序以及其他软件提供将主机名转换为其背后的IP地址的功能。

    DNS通常是由其他应用层协议所使用的,将用户提供的主机名解析为IP地址。举一个例子,考虑运行在某主机上的一个浏览器(即一个HTTP客户)是请求URL www.someschool.edu/index.html时,是如何获取到www.someschool.edu的IP地址的。其做法如下:
    1)同一台用户主机上运行着DNS应用的客户端。
    2)浏览器从上述URL中抽取出主机名www.someschool.edu,并将这台主机名传给DNS应用的客户端。
    3)DNS客户向DNS服务器发送一个包含主机名的请求。
    4)DNS客户最终会受到一份回答报文,其中包含有对应于该主机名的IP地址。
    5)一旦浏览器接收到来自DNS的该IP地址,它能够向位于该IP地址80端口的HTTP服务器进程发起一个TCP连接。

    除了进行主机名到IP地址的转换外,DNS还提供了一些重要的服务:

  • 主机别名。有着复杂主机名的主机能拥有一个或多个别名。例如,一台为relay1.west-coast…enterprise.com的主机,可能还有两个别名。在这种情况下,前者叫规范主机名。主机别名比主机名更加容易记忆。应用程序可以调用DNS来获得主机别名对应的规范主机名以及主机的IP地址。

  • 邮件服务器别名。显而易见,人们也非常希望电子邮件地址好记忆。电子邮件应用程序可以调用DNS,对提供的主机名别名进行解析,以获得该主机的规范主机名及其IP地址。

  • 负载分配。DNS也用于在冗余的服务器之间进行负载分配。繁忙的站点被冗余分布在多台服务器上,每台服务器均运行在不同的端系统上,每个有着不同的IP地址。由于这些冗余的Web服务器,一个IP地址集合因此与同一个规范主机名相联系。DNS数据库中存储着这些IP地址集合。当客户对映射到某地址集合的名字发出一个DNS请求时,该服务器用IP地址的整个集合进行响应,但在每个回答中循环这些地址次序,所以DNS服务器就在所有这些冗余的Web服务器之间循环分配了负载。DNS的循环同样可以用于邮件服务器,因此,多个邮件服务器可以具有相同的别名。

    5.2 DNS工作机理概述

    假如运行在用户主机上的某些应用程序需要将主机名转换为IP地址。这些应用程序将调用DNS的客户端,并指明需要被转换的主机名。用户主机上的DNS接收到后,想网络中发送一个DNS查询报文。所有的DNS请求和回答报文使用UDP数据报经53号端口发送。经过若干毫秒的时延后,用户主机上的DNS接收到一个提供所希望映射的DNS回答报文,这个映射结果则被传递到调用DNS的应用程序。

    DNS有一种简单设计是在因特网上只使用一个DNS服务器,该服务器包含所有的映射。在这种集中式设计中,客户直接将所有查询直接发往单一的DNS服务器,同时该DNS服务器直接对所有的查询客户做出响应。但是它不适用于当今的有着数量巨大且持续增长的主机的因特网。这种集中式设计的问题包括:

  • 单点故障。如果该DNS服务器崩溃,整个因特网随之瘫痪。

  • 通信容量。单个DNS服务器不得不处理所有的DNS查询(用于为上亿台主机产生的所有HTTP请求报文和电子邮件报文服务)。

  • 远距离的集中式数据库。单个DNS服务器不可能“邻近”所有查询客户,对于距离过远的客户可能导致严重的时延。

  • 维护。单个DNS服务器将不得不为所有的因特网主机保留记录。这不仅将使这个中央数据库庞大,而且它还不得不为解决每个新添加的主机而频繁更新。

    总的来说,在单一DNS服务器上运行集中式数据库完全没有可扩展能力。因此,DNS采用了分布式的设计方案。

    1)分布式、层次数据库
    为了处理扩展性问题,DNS使用了大量的DNS服务器,它们以层次方式组织,并且分布在全世界范围内。没有一台DNS服务器拥有因特网上所有主机的映射。相反,这些映射分布在所有的DNS服务器上。大致来说,有3种类型的DNS服务器:根DNS服务器、顶级域DNS服务器和权威DNS服务器。为了理解这3种类型的DNS服务器交互的方式,假定一个DNS客户要决定主机名www.amazon.com的IP地址。粗略来说,将发生下列事件。首先,客户首先与根服务器之一联系,它将返回顶级域名com的TLD服务器的IP地址。该客户则与这些TLD服务器之一联系,它将为amazon.com返回权威服务器的IP地址。最后,该客户与amazon.com权威服务器之一联系,它为主机名www.amazon.com返回其IP地址。

  • 根DNS服务器。有400多个根名字服务器遍及全世界。根名字服务器提供TLD服务器的IP地址。

  • 顶级域DNS服务器。TLD服务器提供了权威DNS服务器的IP地址。

  • 权威DNS服务器。在因特网上具有公共可访问主机的每个组织机构都必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射到IP地址。

    根、TLD和权威DNS服务器都处在该DNS服务器的层次结构中。此外,还有一类重要的DNS服务器,称为本地DNS服务器。严格来说,一个本地DNS服务器并不属于该服务器的层次结构,但它对于DNS层次结构是至关重要的。每一个ISP都有一台本地DNS服务器(也叫默认名字服务器)。当主机与某个ISP连接时,该ISP提供一台主机的IP地址,该主机具有一台或多台其本地DNS服务器的IP地址。通过访问Windows或UNIX的网络状态窗口,用户能够容易地确定他的本地DNS服务器的IP地址。主机的本地DNS服务器通常“邻近”本主机。对某机构ISP而言,本地DNS服务器可能就与主机在同一个局域网中;对于某居民区ISP来说,本地DNS服务器通常与主机相隔不超过几台路由器。当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS服务器层次结构中。

  1. 电子邮件系统的构成、传输机制和协议
  • 电子邮件系统有三个主要组成部分:用户代理(user agent)邮件服务器(mail server)简单邮件传输协议(SMTP)
    用户代理允许用户阅读、回复、转发、保存和撰写报文。例如微软的Outlook和Apple Mail就是电子邮件用户代理。

    邮件服务器形成了电子邮件体系结构的核心。每个接收方在其中的某个邮件服务器上有一个邮箱。邮箱管理和维护着收到的报文。一个典型的邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。如果发送方的服务器不能将邮件交付给接收方的服务器,发送方的邮件服务器在一个报文队列中保持该报文并在以后尝试再次发送。通常30分钟左右进行一次尝试;如果几天后仍不成功,服务器就删除该报文并以电子邮件的形式通知发送方。

    SMTP是因特网电子邮件中主要的应用层协议。它使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。像大多数应用层协议一样,SMTP也有两个部分:运行在发送方邮件服务器的客户端和运行在接收方邮件服务器的服务器端。每台邮件服务器上既运行客户端也运行服务器端。当一个邮件服务器向其他邮件服务器发送邮件时,它就表现为SMTP的客户;当从其他邮件服务器上接受邮件时,就表现为SMTP的服务器。
    SMTP是如何讲一个报文从发送邮件服务器传送到接受邮件服务器的。首先,客户SMTP在25号端口建立一个到服务器SMTP的TCP连接。如果服务器没有开机,客户会在稍后继续尝试连接。一旦连接建立,服务器和客户执行某些应用层的握手,就像人们在互相交流前先进行自我介绍一样。SMTP的客户和服务器再传输信息前先相互介绍。在SMTP握手的阶段,SMTP客户指示发送方的邮件地址和接收方的邮件地址。一旦该SMTP客户和服务器彼此介绍之后,客户发送该报文,SMTP能依赖TCP提供的可靠数据传输无差错地将邮件投递到接收服务器。该客户如果有另外的报文要发送到该服务器,就在该相同的TCP连接上重复这种处理;否则,它指示TCP关闭连接。

    邮件访问协议 发送方的用户代理用SMTP将电子邮件报文推入她的邮件服务器,接着她的邮件服务器再用SMTP将该邮件中继到接收方的邮件服务器。为什么该过程要分两步呢?主要是因为不通过发送方的邮件服务器进行中继,发送方的用户代理将没有任何办法到达一个不可达的目的地接受服务器。然而,对于接收方而言,是如何通过运行其本地PC上的用户代理,获得它的邮件服务器上的邮件呢?值得注意的是,接收方的用户代理不能使用SMTP得到报文,因为取报文是一个拉操作,而SMTP协议是一个推协议。所以通过引入一个特殊的邮件访问协议来解决这个难题,该协议将接收方邮件服务器上的报文传送给他的本地PC。目前有一些流行的邮件访问协议,包括第三版的邮局协议(POP3)、因特网邮件访问协议(IMAP)以及HTTP。总的来说就是,SMTP用来将邮件从发送方的用户代理传送到发送方的邮件服务器,再从发送方的邮件服务器传输到接收方的邮件服务器。如POP3这样的邮件访问协议用来将邮件从接收方的邮件服务器传送到接收方的用户代理。

  • POP3
    POP3是一个极为简单的邮件访问协议,当用户代理打开了一个到邮件服务器端口110上的TCP连接后,POP3就开始工作了。随着建立TCP连接,POP3按照三个阶段进行工作:特许、事务处理和更新。在特许阶段,用户代理以明文形式发送用户名和口令以鉴别用户;在事务处理阶段,用户代理取回报文,同时在这个阶段用户代理还能对报文做删除标记、取消报文删除标记以及获取邮件的统计信息;在更新阶段,它出现在客户发出了quit命令之后,目的是结束该POP3会话;这是该邮件服务器删除那些被标记为删除的报文。

    使用POP3的用户代理通常被用户配置为“下载并删除”或“下载并保留”方式。使用下载并删除方式存在的问题是,邮件接收方可能是移动的,可能希望从多个不同的机器访问他的邮件报文,如从办公室PC、家里的PC或便携机来访问邮件。下载并删除方式将对邮件报文根据这3台机器进行划分,特别是如果现在办公室PC上收取了一条邮件,那么在便携机将不能再收取该邮件。使用下载并保留方式,用户代理下载邮件后,该邮件仍保留在邮件服务器上。这时就可以通过不同的机器重新读取这些邮件。

  • IMAP
    使用POP3访问时,一旦接收方将邮件下载到本机地址后,他就能建立邮件文件夹,并将下载的邮件放入该文件夹中。然后接收方可以删除报文,在文件夹之间移动或查询报文。但是这种文件夹和报文存放在本地主机上的方式,会给移动用户带来问题,因为他更喜欢使用一个在远程服务器上的层次文件夹,这样它可以在任何一台机器上对所有报文进行访问。使用POP3是不可能做到这一点的,POP3协议没有给用户提供任何创建远程文件夹并为报文指派文件夹的方法。

    IMAP服务器把每个报文与一个文件夹联系起来;当报文第一次到达服务器时,它与收件人的INBOX文件夹相关联。收件人则能把邮件移到一个新的、用户创建的文件夹中,阅读邮件、删除邮件等。IMAP协议为用户提供了创建文件夹以及将邮件从一个文件夹移动到另一个文件夹的命令;还为用户提供了在远程文件夹中查询邮件的命令,按指定条件去查询匹配的邮件。

  • 基于Web的电子邮件
    如今越来越多的用户使用他们的Web浏览器收发电子邮件。使用这种服务,用户代理就是普通的浏览器,用户和他远程邮箱之间的通信则通过HTTP进行。当一个收件人想从他的邮箱中访问一个报文时,该电子邮件报文从他的邮件服务器发送到他的浏览器,使用的是HTTP而不是POP3或者IMAP协议。当发件人想发送一封电子邮件报文时,该电子邮件从他的浏览器发送到他的邮件服务器,使用的是HTTP而不是SMTP。然而,他的邮件服务器与接收方的邮件服务器之间发送和接受邮件时,仍然使用的是SMTP.

  1. TCP和UDP套接字编程
  2. P2P文件共享原理
  3. 补充知识点
    ①、套接字是一台主机内应用层与运输层之间的接口。由于该套接字是建立网络应用程序的可编程接口,因此套接字也成为应用程序和网络之间的应用程序编程接(API)
    ②、进程通过套接字的软件接口向网络发送报文和从网络接接收报文。

以上是关于应用层的主要内容,如果未能解决你的问题,请参考以下文章

HTTP之实体和编码

IP数据报格式

TCP粘包和拆包

TCP之报文首部格式

IP数据报首部格式

IP数据报首部格式