计算机网络应用层

应用层所讨论的对象可以简单理解为端系统上的网络应用程序。
因特网网络体系结构分为5层:应用层、传输层、网络层、链路层、物理层。应用程序体系结构由应用程序研发者设计,规定了如何在端系统上组织该应用程序。主流的体系结构有两种:客户-服务器体系结构和对等P2P体系结构。
客户-服务器体系结构:
在此体系结构里,有一个总是打开的主机称为服务器,它服务于其他称为客户的主机的请求。而一台单独的服务器可能没法承受来自太多客户的请求,所以采用配备了大量主机的数据中心(data center)提供虚拟服务器。
对等P2P体系结构:
对位于数据中心的专用服务器有几乎没有依赖,应用程序在间断连接的主机之间直接通信,这些主机对称为对等方。该体系结构的特性之一是自扩展性(self-scalability)。例如文件共享:BitTorrent。

进程通信:

在端系统中的每一个应用程序可以抽象为一个进程,不同端系统上的进程,通过跨越计算机网络交换报文message)。
套接字:

每一个进程通过套接字socket)与计算机网络交互,套接字是进程与计算机网络之间的接口,进程通过套接字软件接口向计算机网络发送报文。也就是同一台主机中应用层和传输层的接口。由于套接字是建立网络应用程序的可编程接口,因此套接字也称为应用程序和网络之间的应用程序编程接口Application Programming Interface, API)。
进程寻址

1.主机地址(IP);2.进程标识(port)

可供应用程序使用的传输服务分类:可靠数据传输、吞吐量、定时和安全性。也即是应用层程序对下一层服务的希望,而因特网能提供的传输层服务协议有两类:TCP和UDP。

TCP提供面向连接和可靠数据传输服务:

  • 面向连接服务是指在应用层数据报文开始传输之前,TCP让客户和服务器互相交换传输层控制信息,即是所谓的握手过程。握手之后,一个TCP连接就在两个进程的套接字之间建立了。该连接是全双工的,即连接双方都可以在此连接上同时收发报文。当结束报文发送时,需要拆除连接。
  • 可靠的数据传输服务:进程能够依赖TCP,无差错、按适当的顺序交付所有发送的数据,没有字节的丢失和冗余。

除此以外TCP协议还提供拥塞控制机制。当发送方和接收方之间的网络出现拥塞时,TCP的拥塞控制机制会抑制发送进程(拥塞窗口)。

TCP和UDP都没有提供任何加密机制,所以当前一般采用升级版TCP,称为安全套接字层Secure Socket Layer,SSL)。升级后的TCP额外提供关键的进程到进程的安全性服务,包括加密、数据完整性和端点鉴别。SSL不是独立于TCP和UDP的第三个协议,而是TCP的改进版,是在应用层上实现的。如果一个应用程序想要使用SSL服务,需要在程序的客户端和服务器段包含SSL的代码。

UDP服务:

UDP服务时不提供不必要服务的轻量型传输层服务,UDP提供无连接和不可靠的数据传输服务。更加没有拥塞控制机制。


 

应用层协议:

应用层协议application-layer protocol)定义了在不同端系统上的应用程序进程如何相互传递报文:

  • 交换的报文类型
  • 各种报文类型的语法
  • 字段的语义
  • 确定一个进程何时以及如何发送报文,对报文响应的规则

Web的应用层协议是HTTPHyperText Transfer Protocol,超文本传输协议),定义了浏览器和Web服务器之间传输报文的格式和序列;电子邮件的注意应用层协议时SMTP(简单邮件传输协议)。

HTTP协议:

HTTP由两个程序实现,一个客户程序一个服务器程序。HTTP使用TCP作为它的传输层协议,HTTP客户首先发起一个与服务器的TCP连接,一旦连接建立,浏览器和服务器进程就可以通过套接字接口访问TCP了。在HTTP协议下,服务器向客户发送被请求文件,却不存储任何关于客户的状态信息,所以说HTTP时一个无状态协议stateless protocol)。

