目录
2.1网络层协议的原理
创建一个新的网络应用编程
- 在不同的端系统运行
- 通过网络基础设施提供的服务,应用进程彼此通信
- 如web,Web服务器软件与浏览器软件通信
网络核心中应用层软件
- 网络核心没有应用层功能
- 网络应用只在端系统上存在,快速网络应用开发和部署
2.1.1网络应用程序体系结构
- 客户服务器模式(C/S:client/server)
- 对等模式(P2P:peer To peer)
- 混合体(客户服务器模式和对等体系结构)
客户--服务器(C/S)体系结构
服务器:
- 一直运行
- 固定的地址和周知的端口号(约定)
- 扩展性:服务器场(数据中心进行扩展,扩展性差)
客户端:
- 主动与服务器通信
- 与互联网有间接性的连接
- 可能时动态IP地址
- 不直接与其他客户端通信
对等体(P2P)体系结构
- (几乎)没有一直运行的服务器
- 任意端系统之间可以进行通信
- 每个节点即是客户端又是服务器(自扩展性--新peer节点带来新的服务能力,当然也带来新的服务请求)
- 参与的主机间歇性连接且可以改变IP地址(难以管理)
C/S和P2P体系结构的混合体
naster
- 文件搜索:集中
主机在中心服务器上注册其资源
主机向中心服务器查询其资源
- 文件传输:P2P
任意peer节点之间
即时通信
- 在线检测:集中
当用户上线时,向中心服务器注册其IP地址
用户与中心服务器联系,以找到其在线好友位置
- 两个用户之间聊天:P2P
2.1.2进程通信
进程:在主机上运行的应用程序
- 在同一个主机内,使用进程间通信机制通信(操作系统定义)
- 不同主机,通过交换报文(msaaage)来通信
- 使用OS提供的通信服务
- 按照应用协议交换报文(借助传输层提供的服务)
clients--------servers
客户端进程:发起通信的进程
服务器进程:等待连接的进程
进程与计算机网络之间的接口:套接字
套接字是同一台主机应用层与运输层之间的接口
进程寻址:在一台主机上运行的进程为了向在另外一台主机上运行的进程发送分组,接收进程需要有一个地址。为了标识该接收进程,需要定义两种信息:
- 主机的地址;
- 定义在目的主机中的接收进程的标识符;
在英特网中,主机由其IP地址(IP address)标识。IP地址是一个32比特的量且它能够唯一地标识该主机。
套接字:从一个进程向另外一个进程发送的报文必须通过下面的网络。进程通过一个称为套接字(socket)的软件接口向网络发送报文和从网络接收报文。
2.1.3可供应用程序使用的服务
- 可靠数据的传输
- 吞吐量(即运输层协议能够以某种特定的速率提供确保的可用吞吐量)
- 定时(为了有效性而要求数据交付有严格的时间限制)
- 安全性
2.1.4英特网提供的运输服务
TCP服务
- 面向连接的服务
要求在客户端进程和服务器进程之间建立连接,当应用程序结束报文发送时,必须拆除连接
- 可靠的数据传输服务
通信进程能够依靠TCP,无差错、按适当顺序交付所有发送的数据
UDP服务
- 无连接服务
两个进程通信前面没有握手过程
- 不可靠数据传输
UDP协议不保证该报文到达接收进程,到达进程的报文也可能时乱序的
安全层套接字(Secure Sockets Layers,SSL):用SSL加强后的TCP不仅能够做传统TCP的一切,而且提供了关键的进程和进程到进程的安全性服务,包括加密、数据完整性和端点鉴别。
2.1.5应用层协议
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文。特别是应用层协议定义了:
- 交换的报文类型,例如请求报文和响应报文;
- 各种报文类型的语法;
- 字段语义,即这些字段中包含的信息的含义;
- 一个进程何时以及如何发送报文,对报文进行响应的规则;
2.1.6本书涉及的网络应用
- Web
- 文件传输
- 电子邮件
- 目录服务
- P2P
2.2Web和HTTP
2.2.1HTTP概况
- Web的应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP)
- 采用客户/服务器模式
客户:请求、接收和显示Web对象的浏览器
服务器:对请求进行响应,发送对象的Web服务器
- 使用TCP:
客户发起一个与服务器的TCP连接(建立套接字),端口号是80;
服务器接受客户的TCP连接;
在浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP报文(应用层协议报文);
TCP连接关闭;
- HTTP是无状态协议,服务器并不维护客人的任何信息
2.2.2非持续连接和持续连接
非持久连接的HTTP(HTTP/1.0使用非持久连接)
- 最多只有一个对象在TCP连接上发送
- 下载多个对象需要多个TCP连接
- 发送完报文后需要关闭TCP连接,拆除连接
非持久HTTP的缺点:
- 每个操作对象需要2个往返时间(RTT)
- 操作系统必须为每个TCP连接分配资源,但浏览器通常打开并行TCP连接,以获取应用对象
持久连接的HTTP(HTTP/1.1默认使用持久连接)
- 多个对象可以在一个(在客户端和服务器之间的)TCP连接上传输
- 发送完报文后不需要关闭TCP连接,可以继续发发送请求
- 服务器在发送响应后仍保持TCP连接
- 在相同客户端和服务器之间的后续请求和响应报文通过相同的连接进行传送
- 客户端在遇到一个引用对象的时候,就可以尽快发送对象的请求
2.2.3HTTP报文格式
两种类型的HTTP报文:请求报文和响应报文
HTTP请求报文
HTTP响应报文
一些常见的状态码和相关短语:
- 200 OK:请求成功,信息在返回的响应报文中。
- 301 Moved Permanently :请求的对象已经被永久转移了,新的URL定义在响应报文的Location:首部行中。客户将自动获取新的URL。
- 400 Bad request:一个通用差别代码,指示该请求不能被服务器理解。
- 404 Not Found:被请求的文档不在服务器上。
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本。
2.2.4cookie
一种缓存,缓存的内容为登录的相关信息
2.2.5Web缓存器(代理服务器)
- 目标:不访问原始服务器,就满足客户的请求
- 用户设置浏览器:
通过缓存访问Web
- 浏览器将所有的所有的HTTP请求发给缓存
在缓存中的对象:缓存直接返回对象
如对象不在缓存,缓存请求原始服务器,然后再将对象返回给客户端
- 缓存既是客户端又是服务器
- 通常缓存是由ISP安装(大学、公司、居民区ISP)
为什么要使用Web缓存?
- 降低客户端的请求响应时间
- 可以大大减少一个机构内部网络与Internet接入链路上的流量
- 互联网大量采用了缓存:可以使较弱的ICP也能够有效提供内容
2.2.6条件GET方法
高速缓存中存在的问题,存放在缓存器中的对象副本可能是陈旧的-------HTTP协议中有一种机制,允许缓存器证实它的对象是最新的,即条件GET方法。
- 如果请求报文中包含一个 If-Modified-Since: ,那么这就是一个条件GET请求报文。
GET方法的操作方式:
2.3文件传输协议:FTP
主机和主机之间传输文件
- 首先,用户主机提供远程主机的主机名,主机之间建立TCP连接;
- 其次,用户提供用户标识和口令,作为命令的一部分在该TCP连接上传送;
- 一旦该服务器被该用户授权,用户可以将存放在本地文件系统中的一个或多个文件复制到远程文件系统。
FTP使用两个并行的TCP连接传输文件:控制连接和数据连接
FTP拥有独立的控制连接,即控制信息是带外传送的;
HTTP的控制信息是在传输文件的同一个TCP连接中发送的,即控制信息是带内发送的;
- 控制连接用于在两主机之间传输控制信息,如用户标识、口令等;
- 数据连接用于发送实际的文件;
FTP常见的命令:
- USER username:用于向服务器传送用户标识。
- PASS password:用于向服务器发送用户命令。
- LIST:用于请求服务器回送当前远程目录的所有文件列表。
- RETR filename:用于从远程主机当前目录检索文件。
- STOR filename:用于在远程主机的当前目录存放文件。
一些常见报文:
- 331 Username OK,Password required(用户名OK,需要命令)。
- 125 Data connection already open;transfer starting(数据连接已经打开,开始发送)。
- 425 Can't open data connection(无法打开数据连接)。
- 452 Error writing file(写文件差错)。
2.4英特网中的电子邮件
组成部分:用户代理、邮件服务器、简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)
邮件发送过程:
发送方的用户代理将邮件传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后邮件被分发到接收方的邮箱中。接收方用户使用用户名和口令接收邮件服务器的鉴别,然后可以读取报文。
2.4.1SMTP
- 使用TCP在客户端和服务器之间传送报文,端口号为25
- 直接传输:从发送方服务器到接收方服务器
- 传输的三个阶段:握手、传输文件、关闭
- 命令/响应交互
命令:ASCII文本
响应:状态码和状态信息
- 报文必须为7位ASCII码
2.4.2 SMTP和HTTP比较
- SMTP为推协议,HTTP为拉协议。
- SMTP要求每个报文使用7比特ASCII码格式,HTTP则不受这种限制。
- HTTP把每个对象封装在各自的响应报文中,SMTP把所有报文对象放在一个报文中。
共同点:二者都是ASCII形式的命令/响应交互,状态码。
2.4.3 邮件访问协议
将邮件从接收方的邮件服务器传送到接收方的用户代理;
包括第三版的邮局协议(Post Office Protocol--Version3,POP3)、英特网邮件访问协议(Internet Mail Access Protocol,IMAP)
POP3(本地管理文件夹)
- 用户确认阶段:用户代理发送(以明文形式)用户名和口令以鉴别用户。
- 事务处理阶段:用户代理取回报文,同时在这个阶段用户代理还能进行对报文做删除标记,取消报文删除标记以及获取邮件的统计信息。
POP会话是无状态连接
IMAP(远程管理文件夹)
使用POP3访问时,一旦用户将邮件下载到本地主机后,它就能建立邮件文件夹,将下载的邮件放入该文件夹中,然后用户可以删除报文,在文件之间移动报文并查询报文。
- IMAP服务器将每一个报文与一个文件夹联系起来
- 允许用户用目录来组织报文
- 允许用户读取报文组件
- IMAP在会话过程中保留用户状态(目录名:报文ID与目录名之间的映射)
2.5 DNS:英特网的目录服务
2.5.1DNS提供的服务
识别主机的两种方式:
- 主机名(人类喜欢的标识方式)
- IP地址(路由器喜欢的标识方式)
因此需要一种主机名到IP地址转换的目录服务,即DNS域名系统(Domain Name System,DNS)
DNS是:
- 一个由分层的DNS服务器实现的分布式数据库;
- 一个使得主机能够查询分布式数据库的应用层协议。DNS服务器通常是运行BIND软件的UNIX机器。DNS协议运行在UDP之上,使用53号端号。
DNS中用户需要获得主机名的IP地址?
- 同一台用户主机上运行着DNS应用的客户端,浏览器将主机名传给DNS客户端;
- DNS客户向DNS服务器发送一个包含主机名的请求;
- DNS最终会收到一份回答报文,其中含有对应于该主机名的IP地址;
- 一旦浏览器接收到来自DNS的该IP地址,它能够向位于该IP地址80端口的HTTP服务器进程发起一个TCP连接;
DNS提供的一些重要服务:
- 主机别名/规范主机名
- 邮件服务器别名
- 负载分配
2.5.2DNS工作机理概述
DNS在英特网上只使用一个DNS服务器,该服务器包含所有的映射,客户直接将所有查询直接发往单一的DNS服务器,同时该DNS服务器肢解对所有的查询客户做出响应。
因此导致的问题包括:
- 单点故障
- 通信容量
- 远距离的集中式数据库
- 维护】、
DNS扩展:分布式、层次数据库
- 跟DNS服务器
- 顶级域(DNS))服务器
- 权威DNS服务器
DNS缓存
为了改善时延性能并减少在英特网上到处传输的DNS报文数量,将传输过的DNS信息缓存在本地储存器中。
2.5.3DNS记录和报文
实现DNS分布式数据库的所有DNS服务器储存了资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射。
资源记录是一个包含了下列字段的4元组:(Name,Value,Type,TTL)
从正在工作中的主机直接向DNS服务器发送一个DNS查询报文?
使用nslookup程序
在DNS数据库中插入记录
在向某些注册登记机构注册域名时,需要向该机构提供你的基本和辅助权威DNS服务器的名字和IP地址。
2.6 P2P应用
包括篇P2P文件分发和分布式散列表(Distributed Hash Table,DHT)
2.6.1P2P文件分发
P2P文件共享协议是BitTirrent
2.6.2分布式列表
- 环形DHT
- 对等方互扰
2.7 TCP套接字编程
socket编程:应用进程使用传输层提供的服务才能够交换报文,实现应用协议,实现应用
套接字:应用进程与端到端传输协议之间的门户
TCP服务:从一个进程到向另一个进程可靠的传输字节流