2.1 应用层协议原理

2.1.1 网络应用程序体系结构

主要有两种主流应用程序体系结构(application architecture)客户机/服务器体系结构(client-server architecture)P2P体系结构(P2P architecture)

2.1.2 进程通信

不同端系统上的进程通过跨越计算机网络交换报文而相互通信。发送进程创建并向网络中发送报文,接收进程接受这些报文并可能负责回送报文。
网络应用程序是由成对的进程组成,这些进程通过网络相互发送报文,两个进程一个标示为客户机(client),一个标示为服务器(server)
进程通过一个称为套接字(socket)的软件接口在网络上发送和接收报文,也称为应用程序和网络之间的应用程序编程接口(Application Programming Interface,API)

2.1.3 可供应用程序使用的运输服务

  1. 可靠数据传输(reliable data transfer)
  2. 吞吐量
  3. 定时
  4. 安全性

2.1.4 因特网提供的运输服务

两个因特网运输层协议:

  1. TCP服务
    (1) 面向连接服务
    (2) 可靠数据传输服务
    具有拥塞机制
  2. UDP服务
    无连接、不可靠且无拥塞机制

因特网运输层协议缺少对吞吐量和定时保证的讨论。
为了识别接收进程,需要定义两种信息:1)该主机的名称或地址,2)用来指定目的主机上接收进程的标识。在因特网中,主机是用IP地址(IP address)进行标识的,目的地端口号(port number)能识别运行在主机上的接收进程。

2.1.5 应用层协议

应用层协议(application-layer protocol)定义了运行在不同端系统上的应用程序进程如何相互传递报文,定义了交换的报文类型、各种报文类型的语法、字段的语义、进程何时如何发送报文及对报文进行响应的规则。

2.1.6 本书涉及的网络应用

2.2 Web应用和HTTP协议

2.2.1 HTTP概况

超文本传输协议(Hypertext Transfer Protocol,HTTP)是Web的应用层协议,它是Web的核心,在带内(in-band)发送控制信息。
Web页面(Web page)是由对象组成的。对象(object)就是文件,如HTML文件、JPEG图形文件、Java小程序或视频片段文件,这些文件可以通过一个URL地址寻址。多数Web页面含有一个基本HTML文件(base HTML file)以及几个引用对象。每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名。因为Web浏览器(Web browser)实现了HTTP的客户机端,所以这种模型又称为B/S(browser-server)模型。Web服务器(Web Server)用于存储Web对象,每个对象由URL寻址。Web服务器实现了HTTP的服务器端。
当用户请求一个Web页面时,浏览器向服务器发出对该页面中所包含对象的HTTP请求报文,服务器接收请求并用包含这些对象的HTTP响应报文进行响应。
HTTP使用TCP作为它的支撑运输层协议。HTTP客户机发起一个与服务器的TCP连接,一旦连接建立,浏览器和服务器进程就可以通过套接字接口访问TCP。
因为一个HTTP服务器并不保存关于客户机的任何消息,所以HTTP是一个无状态协议(stateless protocol)

2.2.2 非持久连接和持久连接

每个请求/响应对经一个单独的TCP连接发送,称为非持久连接(non-persistent connection)
所有请求/响应对经相同的TCP连接发送,称为持久连接(persistent connection)
HTTP可以使用非持久连接也可使用持久连接,默认方式下使用持久连接。
往返时间(Round-Trip Time,RTT),即一个小分组从客户机到服务器再回到客户机所花费的时间。
RTT包括分组传播时延、分组在中间路由器和交换机上的排队时延以及分组处理时延。
HTTP持久连接的情况下,服务器在发送响应后保持该TCP连接打开,经过一定时间间隔仍未被使用,HTTP服务器就关闭该连接。

2.2.3 HTTP报文格式

  1. HTTP请求报文
    第一行叫做请求行(request line),其后继的行叫做首部行(header line),然后是请求空行,之后就是实体主体(entity body)
    请求行有3个字段:方法字段(GET/POST/HEAD/PUT/DELETE)、URL字段、HTTP协议版本字段。
  2. HTTP响应报文
    分成三个部分:一个初始状态行(status line)、六个首部行(header line),然后是实体主题(entity body)

2.2.4 用户与服务器的交互:cookie

HTTP服务器是无状态的,然而一个Web站点通常希望能够识别用户,既可能是因为服务器想限制用户的访问,又可能是因为它想把内容与用户身份关联起来,为此HTTP使用了cookie
cookie技术有4个组成部分:

  1. 在HTTP响应报文中有一个cookie首部行
  2. 在HTTP请求报文中有一个cookie首部行
  3. 在用户端系统中保留有一个cookie文件,由用户的浏览器管理
  4. 在Web站点有一个后端数据库

2.2.5 Web缓存