当每个请求/响应对是经一个单独的TCP连接发送时,该应用程序被称为使用非持续连接non-persistent connection);当所有的请求和响应经由相同的TCP连接发送时,称为使用持续连接persistent connection)。默认使用持续连接。

  • 非持续连接的缺点:必须为每一个请求对象建立和维护一个全新的TCP连接,需要分配TCP缓冲区和保持TCP变量,降低服务器性能;增加对象交付时延。
  • 持续连接:同一台服务器的多个对象发送给客户时,可以在单个连接上处理,对象可以接连发送,不必等待未完成的请求的回答。如果一个连接经过一定时间未被使用,HTTP服务器将关闭连接。HTTP的默认模式是时延带流水线的持续连接。

 

HTTP报文:

请求报文:

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr

第一行称为请求行,后面称为首部行,请求行有三个字段:方法字段、URL字段和HTTP版本字段;首部行有多个取值。
请求报文的通用格式:

在首部行后面是实体体entity body),使用GET请求,实体体为空,使用POST请求时才使用该实体体,例如提交表单。

响应报文:

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 data ...)

第一行称为状态行(status line),后面是首部行(header line),最后是实体体,实体体是报文的主要内容,即是请求对象本身。状态行有三个字段:协议版本字段、状态码和相应状态信息。首部行中的Last-Modified字段在使用缓存服务器(代理服务器)时会用到。
响应报文的通用格式:

 

 

 

状态码和相应的状态短语:

  • 200 OK:请求成功,并在响应中返回信息。
  • 301 Moved Permanently:请求的对象已被永久移动; 新 URL 在 Location: 响应消息的标头中指定。 客户端软件将自动检索新 URL。
  • 400 Bad Request:这是一个通用错误代码,表示服务器无法理解该请求。
  • 404 Not Found:请求的文档在此服务器上不存在。
  • 505 HTTP Version Not Supported:服务器不支持请求的 HTTP 协议版本。

 

cookie

用户与服务器交互:cookie
HTTP服务器是无状态的,所以HTTP服务器使用cookie来识别来访用户。如图cookie技术有4个组件:

  • 在HTTP响应报文中的一个cookie首部行
  • 在HTTP请求报文中的一个cookie首部行
  • 在用户端系统中的一个cookie文件,由用户浏览器管理
  • 位于Web站点的后端数据库

cookie的使用过程如图所示。因此cookie可以在无状态的HTTP之上建立一个用户会话层。

 

 

 

Web缓存:

也叫代理服务器,能够代表初始Web服务器来服务HTTP请求的网络实体。Web缓存有自己的磁盘存储空间,并在存储空间中存储最近请求过的对象的副本。具体说来,步骤如下:

  • 浏览器创建一个到Web缓存的TCP连接,并向Web缓存中的对象发送一个HTTP请求;
  • Web缓存检查是否有该对象副本,如果有,就直接向客户浏览器用HTTP响应报文返回该对象;
  • 如果Web缓存中没有对象副本,Web缓存就打开一个与该对象的初始服务器的TCP连接。Web缓存在当前的缓存服务器和服务器的TCP连接上发送一个对该对象的HTTP请求,收到该请求后,初始服务器向Web缓存发送具有该对象的HTTP响应;
  • Web缓存收到该对象时,在本地存储空间存储一份副本,并向用户的浏览器用HTTP响应报文发送该副本;

条件GET方法

Web缓存的对象可能是旧的,HTTP协议的条件GETconditional GET)方法,允许缓存更新自己的对象副本,使用方法是:

  1. 请求报文使用GET方法;
  2. 请求报文包含一个“If-Modified-Since:”首部行;

该HTTP请求报文就是一个条件GET请求报文。
举例:

GET /fruit/kiwi.gif HTTP/1.1
Host: www.exotiquecuisine.com
If-modified-since: Wed, 9 Sep 2015 09:23:24

如果初始服务器中的对象在日期后修改过,才会发送该对象。


 

电子邮件:

