计算机网络自顶向下方法第2章-应用层(application-layer).1
2.1 应用层协议原理
2.1.1网络应用程序体系结构
1)在客户-服务器体系结构 (client-server architecture)中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求。著名的应用程序包括Web、FTP、Telnet和电子邮件.
2)在一个P2P体系结构(P2P architecture)中,对位于数据中心的专用服务器有最小的(或者没有)依赖。相反,应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方。
2.1.2 进程通信
1)客户与服务器进程
在一对进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器.
2) 进程与计算机网络之间的接口
进程通过一个称为套接字(socket)的软件接口向网络发送报文和从网络接收报文。应用程序可以控制套接字在应用层端的一切,但是对该套接字的运输层几片没有控制权。除选择运输层协议与设定几个运输层参数,如最大缓存和最大报文段长度等。
3)进程寻址
Web服务器用端口号80来标识,邮件服务器进程(使用SMTP协议)用端口号25来标识。
2.1.3可供应用程序使用的运输服务。
一个运输层协议能够为调用它的应用程序提供什么样的服务呢?从四个方面对应用程序服务要求进行分类:可靠数据传输、吞吐量、定时、安全性.
2.1.4 因特网提供的运输服务
1)TCP服务
TCP服务模型包括面向连接服务和可靠数据传输服务,TCP还提供拥塞控制机制
- 面向连接:客户机/服务器进程间需建立连接。握手过程提示客户和服务器,使它们为大量分组的到来做好准备。在握手阶段后,一个TCP连接(TCP connection)就在两个进程的套接字之间建立了。这条连接是全双工的,即连接双方的进程可以在此连接上同时进行报文收发。
- 可靠的传输:通信进程能够依靠TCP,无差错、按适当顺序交付所有发送的数据。
2) UDP服务
UDP是一种不提供不需要服务的轻量级运输协议,无连接:它不需在两主机间建立连接,提供不可靠的数据传输
3) 因特网运输协议所不提供的服务
2.1.5 应用层协议
- 公开协议:由RFC定义,标准化的HTTP、SMTP等
- 私有协议:多数P2P文件共享应用
2.2 Web和HTTP
2.2.1 HTTP 概况
Web 的应用层协议是超文本传输协议(HyperText Transfer Protocl,HTTP),它是Web的核心。
- web页面=多个对象组成(对象只是一个文件,如一个html文件,一个图形,一个java小程序或一个视频)。每个对象通过一个对应的URL寻址。
- HTTP使用TCP作为它的支撑运输协议。
- HTTP服务器并不保存关于客户的任何信息,所以我们说HTTP是一个无状态协议(stateless protocol)
2.2.2 非持续连接和持续连接
使用持续连接或非持续连接是由应用层决定的(HTTP默认使用的是持续连接)
1)采用非持续连接的HTTP
每个TCP连接只传输一个请求报文和一个响应报文。每次服务器发送响应报文后,会通知该TCP断开该TCP连接。HTTP客户接收响应报文,TCP连接关闭。
2)采用持续连接的HTTP
非持续连接的两个缺点:
- 要为每个请求的对象建立一个连接,对于每个连接,客户和服务器中都要分配TCP缓冲区和保持TCP变量,给服务器带来严重负担;
- 每个对象都要遭受两倍RTT的交付时延,一个RTT用来创建TCP,另一个RTT用来请求和接受一个对象。
服务器在发送响应之后保持该TCP连接打开。因此,位于同一台服务器的多个Web页面都可以在单个TCP上进行传输。请求可以一个接一个地发而不必等待未决请求的回答(流水线)。
2.2.3 HTTP报文格式
1.HTTP请求报文
一个典型的http请求报文:
GET /somedir/page.html HTTP/1.1 Host: www.hans941.tk Connection: close User-agent: Chrome/57.0 Accept-language: ch
下图是请求报文的通用格式
首部行后面的 实体体(Entity body),在使用 POST 方法时存储用户提交的表单。
2.HTTP响应报文
http响应报文由三部分组成:一个初始状态行(status line),之后有6个首部行(header line),然后是实体体(entity body)
HTTP/1.1 200 OK Connection: close Date: Tue, 09 Aug 2011 15:44:04 GMT Server: Apache/2.2.3 (CentOS) Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT Content-Length: 6821 Content-Type: text/html (data data data data data ......)
一个HTTP响应报文的通用格式
2.2.4 用户与服务器的交互:cookie
HTTP服务器是无状态化的,这简化了服务器的设计,这让工程师可以去开发能同时处理大量数据的高性能服务器。但是有时Web站点希望能去识别用户,为此HTTP使用了cookie来进行用户跟踪。
cookie技术有4个组件:
- 在 HTTP 响应报文中的一个 cookie 首部行;
- 在 HTTP 请求报文中的一个 cookie 首部行;
- 在用户端系统中保留有一个 cookie 文件,并由用户的浏览器进行管理;
- 位于 Web 站点的一个后端数据库。
2.2.5 Web缓存
Web缓存器(Web cache)也叫代理服务器(proxy server),它是能够代表初始Web服务器来满足HTTP请求的网络实体.Web缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。
客户对过Web缓存器请求对象:
2.2.6 条件GET方法
那么Web缓存器什么时候才会去刷新缓存下来的页面,以保存提供给客户是最新的对象呢?
HTTP协议有一处机制-----条件GET(conditional GET)方法。
若同时满足以下两点的则称为 条件 GET 方法:
- 请求报文使用 GET 方法。
- 请求报文中包含一个 If-Modified-Since: 首部行。
例:
客户端发送请求:
GET / HTTP/1.1 Host: www.sina.com.cn:80 If-Modified-Since:Thu, 4 Feb 2010 20:39:13 GMT Connection: Close
当没有更新时服务器的响应:
HTTP/1.0 304 Not Modified Date: Thu, 04 Feb 2010 12:38:41 GMT Content-Type: text/html Expires: Thu, 04 Feb 2010 12:39:41 GMT Last-Modified: Thu, 04 Feb 2010 12:29:04 GMT Age: 28 X-Cache: HIT from sy32-21.sina.com.cn Connection: close
状态行中的Not Modified,它告诉缓存器可以使用该对象,能向请求的浏览器转发它(该代理缓存器)缓存的该对象副本。
2.3 因特网中的电子邮件
电子邮件系统有3个重要组成部分:用户代理(user agent)、邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)
用户代理允许用户阅读、回复、转发、保存和撰写报文。
邮件服务器组成了电子邮件体系结构的核心。每个接收方在其中的某个服务器上有一个邮箱。邮箱包含用户的到达报文、离开(将发送)邮件报文的报文队列;在发送电子邮件报文的邮件服务器之间采用SMTP协议。
SMTP是因特网电子邮件中主要的应用层协议。它使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。
2.3.1 SMTP
- SMTP是电子邮件应用的核心,使用TCP从客户机到服务器可靠地传输电子邮件报文,用端口25,属于TCP/IP协议族。
- SMTP一般不使用中间邮件服务器发送邮件,他采用直接传输的方式,从发送服务器到接受服务器
- 传输共有三个阶段:握手、报文传输、关闭
2.3.2 与HTTP的对比
相同:当进行文件传送时,持续的HTTP和SMTP都使用持续连接
不同:
- HTTP主要是一个拉协议(pull protocol):即在方便的时候,某些人在Web服务器上装载信息,用户使用HTTP从该服务器拉取这些信息;SMTP主要是一个推协议(push protocol):即发送邮件服务器把文件推向接收邮件服务器,这个连接是由要发送该文件的机器发起的。
- SMTP要求每一个报文(包括他们的体)使用7比特ASCII码格式,若非如此,则强制转化;HTTP没有这样的编码限制
- HTTP把每个对象封装到它自己的HTTP响应报文中;SMTP把所有报文对象放在一个报文之中。
2.3.3 邮件报文格式
一个典型的报文首部如下:
From: alice@crepes.fr To: bob@hamburger.edu Subject: Searching for the meaning of life.
在报文首部之后,紧接着是一个空白行,然后是以ASCII格式表示的报文主体。
2.3.4 邮件访问协议
在上述分析中,有一个疏漏的环节,那就是在Alice向Bob发送邮件的过程中,Bob是如何通过运行在他本地PC上的用户代理,获得位于某ISP的邮件服务器上的他的邮件呢?注意到Bob的用户代理不能使用SMTP来取回邮件,因为取邮件时一个拉操作,而SMTP是一个推协议。因此我们要引入邮件访问协议,包括第三版的邮局协议(POP3)、因特网邮件访问协议(IMAP)以及HTTP。
下图总结了应用于因特网电子邮件的一些协议:SMTP用来将邮件从发送发的邮件服务器传输到接收方的邮件服务器。如POP3这样的邮件访问协议用来将邮件从接收方的邮件服务器传送到接收方的用户代理。
1)POP3
- POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,是TCP/IP协议族中的一员(默认端口是110)。
- 它被用户代理用来邮件服务器取得邮件。POP3采用的也是C/S通信模型,对应的RFC文档为RFC1939。
- POP3支持电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
2) IMAP
- IMAP 全称是 Internet Mail Access Protocol,即互联网邮件访问协议,是一个应用层协议(端口是143)。用来从本地邮件客户端(Outlook Express、Foxmail、Mozilla Thunderbird等)访问远程服务器上的邮件。
- 开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
3) 基于Web的电子邮件
当用户用Web浏览器使用电子邮件时,用户和他远程邮箱之间的通信则通过HTTP;然而,用户的邮件服务器在与其他的邮件服务器之间发送和接收邮件时,仍然使用的是SMTP。
参考:
https://www.cnblogs.com/hithongming/p/9343593.html
https://www.jianshu.com/p/1b53e88e5864