Web缓存器(Web cache)也叫代理服务器(proxy server),它是能够代表初始Web服务器来满足HTTP请求的网络实体。Web缓存器有自己的磁盘存储空间,并在该存储空间中保存最近请求过的对象的拷贝。

2.2.6 条件GET方法

HTTP使用条件GET(conditional GET)方法来证实缓存器的对象是最新的。

2.2.7 博文补充(转)

  1. 图解SSL/TLS协议
  2. SSL/TLS协议运行机制的概述
  3. 深入浅出HTTPS工作原理
  4. HTTP与HTTPS的区别,详细介绍
  5. HTTP Session、Cookie机制详解
  6. 综合阐述http1.0/1.1/2和https
  7. 一篇文章让你入门HTTP2.0
  8. HTTP3.0(QUIC的实现机制)
  9. 什么是CDN?

2.3 文件传输协议:FTP

文件传输协议(File Transfer Protocol,FTP)是因特网应用层协议,使用两个并行的TCP连接来传输文件,一个是控制连接(control connection),一个是数据连接(data)。控制连接用于在两个主机之间传输控制信息,如用户标识、口令、改变远程目录的命令以及“put”和“get”文件命令;数据连接用于实际传输一个文件。FTP协议使用一个分离的控制连接,所以FTP的控制信息是带外(out-of-band)传送的。控制连接贯穿整个用户会话期间,针对会话的每一次文件传输都需要建立一个新的数据连接。
FTP服务器必须在整个会话期间保留用户的状态(state)信息。

2.4 因特网中的电子邮件

因特网电子邮件系统有三个主要组成部分:用户代理(user agent)邮件服务器(mail server)简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)
每个接收方在电子邮件体系结构中的某个服务器上有一个邮箱(mailbox)。一个典型的邮件发送过程是:从发送方的用户代理开始,传送到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。
若发送方的服务器不能将邮件交付到接收方的服务器,发送方的邮件服务器在一个报文队列(message queue)保持该报文并在以后尝试再次发送,通常每30分钟左右进行一次尝试,若几天后仍不能成功,服务器删除该报文并以电子邮件的形式通知发送方。

2.4.1 SMTP

SMTP限制所有邮件报文主体部分(不只是其首部)只能采用简单的7位ACSII码表示。
SMTP一般不使用中间邮件服务器发送邮件。
进行文件传送时,SMTP使用持久连接。

2.4.2 与HTTP的对比

SMTP和HTTP都用于从一台主机向另一台主机传送文件。
SMTP是一个推协议(push protocol),HTTP是一个拉协议(pull protocol)
SMTP把所有报文对象放在一个报文之中,HTTP把对象封装到它自己的HTTP响应报文中。

2.4.3 邮件报文格式和MIME

多用途互联网邮件扩展(Multipurpose Internet Mail Extensions,MIME)类型,是设定某种扩展名的文件用一种应用程序来打开的方式类型。

2.4.4 邮件访问协议

目前有多个流行的邮件访问协议:第三版的邮局协议(Post Office Protocol-version 3,POP3)因特网邮件访问协议(Internet Mail Access Protocol,IMAP)以及HTTP。

  1. POP3
    三个步骤:特许、事务处理、更新。在特许阶段,用户代理发送(以明文形式)用户名和口令以鉴别用户。事务处理阶段,用户代理取回报文;这个阶段中,用户代理还能对邮件进行操作,如做出报文删除标记,取消报文删除标记,以及获取邮件的统计信息。更新阶段,在客户机发出quit命令之后,目的是结束该POP3会话;此时,邮件服务器删除哪些被标记为删除的报文。在用户代理与邮件服务器使用POP3进行会话时,POP3会保留一些状态信息,特别是哪些用户报文被标记为删除了。会话期间,状态信息并不会被携带,简化了POP3服务的实现。
  2. IMAP
    用户想要在任何一台机器上对所有报文进行访问,他想要实现使用一个再远程服务器上的层次文件夹,而POP3不可能做到这一点,POP3协议没有给用户提供任何创建远程文件夹及为报文指派文件夹的方法。
    IMAP服务器把每个报文与一个文件夹联系起来;当报文第一次到达服务器时,它是放在收件人的收件箱文件夹里。收件人则可以把邮件移到一个新的、用户创建的文件夹,或阅读邮件、删除邮件等。IMAP为用户提供了创建文件夹以及在文件夹之间移动邮件的命令。此外,IMAP协议还为用户提供了在远程文件夹中查询邮件的命令,按指定条件去查询匹配的邮件。IMAP的另外一个重要特性是,它具有允许用户代理读取报文组件的命令。
  3. 基于Web的电子邮件
    使用HTTP。

2.5 DNS:因特网的目录服务

主机的一种识别方法是用它的主机名(hostname)(可能由不定长的字母数字组成,路由很难处理),另一种识别方法是使用所谓IP地址(IP address)