电子邮件系统的主要组成部分:用户代理user agent)、邮件服务器mail server)、简单邮件传输协议Simple Mail Transfer Protocol,SMTP)。
邮件服务器形成了电子邮件系统结构的核心,每个接收方在一个邮件服务器上有一个邮箱mailbox),邮箱管理和维护者发送给接收方的报文。一个典型的邮件发送过程是:从发送方的用户代理开始,用户代理传输邮件到发送方的邮件服务器,发送方的邮件服务器再传输到接收方的邮件服务器,然后在这里被分发给接收方的邮箱中。如果发送方的邮件服务器不能将邮件交付给接收方的邮件服务器,发送方在一个报文队列message queue)中保持该报文并在以后再发送。

SMTP

SMTP过程如图:

SMTP一般不使用中间邮件服务器,而是直接连接接收方的邮件服务器。使用TCP提供的可靠数据传输将邮件无差错的投递到接收方邮件服务器。

举例一个SMTP客户和服务器之间交换报文的例子:

S:  220 hamburger.edu
C:  HELO crepes.fr
S:  250 Hello crepes.fr, pleased to meet you
C:  MAIL FROM: <alice@crepes.fr>
S:  250 alice@crepes.fr ... Sender ok
C:  RCPT TO: <bob@hamburger.edu>
S:  250 bob@hamburger.edu ... Recipient ok
C:  DATA
S:  354 Enter mail, end with ”.” on a line by itself
C:  Do you like ketchup?
C:  How about pickles?
C:  .
S:  250 Message accepted for delivery
C:  QUIT
S:  221 hamburger.edu closing connection

 

SMTP与HTTP对比:

文件传送时,两者都使用持续连接。

区别:

  1. HTTP是一个拉协议(pull protocol),用户使用HTTP从服务器拉取信息,TCP连接是由接收文件的主机发起的;
  2. SMTP基本上是一个推协议(push protocol),即发送邮件服务器将文件推向接收邮件服务器,TCP连接是由要发送该文件的主机发起的;
  3. SMTP要求每个报文,包括体,采用7比特ASCII码格式;
  4. 处理既包含文本又包含图像的文档,HTTP把每个对象封装到各自的HTTP响应报文里,SMTP将所有报文对象封装到一个报文中。

邮件报文格式:

上面交换报文的例子中的命令是SMTP握手协议的一部分,这里的则是邮件报文自身的一部分。

From: alice@crepes.fr
To: bob@hamburger.edu
Subject: Searching for the meaning of life.

报文首部之后,接着一个空白行,然后是以ACSII格式表示的报文文体。

邮件访问协议:

接收方的用户代理不能使用SMTP获取报文,因为取报文是一个拉操作,而SMTP是一个推协议,引入特殊的邮件访问协议:第三版的邮局协议Post Office Protocol-Version 3,POP3)、因特网邮件访问协议Internet Mail Access Protocol,IMAP)以及HTTP。
POP3
POP3是一个极为简单的邮件访问协议,随着TCP连接建立,POP3分阶段工作:特许(authorization)、事务处理和更新。

  1. 在特许阶段,用户代理发送用户名和口令鉴别用户;
  2. 事务处理阶段,用户代理取回报文,同时可以对报文做删除操作、获取邮件的统计信息;
  3. 更新阶段,出现在用户发送quit命令之后,目的是结束该POP3会话。此时,邮件服务器删除那些标记为删除的邮件。

在事务处理阶段,使用POP3的用户代理可以被配置为“下载并删除”或“下载并保留”方式。区别是邮件服务器是否删除原始邮件报文。

IMAP
POP3没有给用户提供任何创建远程文件夹并为报文指派文件夹的方法。IMAP服务器把每个报文与一个文件夹联系起来:当报文第一次到达邮件服务器时,与接收方的INBOX文件夹相连,用户可以随意移动该报文到其他文件夹,与POP3不同,IMAP服务器维护了IMAP会话的用户状态信息。

原文地址:http://www.cnblogs.com/iukw/p/applicationhttpsmtp.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性