目录
第二章 应用层
HTTP
FTP文件传输协议
电子邮件
域名系统DNS
内容分发网络CDN
常考问题
题目
网页(Web页,或称文档)由许多对象组成,每个对象被一个URL(Uniform Resource Locator统一资源定位符)寻址(协议名、主机名、路径名)。
HTTP: 超文本传输协议
(1)client/server模式:客户端浏览器请求+ Web服务器响应 (2)工作过程: 客户初始化一个与HTTP服务器80端口的TCP连接 (创建套接字) HTTP服务器接受来自客户的TCP连接请求, 建立连接 Browser (HTTP client)和Web服务器 (HTTP server) 交换HTTP消息(应用层协议消息)包括HTTP请求和响应消息 最后结束(或叫关闭)TCP连接 (3)HTTP是一个无状态的协议【不维护客户先前的状态信息】
HTTP持久连接和非持久连接
流水持久性、非流水持久性
HTTP1.0默认非持久性连接,一次传送一个对象,下载多个对象需要建立多个TCP连接
HTTP1.1默认持久性连接,一个TCP连接上可以传送多个对象
不带流水的持久HTTP连接:客户必须收到响应才能继续发送请求,多个资源之间不能并发
带流水的持久HTTP连接:客户可以在收到响应之前发送新的请求,多个请求可以同时发送,只需要一个RTT获得所有资源
响应时间(RTT)计算
例题:现在有一个客户向服务器请求一个Web页面,假设这个Web页面里面含有一个HTML基本文件和10个JPEG图形,并且这11个对象位于同一台服务器上。现在要把网页和引用对象都取回来。
注意:需要先把HTML文件取回来,才能取其他对象
使用非持久连接的串行方式
建立连接+传输HTML文件=2RTT,然后连接断开
建立连接+传输JPEG1=2RTT,然后连接断开
...
建立连接+传输JPEG10=2RTT,然后连接断开
总共22RTT
使用非持久连接的并行的方式
假设最多可以并行3条TCP连接
首先需要建立TCP并传输HTML文件=2RTT
剩余的10个文件分四组,每组2RTT
一共10RTT
使用持久连接的带流水方式
先连接+传输HTML=2RTT
一次请求1RTT
一共3RTT
使用持久连接的不带流水方式
先连接+传输HTML=2RTT
在传输10个JEPG,一共10RTT
一共12RTT
HTTP2:增加了服务器向客户端发送对象的灵活性
基于客户端指定的对象优先级的请求对象传输数据。
对象分为帧传送
HTTP3:新增安全性
HTTP 响应的状态码
位于服务器响应客户的响应消息的第一行 几个常见的样本状态码:
200:请求成功,所请求信息在响应消息中返回
301:所请求的对象已永久迁移,新的URL在本响应信息的头部指出
400:该请求不能被服务器解读
404:服务器不存在所请求文档
Cookies
目的:提高用户和服务的交互性
cookie头部行在HTTP请求消息中
cookie头部行在HTTP响应消息中
cookie文件保存在用户主机中并被用户浏览器管理
cookie信息也保存在Web站点的后端数据库中
Web缓存
目标: 代表起始服务器满足HTTP请求【在不访问服务器的前提下满足客户端的HTTP请求】
用户配置浏览器: Web 访问经由缓存
所有HTTP请求指向缓存
对象在缓存中:缓存器返回对象
否则缓存器向起始服务器发出请求,接收对象后转发给客户机
减少对客户机请求的响应时间
减少内部网络与接入链路上的通信量
能从整体上大大降低因特网的Web流量
条件GET
目的:证实缓存器中的对象是否为最新
在请求报文中包含对象最后修改时间:if-modified-since:
如果对象是最新的服务器范围HTTP/1.0 304 Not Modified
传输文件到远程主机/从远程主机下载文件
client/server模式 client: 发起传输的一方 server: 远程主机
ftp服务器: 端口号 21
FTP客户首先发起建立1个与FTP服务器端口号21之间的TCP控制连接, 指定TCP作为传输层协议
客户在建立的控制连接上获得身份认证
客户在建立的控制连接上发送命令来浏览远程主机的目录.
当服务器接收到1个文件传输命令时, 在服务器端口号20创建1个与客户的TCP数据连接
1个文件传输后,服务器结束这个TCP数据连接.
服务器创建第2个TCP与客户的数据连接来传输下一个文件.
控制连接: 带外发送控制信息
FTP 服务器要维护用户状态信息: 当前目录, 先前的身份认证
SMTP、POP3、IMAP、HTTP
用户代理user agents
允许用户阅读,回复,转发,保存,编辑邮件消息
发送, 接收邮件消息到/从服务器
邮件服务器mail servers
邮箱mailbox 存放用户接收的邮件消息
外出报文队列outgoing message queue
SMTP
客户端使用TCP来可靠传输到服务器端口号25
邮件消息必须是7-bit ASCII
直接传送:用于发送服务器到接收服务器
邮件消息的格式: 多媒体扩展:增添额外信头头部声明MIME
总结:
SMTP使用持久连接
要求邮件信息必须是7bit ASCII
使用CRLF.CRLF来判断邮箱信息的结束
SMTP | HTTP | |
---|---|---|
推协议 | 拉协议 | |
都有ASCII命令/应答交互,状态码 | ||
一个邮箱内各个对象置于同一个邮件消息的多目部分发送 | 每个对象封装在它各自的HTTP响应消息中发送 |
SMTP:递送/存储邮件信息到接收者邮件服务器【用来交换邮件信息的协议】
邮件访问协议:从服务器获得邮件信息
POP:身份验证并下载邮件信息
分为身份认证阶段和传输阶段
会话无状态
IMAP:允许用户像对待本地邮箱那样操纵远程邮箱的邮件
所有邮件消息保存在一个位置:服务器
允许用户利用文件夹组织管理邮件消息
支持跨会话的用户状态
HTTP
DNS实现的功能
主机到IP地址的转换
主机别名的转换
邮件服务器别名
负载均衡
DNS实现冗余服务器:一个IP地址集合对应同一个规范主机名
域名系统
分布式数据库:一个由多层DNS服务器实现的分布式数据库
应用层协议
各级域名服务器
根名字服务器负责记录顶级域名服务器的信息
顶级域服务器(top-level domain servers):负责顶级域名 com, org, net, edu, etc, 和所有国家的顶级域名 uk, fr, ca, jp.
权威DNS服务器(authoritative DNS servers): 负责保存公共可访问的DNS记录
本地DNS服务器:Local DNS Name Server
每个ISP都有一个本地DNS服务器,也叫默认服务器
当主机发出DNS请求时,该请求被发往本地DNS服务器,起着代理的作用,转发请求到层次结构中
DNS查询方法:
主机向本地域名服务器查询一般采用:递归查询,如果主机访问的本地域名服务器不知道被查询域名的IP地址,本地域名服务器就以DNS客户的身份向其他根域名服务器发出查询请求报文
本地域名服务器向根服务器的查询通常是:迭代查询,当根域名服务器收到本地域名服务器的迭代查询报文时,要么给出查询的IP,要么告诉本地域名服务器:下一步应该向哪个域名服务器进行查询,然后让本地域名服务器进行后续查询
一旦域名服务器获得DNS映射,将缓存至局部内存
将在一定时间后丢弃缓存的信息,本地DNS服务器可以缓存顶级域名服务器的IP地址
DNS记录
DNS是存储资源记录(RR)的分布式数据库
RR格式:(name,value,type,ttl)
有几种类型
Type=A:主机名到IP地址的转换
name为主机,value为IP地址
Type=NS:域名别名到权威服务器域名转换
name=域名
value为该域名的权威服务器的主机名
Type=CNAME:
name为规范名字的别名
value=真实的规范主机名
Type=MX
name=邮件服务器的主机别名
value=邮件服务器的真实规范主机名
在DNS数据库插入记录
需要提供你自己的基本权威DNS服务器和辅助权威DNS服务器的名字和IP地址 该注册登记机构将下列两条资源记录插入注册机构的DNS系统中:
(network.com, dns1.network.com, NS) (dns1.network.com, 212.212.212.1, A)
假设用一个全新的浏览器(第一次启动的那种),访问百度(百度一下,你就知道),在敲入网址并按下回车之后:
1、获得IP地址 (1)首先搜索浏览器的
DNS 缓存
,缓存中维护一张域名与 IP 地址的对应表 (2)若没有命中,则继续搜索操作系统的 DNS 缓存(Linux,/etc/hosts;Windows,C:\WINDOWS\system32\drivers\etc\hosts) (3)若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己的 DNS 缓存,查找成功则返回结果 (4)若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查询
本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器地址给本地服务器
本地域名服务器拿到顶级域名服务器地址后,向其发起请求,获取权威域名服务器地址
本地域名服务器根据权威域名服务器地址,向其发起请求,得到该域名对应的 IP 地址
本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来
(5)操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存。浏览器得到域名对应的 IP 地址,并将 IP 地址缓存(缓存时间)。 2、和起始服务器(或者Web缓存/代理服务器),建立TCP连接 得到百度的IP,下一步是使用TCP协议,建立TCP连接。 3、向起始服务器(或者Web缓存/代理服务器)发送请求报文,用HTTP协议请求网页内容, 4、浏览器收到响应报文,并解析。
将多份拷贝存储在地理上分散的不同站点来提供服务(CDN)
CDN: 将内容的拷贝存储在CDN节点中
用户向CDN请求内容
被定向到附近的拷贝,取得内容
如果网络路径拥塞,则可能选择其他的拷贝
域名服务器中的高速缓存的作用是什么?
可大大减轻根服务器的符合,使得因特网上DNS的查询请求和回答报文的数量大大减少
简述SMTP通信的三个阶段
连接建立:连接是在发送主机的SMTP客户和接收主机的SMTP服务器之间建立的
邮件传送
连接释放:邮件发送完毕后,SMTP应该释放TCP连接
试述邮局协议POP的工作流程。IMAP和POP有何区别
POP使用客户机服务器的工作方式。在接收邮件的用户PC机中必须运行POP客户机程序,而在其ISP的邮件服务器中则允许POP服务器程序。POP服务器只有在用户输入鉴别信息后才允许对邮箱进行读取。
POP是一个脱机协议,所有对邮件的处理都在用户的PC机上进行;IMAP是一个联机协议,用户可以操纵ISP邮件服务器的邮箱
p7、假定你在浏览器中点击一条超链接获得Web页面。相关联的URL的IP地址没有缓存在本地主机上,因此必须使用DNS lookup以获得该IP地址。如果主机从DNS得到IP地址之前已经访问了n个DNS服务器;相继产生的RTT依次为RTT1、…、RTTn。进一步假定与链路相关的Web页面只包含一个对象,即由少量的HTML文本组成。令RTT0表示本地主机和包含对象的服务器之间的RTT值。假定该对象传输时间为零,则从该客户点击该超链接到它接收到该对象需要多长时间?
首先是获得IP地址:RTT1+...+RTTn
再和服务器发送请求建立连接、传输数据,需要两个RTT0
总共:2RTT0 + RTT1 + .... + RTTn
P8、参照习题P7,假定在同一服务器上某HTML文件引用了 8个非常小的对象。忽略发送时间,在下列情况下需要多长时间:
(1)没有并行TCP连接的非持续HTTP。
RTT1+...+RTTn+2RTT0 + 2RTT0 x 8
(2)配置有5个并行连接的非持续HTTP。
RTT1+...+RTTn+2RTT0+2RTT0+2RTT0
(3)持续HTTP.
非流水
RTT1+...+RTTn+2RTT0+8xRTT0
流水
RTT1+...+RTTn+2RTT0+RTT0
P9、考虑图2-12,其中有一个机构的网络和因特网相连。假定对象的平均长度为850 000bits,从这个机构网的浏览器到初始服务器的平均请求率是每秒16个请求。还假定从接入链路的因特网一侧的路由器转发一个HTTP请求开始,到接收到其响应的平均时间是3秒。将总的平均响应时间建模为平均接入时延(即从因特网路由器到机构路由器的时延)和平均因特网时延之和。对于平均接入时延,使用△/(1-△B),式中△是跨越接入链路发送一个对象的平均时间,B是对象对该接入链路的平均到达率。
(2)现在假定在这个机构LAN中安装了一个缓存器。假定未命中率为0.4,求出总的响应时间。
(1)平均接入时延=Δ/(1-ΔB)=(850000b/1.5x10^6) / (1 - 850000b/1.5x10^6) = 0.6s
总平均响应时间=0.6+3=3.6S
(2)平均接入时延=(850000b/1.5x10^6) / (1 -0.4x850000b/1.5x10^6)
总平均响应时间=(平均接入时延+平均因特网时延)x0.4=1.24S
P10.考虑一条10米短链路,某发送方经过它能够以150bps速率双向传输。假定包含数据分组是 100Kbits,仅包含控制(如ACK或握手)的分组是200bits。假定N个并行连接每个都获 得1/N的链路带宽。现在考虑HTTP协议,并且假定每个下载对象是100Kbits,这些初始下载对象包含10个来自相同发送方的引用对象。在这种情况下,经非持续HTTP的并行实例的并行下载有意义吗?现在考虑持续HTTP。你期待这比非持续的情况有很大增益吗?评价并解释你的答案。
假设客户端和服务器之间的单向传播延迟为Tp
首先考虑使用非持久连接的并行下载。并行下载将允许10个连接共享150bps的带宽,每个连接只有15bps
先进行TCP三次握手
三次握手花费时间是分组的传播时间+控制信息的传输时间
=3Tp + (200b/150bps) x 3
传输第一个HTML文件=10000 / 150 +Tp
之后再并行传输,由于无连接的需要再建立TCP连接
=(200/15)x3+Tpx3 + 100000/15 + Tp
总共=7377+8Tp
再考虑持久HTTP
握手一样
=(200/150)x3 + 3xTp
传输HTML数据
=(100000/150) + Tp
传输十个对象
=(100000/150+ Tp + 200/150 + Tp) x 10
总共=7351+24Tp