目录
1. 网络应用程序体系结构
2. 进程通信
3. 应用需求与传输层服务
4. Web与HTTP
5. Email应用
6. FTP
7. DNS
8. P2P应用
1. 网络应用程序体系结构
客户-服务器体系结构
服务器:总是打开,具有固定的、周知的地址(IP地址),可利用大量服务器实现可拓展性。接收到来自某客户对某对象的请求后,向客户发送所请求的对象作为响应。
客户端:与服务器通信,使用服务器提供的服务。间歇性地接入网络,可能使用动态IP。客户之间不直接通信。
P2P体系结构
对位于数据中心的专用服务器有最小的(或没有)依赖,应用程序在间断连接的主机对之间使用直接通信,主机对称为对等方。节点也有可能改变IP地址。拥有自拓展性。高度可伸缩,但难于管理。
混合结构
两种结构混合在一起使用,如Napster,文件传输使用P2P结构,文件搜索采用C/S结构。
2. 进程通信
多个端系统上的程序是如何相互通信的呢?
用操作系统的术语说,进行通信的是进程而不是程序。一个进程可以被认为是运行在端系统中的一个程序。多个进程在相同的端系统中通信时,使用由端系统上操作系统提供的进程间通信机制相互通信。
在两个不同的端系统上的进程,通过跨越计算机网络交换报文(消息)相互通信。发送进程生成并向网络中发送报文;接收进程接收报文并可能做出回应。
网络程序由成对的进程组成,这些进程通过网络相互传输报文。在每对通信进程中,一个进程标识为客户,一个标识为服务器。对Web而言,浏览器为客户进程,Web服务器为服务器进程。对P2P而言,下载文件的对等方为客户进程,上载的为服务器。而在P2P中,一个进程既能是客户也能是服务器。
定义服务器与客户进程如下:客户:发起通信的进程;服务器:会话开始时等待联系的进程
进程与网络的接口
进程通过套接字向网络发送报文和从网络接收报文。套接字是同一台主机内应用层与传输层之间的接口。该套接字是建立网络应用程序的可编程接口吧,因此套接字是应用程序与网络直接的应用程序编程接口。开发者可以控制套接字在应用层的一切,但对传输层几乎没有控制权,仅可以选择传输层协议与设定几个传输层参数。
进程寻址
为了进程间的信息交换,需要对进程进行标识。
使用IP地址寻址主机。而一台主机上可能由多个进程,给每个进程一个端口号进行标识。最后进程的标识符为IP地址+端口号。·
应用层协议
网络应用需遵循应用层协议(公开协议与私有协议)。消息类型有请求消息与响应消息。消息的语法为包括的字段与字段的形式,语义为字段中信息的含义。规则为进程何时与如何发送消息。
3. 应用需求与传输层服务
网络应用对传输服务具有一定要求。
1. 数据丢失/可靠性:容忍一定的丢失或要求100%正确
2. 时间/延迟:有些要求低延迟
3. 带宽:有些需要带宽达到最低要求时才有效——网络视频
而传输层提供的传输服务如下:
TCP服务:是面向连接的服务,客户与服务器进程间需要建立TCP连接,连接为全双工的。而且是可靠的数据传输,无差错与乱序问题。支持流量控制与拥塞控制,不提供时间/延迟保障与最小带宽保障。
UDP服务:无连接,是不可靠的数据传输。不提供流量控制、拥塞控制、延迟保障和带宽保障。但是相对地,提供自由度,有极大的发挥空间。
4. Web与HTTP
(1)HTTP协议
Web页面是由对象组成,一个对象是一个文件(HTML文件、JEPG图片、Java程序或视频片段等)。多数Web页面由一个HTML基础文件和几个引用对象组成。HTML基本文件通过对象的URL地址引用页面中的其他对象。URL的构成如下:Scheme://host:port/path,对应协议、主机、端口号和路径。
Web对应的应用层协议是HTTP协议。HTTP定义了Web客户向Web服务器请求Web页面的方式以及服务器向客户发送Web页面的方式。当用户请求Web界面是,浏览器向服务器发送对页面包含对象的HTTP请求报文,服务器收到请求与并用包含对象的响应报文进行响应。(客户:请求、接收、展示Web界面,Web服务器:响应请求,发送对象)
HTTP使用TCP作为传输协议。客户(浏览器)首先发起一个与服务器的TCP连接,服务器在80端口等待请求,接收到来自浏览器的TCP连接后,开始进行HTTP消息交换。最后关闭TCP连接。
HTTP是一个无状态协议,服务器不维护任何有关客户端过去所发的请求消息。
连接建立后,浏览器与服务器就可以通过套接字接口访问TCP。在客户端发起请求报文后,报文就完全进入TCP控制。HTTP协议也就不用担心数据丢失的问题。(分层体系的好处)
非持久性连接:HTTP1.0 ,每个TCP连接最多允许传输一个对象。
持久性连接:HTTP1.1 ,允许传输多个对象。
RTT:往返时间,一个小数据包从客户端到服务器然后返回客户端的时间
响应时间包括:
1. 发起、建立TCP连接:1个RTT
2. 发送HTTP请求消息与前几个字节到达:1个RTT
3. 文件传输时间
非持久性连接:1个对象需要2个RTT,操作系统为每个TCP连接开销资源。
持久性连接:TCP连接一直打开,后续的HTTP也可以通过这个TCP连接发送
无流水连接:收到前一个的响应才发送新的请求
流水机制:HTTP1.1的默认选项,遇到一个新的引用对象发出请求
(相关计算:计算RTT)
(2)HTTP报文
HTTP报文包括请求报文和响应报文。
a. HTTP请求报文
用ASCII文本书写。必须有请求行和空白行,不一定有头部行和body
第一行为请求行,包括请求命令、URL和HTTP版本之后几行为头部行,包含各种信息。之后用空白行标识头部行结束。body在方法为GET时为空,在POST时才使用。上传输入时使用POST方法,在请求消息的body部分上传客户端的输入。也可以使用URL方法,在输入较少时使用GET方法,输入信息通过请求行的URL字段上传。
HTTP1.0:GET、POST、HEAD(请服务器不要把对象放在请求消息中,即不返回请求对象)
HTTP1.1:GET、POST、HEAD、PUT(将消息体中的文件上传到URL字段所指定的路径中)、DELETE(删除Web服务器上URL指定的对象)
b. HTTP响应报文
第一行为状态行,有三个字段:协议版本、状态码和状态信息。之后为首部行,中间有一个空白行,最后为实体体。
状态码和相关状态信息包括:
200 OK
301 Moved Permanently
400 Bad Request
404 Not Found
505 HTTP Version Not Supported
(3)COOKIE技术
解决HTTP无状态的问题
某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
COOKIE的组件
1. HTTP响应消息的COOKIE头部行
2. HTTP请求消息的COOKIE头部行
3. 保存在客户端主机上的COOKIE文件,由浏览器管理
4. Web服务器端的后台数据库
COOKIE原理:
COOKIE用于身份认证、购物车、推荐与Web e-mail等,但会设计隐私问题。
(4)Web缓存/代理
功能:在不访问服务器的前提下满足用户的HTTP请求
目的:缩短用户请求的响应时间,减少机构/组织的流量,在大范围内实现有效的内容转发。
用户设定浏览器通过缓存进行Web访问,浏览器向缓存/代理服务器发送所有的 HTTP请求。如果所请求对象在缓存中,缓存返回对象;否则,缓存服务器向原始服务器发送HTTP 请求,获取对象,然后返回给客户端并保存该对象。缓存既充当客户端,也充当服务器,一般由ISP架设
条件性GET方法
如果缓存有最新的版本,则不需要发送请求对象。在HTTP请求消息中声明所持有版本的日期。使用If-modified-since: 。在服务器端,如果缓存的版本是最新的,则响应消息中不包含对象。对应响应为HTTP/1.0 304 Not Modified
5. Email应用
电子邮件系统包括:用户代理、邮件服务器和简单邮件传输协议(SMTP)。
用户代理:·读写Email消息,与服务器交互,进行收发消息
邮件服务器(核心):用邮箱存储发给该用户的Email,用消息队列存储等待发送的Email
SMTP协议:同样发送的为客户,接收的为服务器,是基于TCP的
(1)SMTP协议
端口号25.。传输时会经过握手、信息传输和关闭三个阶段。如果服务器未开机,客户会在稍后继续尝试建立连接。采用命令/响应的交互模式,命令为ASCII码文本,响应对应状态代码和语句。
Email信息只能是7位ASCII码。使用持久性连接,允许在一个TCP连接下发送所有报文。SMTP服务器利用CRLF.CRLF确 定消息的结束。
与HTTP对比:
HTTP: 拉式(pull) SMTP: 推式(push)
HTTP: 每个对象封装在独立的响应消息中 SMTP: 多个对象在由多个部分构成的消息中发送
(2)email消息格式
使用MIME进行多媒体拓展,在头部增加额外的行。
(3)邮件接收协议
邮件访问协议:POP(无状态)、IMAP(支持有状态)、HTTP
总的流程,其中access protocol就是上面的邮件访问协议。
6. FTP
❖ FTP客户端使用TCP,在端口21与FTP服务器联系
❖ 客户端授权控制连接
❖ 客户端浏览远程目录,通过控制连接发送命令
❖ 当服务器收到文件传输命令时,服务器打开到客户端的第二个TCP数据连接(用于文件)
❖ 传输一个文件后,服务器关闭数据连接
❖ 服务器打开另一个TCP数据连接以传输另一个文件
❖ 控制连接:“带外”
❖ FTP服务器维护“状态”:当前目录,早期身份验证
❖用ADCII码编写请求报文
相关返回状态码
❖ 331 Username OK, password required
❖ 125 data connection already open; transfer starting
❖ 425 Can’t open data connection
❖ 452 Error writing file
7. DNS
一个由分层的DNS服务器实现的分布式数据库和一个使得主机能够查询分布式数据库的应用层协议。
主要任务:进行主机名(www.facebook.com等)到IP地址转化的目录服务
其他服务:1. 主机别名 2. 邮件服务器别名 3, 负载均衡
集中式DNS的问题:1. 单点故障 2. 流量巨大 3. 距离问题(时延) 4. 维护性问题
域名层次结构
根域名服务器:提供TLD服务器的IP地址。
TLD(顶级域名服务器):负责com, org, net,edu等顶级域名和国家顶级域名,提供权威的IP地址
权威DNS服务器:组织的域名解析服务器,提供组织内部服务器的解析服务,由组织或服务商进行维护。
本地域名解析服务器:不严格属于层级体系。每个ISP有一个本地域名服务器,为默认域名解析服务器。当主机进行DNS查询时,查询被发送到本地域名服务器。作为代理(proxy),将查询转发给(层级式)域名解析服务器系统
DNS查询
递归:
迭代:
DNS缓存与更新
只要域名解析服务器获得域名—IP映射,即缓存这一映射。一段时间过后,缓存条目失效(删除)。本地域名服务器一般会缓存顶级域名服务器的映射,因此根域名服务器不经常被访问
DNS记录
资源记录为四元组——(name, value, type, ttl)
❖ Type=A ▪ Name: 主机域名 ▪ Value: IP地址
❖Type=NS ▪ Name: 域(edu.cn) ▪ Value: 该域权威域名解析服务器的主机域名
❖Type=CNAME ▪ Name: 某一真实域名的别名 • www.ibm.com – servereast.backup2.ibm.com ▪ Value: 真实域名
❖Type=MX ▪ Value是与name(别名)相对 应的邮件服务器
DNS协议
查询与回复,有相同的消息格式
8. P2P应用
文件分发时间:
C/S结构:
P2P结构:
BitTorrent
节点加入torrent,开始时没有chunk,但是会逐渐积累。向tracker注册以获得节点清单,与某些节点 (“邻居”)建立连接。下载的同时,节点需要向其他节点上传 chunk。节点可能加入或离开,一旦节点获得完整的文件,它可能离开或留下
获取chunk:
给定任一时刻,不同 的节点持有文件的不同chunk集合,节点(Alice)定期查询每个邻居所持有的chunk列表,节点发送请求,请求获取缺失的chunk,采用稀缺优先的原则
发送chunk: tit-for-tat
Alice向4个邻居发送chunk,选择正在向其发送Chunk中速率最快的4个。 每10秒重新评估top 4 ,每30秒随机选择一个其他节点,向其发送chunk。新选择节点可能加入top 4。
P2P信息查询
P2P系统的索引:信息到节点位置(IP地址+端口号)的映射
集中式索引:内容和文件传输是分布式的,但是内容定位是高度集中式的,面临问题1: 单点失效 2. 性能瓶颈 3. 版权问题
洪泛式查询:完全分布式架,每个节点对它共享的文件进行索引,且只对它共享的文件进行索引。查询消息通过已有的TCP连接发送,节点转发查询消息,如果查询命中,则利用反向路径发回查询节点
层次式覆盖网络:介于集中式索引和洪泛查询之间的方法。每个节点或者是一个超级节点,或者被 分配一个超级节点。节点和超级节点间维持TCP连接 。某些超级节点对之间维持TCP连接。超级节点负责跟踪子节点的内容
DHT
❖DHT:一种分布式P2P数据库
❖数据库有(key, value)对。对等方使用key查询DHT,DHT返回与key匹配的值。对等方还可以插入(key, value)对。将(key, value)对分发到(数百万个对等点)
❖中心问题:将(key, value)对分配给对等方。
❖基本思想:将每个key转换为整数,为每个对等点分配整数。将(key, value)对放入最靠近键的对等方
❖将整数标识符分配给[0,2^n-1]范围内的每一个对等方,用于某些n。每个标识符由n位表示。要求每个键都是同一范围内的整数。要获取整数key,对原始密钥进行哈希
❖规则:将key分配给具有最接近ID的对等方。