2.5.1 DNS提供的服务

域名系统(Domain Name System,DNS)是:一个由分层的DNS服务器(DNS server)实现的分布式数据库、一个允许主机查询分布式数据库的应用协议。
DNS还提供了一些重要的服务:主机别名(host aliasing)(有一个规范主机名(canonical hostname))、邮件服务器别名(mail server aliasing)负载分配(load distributing)

2.5.2 DNS工作机理概述

  1. 分布式、层次数据库
    三类层次结构DNS服务器:
    (1) 根DNS服务器
    (2) 顶级域(TLD)服务器
    (3) 权威DNS服务器
    本地DNS服务器(local DNS server)起代理的作用。
    依次查询浏览器DNS缓存、系统DNS缓存、本地host文件并确认未查找到后,请求主机向本地DNS服务器发送查询请求,本地DNS服务器依次从根DNS服务器、TLD DNS服务器、权威DNS服务器获取相关信息,然后本地DNS服务器返回相关映射至请求主机。
    从请求主机到本地DNS服务器的查询是递归查询(recursive query),其余的查询是迭代查询(iterative query)
  2. DNS缓存(DNS caching)

2.5.3 DNS记录和报文

实现DNS分布式数据库的所有DNS服务器共同存储着资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射。
DNS报文分DNS查询和回答报文,拥有相同格式。
在DNS数据库中插入记录需要注册登记机构(register)的服务。

2.6 P2P应用

2.6.1 P2P文件分发

  1. P2P体系结构的扩展性
    分发时间(distribution time)是多个对等方得到文件拷贝所需要的时间。
    在P2P体系结构中,随着要获得文件拷贝的对等方的数量增加,最小分发时间的增速远小于成正比的线性增长速。
  2. BitTorrent
    BitTorrent是一种用于文件分发的流行P2P协议。
    参与一个特定文件分发的所有对等方的集合称为一个洪流(torrent)。在一个洪流中,对等方彼此下载等长度的文件块。每个洪流具有一个基础设施节点,称为追踪器(tracker)。追踪器每次会随机地从参与对等方集合中选择一些对等方,并将其IP地址发送给某个除外的对等方,接受到此列表的对等方会与列表中的对等方并行建立TCP连接,其中所有与其连接的对等方称为“邻近对等方”。在任何时刻,每个对等方都具有来自某文件快的子集,且不同的对等方具有不同的文件块子集。一个对等方会从邻近对等方中选择自己没有且拷贝数量最少的文件块进行下载,这种技术称为最稀罕优先(rarest first)技术。
    BitTorrent的对换算法有效地消除了搭免费车(free-riding)问题(只下载不上载,白嫖)。

2.6.2 在P2P区域中搜索信息

P2P应用程序中的信息索引,即信息到主机位置的映射。

  1. 集中式索引(centralized index)
    具有集中式索引的P2P文件共享系统实际上是一个P2P和客户机/服务器混合体系结构。
    每一个对等方通知和更新或向集中式索引服务器发出查询的请求,各对等方相互间连接进行文件传输。
    集中式索引的缺点:单点(索引服务器)故障、性能瓶颈和基础设施费用、侵犯版权。
  2. 查询洪泛
    对等方新成了一个抽象的逻辑网络,该网络被称为覆盖网络(overlay network)
    对等方通过覆盖网络进行索引查询叫做查询洪泛(query flooding)
    为避免某个对等方接受过多的查询请求,使用了范围受限查询洪泛(limited scope query flooding),即每个对等点设置查询计数器及其上限。
  3. 层次覆盖
    层次覆盖设计(hierarchical overlay design)结合了集中式索引与查询洪泛的优秀特征,超级对等方组成覆盖网络,每个超级对作为集中式索引服务器等方连接着多个普通对等方。

分布式散列表(Distributed Hash Table,DHT):产生一个全分布式索引,该索引将文件标识符映射到文件位置;允许用户(原则上)确定文件的所有位置,而不会产生过量的搜索流量。

2.6.3 案例学习:Skype的P2P因特网电话

2.7 TCP套接字编程

2.7.1 TCP套接字编程

客户机与服务器TCP三次握手后,创建一个新的TCP连接称为连接套接字(connection socket)
TCP在客户机进程和服务器进程之间提供了可靠字节流服务(reliable byte-stream service)
流(stream)是流入和流出进程的字符序列。对一个进程来说,每条流或者是输入流(input stream),或者是输出流(output stream)

2.7.2 一个Java客户机/服务器应用程序例子

2.8 UDP套接字编程

UDP无初始握手阶段,是一种无连接服务。
UDP为通信进程提供了不可靠的运输服务。
UDP无流与套接字相联系。

2.9 小结

协议是网络中的核心概念。