2.1 应用层协议原理
研发网络应用的核心是写出能够运行在不同端系统和通过网络彼此通信的程序;值得注意的是,我们不需要写在网络核心设备如路由器或者链路层交换机上运行的软件,这种设计方式即将应用程序限制在端系统的方法,促进了大量网络应用程序的迅速研发和部署
2.1.1 网络应用程序体系结构
客户-服务器体系结构(C-S):如Web应用程序,总是打开的Web服务器服务于来自浏览器的请求。 特点:客户相互之间不能通信,服务器具有固定、周知的地址(IP)
P2P体系结构:对位于数据中心的专用服务器有最小的依赖,应用程序在间断连接的主机对之间使用直接通信,即主机对间对等。 特点:高度可伸缩,缺点是难于管理。
2.1.2 进程通信
操作系统而言,进行通信的实际上是进程而不是程序,本书重点讲述运行在不同端系统间进程间的通信。
在两个不同端系统上的进程,通过跨越计算机网络交换报文而相互通信。进程通过使用5层协议栈的应用层互相通信。
1.客户和服务器进程
客户机进程:发起通信的进程; 服务器进程:等待通信请求的进程; 注意区分的是P2P体系结构中,具有客户/服务器双重身份。
2.进程和计算机网络间的接口(套接字)
套接字(socket)为应用程序(应用层)和网络(运输层协议)之间的应用程序编程接口(API)
被形象称之为门
3.进程寻址
由于一个主机具有多个进程,发送主机和接收主机通信时,接收进程需要有进程标识符(地址):IP地址(主机地址)+端口号(主机中的接收进程标识符)
Web服务器端口号为80,SMTP(邮件)25
2.1.3 可供应用程序使用的传输服务
应用程序分类:可靠数据传输、吞吐量、定时、安全。
1.可靠数据传输 传输分为:可靠数据传输(电子邮件、文件传输等需要)和不可靠数据传输(多媒体应用)。
2.吞吐量 (带宽)
带宽敏感的应用具有特定的吞吐量要求,而弹性应用能够按需利用可供使用的吞吐量。
3.定时
时延
4.安全性 TCP现已提供SSL版本,例子为HTTPS
是否加密
2.1.4 因特网提供的运输服务
TCP/UDP为因特网中,运输层为应用层提供的两种协议
1**.TCP服务**(可靠、弹性带宽、时延不敏感)
TCP服务包括面向连接和可靠数据传输服务,选择TCP就默认提供这两项服务。
面向连接服务:三次握手、四次挥手。在应用层数据报文开始流动之前,TCP让客户和服务器互相交换传输层的控制信息(三次握手),已建立TCP连接(全双工)。当应用进程结束报文发送时,连接拆除(四次挥手)。
可靠的数据传输服务:TCP保证通信双方的报文交换无差错,无乱序交付。
TCP还提供了拥塞控制机制,尽量保证网络带宽的公平共享。
2.UDP服务(不可靠,固定带宽,时延敏感)
UDP是一种尽力而为的协议,基本没有在IP层增加什么东西。 UDP无连接、不可靠、因为无拥塞控制,因此开发人员可设定传输速度(时延敏感)但这并不是吞吐量或定时保证。
3.因特网运输协议不提供的服务
吞吐量和定时保证TCP/UDP均未提供。
2.1.5 应用层协议
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文:
1.交换的报文类型:如请求报文、响应报文;
2.报文的语法、语义
3.进程何时以及如何发送报文,对报文进行响应的规则。
应用层协议只是网络应用的一部分,但重要。
下面将介绍的网络应用有Web、文件传输、电子邮件、目录服务(DNS)、P2P
2.2 Web和HTTP
2.2.1 HTTP概况
1.Web的应用层协议是超文本传输协议(HTTP)。
2.HTTP由两个程序实现:一个客户程序和服务器程序,它们通过交换HTTP报文进行会话。
3.Web术语:Web页面由对象组成,一个对象只是一个文件(如,照片、视频、文本等)。多数Web页面含有一个HTML基本文件以及几个引用对象。HTML基本文件通过对象的URL地址引用页面中的其它对象。
4.URL由主机名和路径名组成(主机名未IP地址+端口号)。
5.HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传输Web页面的方式。
6.HTTP使用TCP作为支撑运输协议,首先建立连接,然后通过socket访问TCP
7.服务器向客户发送被请求的文件,而不存储任何关于该客户的状态信息。所以HTTP是一个无状态协议。
2.2.2 非持续连接和持续连接
非持续连接:每个请求/响应对经一个单独的TCP连接发送。
每个对象的响应时间是2*RTT+服务器传输该对象数据时间(每一个对象都要经受两倍RTT交付时延,即一个RTT用于创建TCP,另一个用于请求和接收一个对象)。
持续连接:所有的请求/响应对经相同的TCP连接发送。HTTP默认使用带流水线的持续连接。
2.2.3 HTTP报文格式
1.请求报文
注意!最后有一空白行。 一个请求报文具有至少一行的内容。请求报文的第一行称为请求行,其后继的各行被称为首部行。
翻译:
GET URL字段中的路径名 HTTP协议版本 //请求行
HOST(主机名):主机名(IP+端口号) //该行存在的意义在于Web高速缓存
**Connection:**close//代表使用非持续性连接,发送完该请求对象后就关闭这条连接
User-agent:向服务器发送请求的浏览器类型在首部行之后一个空行,之后便是请求的“实体体”。该实体体可以在POST方法里传递Form表单内容(关键词搜索)或者传递其它一些二进制流数据等。值得注意的是,表单也不一定必须使用POST方法。如果使用get,实体体为空,会显示在url中。
2.响应报文
响应报文:
响应报文总体上也分三个部分,第一部分是状态行,包含HTTP版本、状态以及状态信息等内容;第二部分是首部行,包含发送日期、服务器类型、上一次修改请求资源的时间、内容的类型等内容。第三部分是实体体。实体体包含请求对象本身。这里的Date是从文件系统中检索到该对象,插入到响应报文,并发送该响应报文的时间。
2.2.4(功能增加) 用户与服务器的交互:cookie
前面提到,HTTP是无状态协议,但是Web站点为了识别用户身份或者限制用户访问的时间或者将用户访问的内容同用户身份相关联,Web站点可以使用Cookie技术;
Cookie是在HTTP协议上的功能增加:为辨别用户身份,进行session跟踪而存储在用户本地终端
上的加密数据
Cookie技术包含4个组件
- HTTP响应报文里增加一个关于Cookie的首部行;
- HTTP请求报文里增加一个关于Cookie的首部行;
- 用户端系统保留一个Cookie文件,由浏览器保存维护;
- Web站点建立Cookie和用户身份的关联;
虽然,Cookie的使用方便了用户也方便了服务端,但是它的使用存在争议,因为使用Cookie被认为是对用户隐私的一种侵犯,因为Web站点可以通过Cookie得到很多用户的信息,并有可能将这部分信息卖给第三方等。
2.2.5(性能优化) Web缓存
Web缓存的原因是一种性能优化,首先减少了服务器对客户请求的响应时间,其次大大降低因特网上的Web流量,从而改善性能。
值得一提的是,Web缓存即代理服务器既是客户机又是服务器。
2.2.6(Web缓存的配套) 条件GET
条件GET机制的作用是保证Web缓存的内容是最新的。
使用条件GET方法只需在使用GET方法的时候,增加一个If-Modified-Since首部行,其对应的内容是一个时间,如果所请求的资源在指定日期后被修改了,那么服务器将返回新的对象,否则服务器将返回一个包含空实体体的报文。这样代理服务器就可以确认缓存是否过期了。
2.3 文件传输协议:FTP
- 在一个典型的FTP应用中,用户通过FTP代理和FTP交互。用户首先提供远程主机的主机名,使得FTP用户代理建立一个到远程主机的TCP连接,之后需要用户提供用户名和密码,它们作为FTP命令的一部分在TCP连接上传输;一旦服务器授权,用户便可以和服务器进行文件传输了。
- HTTP和FTP都是应用层协议,它们都运行在TCP协议之上,但是它们之间也有一些重要区别,其中一个就是FTP使用连个并行的TCP连接来传输数据,一个TCP被称为控制连接,用来传输FTP命令;一个TCP连接被称为数据连接,用于传输文件数据;因为FTP协议内,控制信息是通过一个独立的TCP连接传输,所以我们称FTP的控制信息是带外传送的;如果控制信息和数据信息通过同一个TCP传输,则称为带内传送。TCP控制连接端口21,数据连接端口20
- 需要注意的是,FTP中控制连接贯穿整个会话,但是数据连接会在一个文件开始传输的时候建立,在传输结束后关闭;所以每次传输一个新的文件时,都会新建一个数据连接;
- 同时,FTP需要在整个会话期间,保留用户的状态,也就是将控制连接同用户账户关联起来,同时记录用户在远程目录树上的操作,这就限制了FTP可以同时维持的会话总数.
2.4 因特网的电子邮件 端口25 SMTP
电子邮件系统分为:用户代理、邮件服务器、简单邮件传输协议(SMTP)
发送方通过用户代理将邮件传送到发送方的邮件服务器,然后再传输到接收方的邮件服务器,然后邮件被分发到接收方的邮箱里;接收方从邮件服务器里获取自己的邮件时需要通过邮件服务器的验证。
SMTP是因特网电子邮件中主要的应用层协议,使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。
2.4.1 SMTP
传输的三个阶段:握手、传输、关闭连接。
** SMTP25号端口。SMTP是持续连接的。。
值得注意的是,SMTP报文一般不使用中间邮件服务器**发送报文,也就是邮件不会在中间某个邮件服务器保留;
在SMTP握手阶段,SMTP客户端将介绍发送方和接收方的邮箱地址;一旦介绍完毕后,SMTP客户端将开始发送报文。
2.4.2 与HTTP对比
HTTP和SMTP都是用TCP协议;持续的HTTP和SMTP都是用持续连接;但是两者也有区别。
- 首先HTTP被设计为一个Pull拉协议而SMTP被设计为一个Push推协议。即用户通过HTTP主动向服务器请求内容,而SMTP则是客户将内容推向服务器端;
- 第二个区别就是HTTP传输的数据不一定是用ASCII字符,但是SMTP则只能使用ASCII字符;
- 第三个重要区别就是,HTTP将每个对象封装在自己的响应报文里,而SMTP则将所有的报文对象放到一个报文之中;
2.4.3 邮件报文格式和MIME
报文由两部分组成:一个包含环境信息的首部和一个包含邮件内容的报文体;首部和报文体之间使用空行分开;首部行的格式为关键字:及其值;每个首部必须包含一个From和To首部行。首部也可以包含其它信息,比如Subject等。
需要区分的是,虽然SMTP的握手阶段也有From To关键词,但这并不是一个东西,本节是邮件报文格式中的要求。
2.4.4 邮件访问协议
邮件传输的具体过程,如图所示,SMTP用来将邮件从发送方的邮件服务器传输到接收方的邮件服务器;SMTP也用来将邮件从发送方的用户代理传送到发送方的邮件服务器。邮件访问协议(POP3)用来将邮件从接收方的邮件服务器传送到接收方的用户代理。
这再次证明了,SMTP是一个推协议,即由发送方决定,而Bob读取邮件是一种取过程(由接收方决定),所以不适用。也可以这么理解,SMTP协议负责发送邮件,POP3负责读取邮件
POP3有三个阶段:特许,事务处理,更新。
1.特许阶段:接收方(用户代理)发送用户名和密码以鉴别用户。
2.事务处理阶段:用户代理取回报文,执行其它操作;
3.更新阶段:用户输入quit后,POP3会话结束,邮件系统执行用户的删除操作。
1.POP3服务器并不在POP会话期间携带状态信息。
2. IMAP服务器维护了IMAP用户的状态信息。
3.基于Web的电子邮件,可将浏览器视为代理,浏览器与邮件服务器的通信基于HTTP,服务器间的通信还是SMTP。
2.5 DNS:因特网的目录服务(UDP,端口53)
作用:提供一种进行主机名到IP地址转换的目录服务。
DNS是一个由分层的DNS服务器实现的分布式数据库;一个使得主机能够查询分布式数据库的应用层协议。
DNS运行在UDP上,使用53号端口。
注意:DNS虽然是在应用层,但并不直接与用户打交道,通常是由其它应用层协议所使用。
除了主机名到IP地址的转换,DNS还提供其它服务:
1.主机别名
2.邮件服务器别名
3.负载分配:DNS也被用在冗余的服务器之间分配负载。每个服务器有着不同的IP地址,但是它们都和同一个主机名相关联,也就是一个IP地址集合同一个规范主机名相联系;当某个DNS服务器收到DNS请求时,该服务器使用IP地址的整个集合作为相应,但是在每个应答中,循环这些地址的次序。因为客户端通常都是使用IP地址集合的首个元素,所以DNS就在冗余的Web服务器之间分配了负载。同理,多个邮件服务器可以具有相同的别名。
DNS采用分布式的设计方案,而之所以这样做,是因为,单一的DNS服务器无法解决单点故障、无法保证通信容量以及远距离和维护困难等问题。
分布式、层次数据库:
根DNS服务器、顶级域服务器、权威DNS服务器;此外还有不在该层次里的本地服务器,由ISP提供,当主机发出DNS请求时,该请求被发往本地服务器,代理主机,将该请求转发到DNS服务器层次结构。
DNS查询有两种,一种是递归查询一种是迭代查询;实践中,查询通常满足这样的模式:从请求主机到本地DNS服务器的查询是递归的,其余查询是迭代的。
所谓递归就是,如果请求的接收者不知道所请求的内容,那么接收者将扮演请求者,发出有关请求,直到获得所需要的内容,然后将内容返回给最初的请求者。也就是说,在递归查询中,一定要给请求者想要的答案;
迭代查询则是指,如果接收者没有请求者所需要的准确内容,接收者将告诉请求者,如何去获得,但是自己并不去发出请求
此外,DNS还使用了DNS缓存技术(本地DNS服务器),以缩短用户查询时间。
2.6 P2P
对总是打开的基础设施服务器没有依赖,成对间歇连接的主机之间相互通信。
有两种典型因特网应用十分适合P2P体系结构,一种是文件分发(BitTorrent),另一种是大型对等方社区中的数据库;我们将探讨分布式散列表的概念。P2P体系结构有着良好的自扩展性。这种扩展性的直接成因是:对等方除了比特的消费者之外还是他们的重新分发者.