应用层
应用层直接面向用户,是OSI中的最高层。它的主要任务是为用户提供应用的接口,即提供不同计算机间的文件传送、访问与管理,电子邮件的内容处理,不同计算机通过网络交互访问的虚拟终端功能等。
第一部分:应用层协议原理
1、网络应用程序体系结构
1、客户机/服务器体系结构(C/S)
特点:
- 存在一个能够向客户机提供服务的服务器。
- 存在一个或者多个主动连接服务器的客户机。
需要注意的:
- 客户机之间是不能互相通信的
- 服务器一般采取服务器群集方式(为的是应付多个客户机请求时,服务器忙不过来。)
- 服务器的地址是固定的且已知的(即IP地址)
- 客户机和服务器是指软件进程,不是指硬件上的服务器和客户主机
例如:百度、亚马逊····
2、P2P体系结构
特点:
- 任何一方即提供服务又享受服务
- 结点之间可以直接通信
- 结点的地址和它们之间的连接可能随时发生变化
需要注意:
- P2P体系结构非常容易扩展,但是很难管理
例如:迅雷、uTorrent·····
3、混合体系结构
顾名思义。
2、进程通信
需要明确的两点:
- 同一台主机上的进程之间通信的规则,由操作系统制定,和计算机网络无关。
- 不同主机上的不同进程之间通信的规则,由计算机网络制定。称之为应用层协议。
网络应用程序:
- 相互通信的分布式的进程。
- 运行在网络主机(端系统)中的 “用户空间”
- 在应用程序间交换报文
应用层协议:
- 网络应用程序的一个“组成部分”
- 定义应用程序需交换的报文 和所需采取的动作
- 使用较低层次(运输层)所提供的通信服务 (TCP, UDP)
ps:由于UDP、TCP不具备安全性,不能加密,故应用层会采取一层SSL层来加密。
socket
具体的详情见SOCKET篇。
1、socket在这里就是一个进程和计算机网络的接口。每个网络应用进程都有一个属于自己的套接字,该套接字在整个因特网上独一无二
2、socket=IP+端口号。其长度是48位(IP32位,端口号16位)
主机地址:标识该网络应用进程运行在因特网上哪一台主机上,通常使用32位的IP地址进行标识
端口地址:在该主机上标识该网络应用进程,通常使用16位的端口号进行标识
说明:
进程通过套接字来接收和发送报文
套接字相当于一个通道
发送进程将报文交给套接字
套接字将这些报文传输到接收进程的套接字。由此可见是socket和socket对接。它们就像是门口的管家,收发报文就是依靠它们的。
第二部分:web应用和HTTP协议
ps:web属于C\S模式
1、web应用
web内容的表达
Web页面是有一些对象组成的。类似于java中的对象,像Web中的照片、HTML文件等都是对象。每个对象都是可以用URL来定位的。
URL:主机名+路径名
Web服务器的虚拟路径
首先一个网站所有的网页及所需的其他资源如图片,Flash等都按一定的目录结构存放在Web服务器上。
在这个URL里,路径/cs/pic.gif表示Web服务器 www.hust.edu.cn根目录下的cs子目录下的pic.gif文件
这是一个虚拟的路径,因为我们并不知道www.hust.edu.cn根目录(或者叫网站根目录)到底对应到服务器上的哪个物理路径(即真正的物理目录)
2、HTTP协议
该协议是Web应用层协议。
HTTP的实现是依靠在客户机和服务机上的两个程序实现的。
HTTP协议定义了Web客户向Web服务器请求Web页面的方式和Web服务器向Web客户传送页面的方式。
HTTP协议采取的是TCP作为它的支撑传输协议。
过程是:
第一步:客户机启动TCP连接到服务器。
第二步:服务器接受来自客户端的TCP连接
第三步:http报文被封装在TCP报文段里,在两个socket中传递
http是无状态的,是不会保留历史的。
http1.0非持久性连接
http服务器在收到请求报文后形成响应报文后关闭此次TCP连接。后续的请求报文再次生成TCP连接。意味着客户端想接受一个报文段就会启动一次TCP连接,服务器就会进行一次TCP连接。
非持久性连接工作机制
RTT:往返时间。是指一个短分组从客户端到服务器然后返回客户端的时间。这里的短分组是为了确认服务器TCP连接成功。
http1.1持久性连接
服务器在发送响应后,不再断开TCP连接,而是保持该连接,用于后续对象的传送,直至该连接“休息”了一个较长的时间后,方断开该连接。意味着就使用一个TCP连接。
持久连接又可以分为:
- 非流水线方式:一个对象传输完成方能请求传输下一个
- 流水线方式:可以一次性发送所有请求,慢慢接收
3、HTTP报文类型和格式
请求报文
响应报文
用户-服务器交互:Cookie
因为HTTP是无状态的,所以我们使用Cookie来保留我们在网站上的一些历史记录等。
Cookie技术的组成部分:
- 在HTTP响应报文中有一个Cookie首部行
- 在HTTP请求报文中也有一个Cookie首部行
- 在用户的端系统中保留了一个Cookie文件,由用户浏览器负责管理
- 在Web站点有一个后端数据库
第三部分:因特网中的电子邮件
1、电子邮件系统的构成
1、用户代理
2、邮件服务器
- 邮箱 包含了收到的用户邮件 (尚未被阅读)
- 报文 队列包含了外发的 邮件报文
3、简单邮件传输协议:SMTP(发送协议)
- SMTP 协议用在邮件服务器之间发送邮件
- 客户端: 将邮件发送到邮件服务器
- “服务器”: 接收和转发邮件
接收邮件是其他协议:POP3协议或者IMAP协议等
1 | graph LR |
2、SWTP协议
使用 TCP可靠的传送邮件报文, 端口
直接传输: 发送服务器到接收服务器
传输的三个阶段
握手(打招呼)
报文传输
结束
命令/响应交互
命令: ASCII文本
响应: 状态码和短语
邮件报文必须使用7-bit ASCII表示
PS:如果接收方的邮件服务器没有打开,那么邮件就会在发送方的邮件服务器中缓存。
3、SWTP VS HTTP
4、邮件报文格式
首部诸行, e.g.,
1 | From: alice@crepes.fr |
首部行和信体用一个空行隔开。
MIME:
MIME协议是为了扩展电仪邮件的文本格式的,之前的电子邮件只能处理文本格式,通过MIME协议的扩展,现在可以发送静态图像、动画、声音、程序等各种形式的数据。MIME规定了应用消息的格式,因此在OSI模型中它相当于表示层。
由于在RFC 822中描述的报文首部只适合于发送普通ASCII文本,不能充分满足多媒体报文(如带有图片、音频和视频的报文)或携带有非ASCII文本格式(例如,非英语语言所使用的字符)的报文的需求。为发送非ASCII文本的内容,发送方的用户代理必须在报文使用附加的首部行。这些额外的首部行定义在RFC 2045和RFC 2046中,多用途因特网邮件扩展(MIME)是对RFC 822的扩展。
支持多媒体的两个关键MIME首部是Content-Type:和Content-Transfer-Encoding:。
Content-Type:首部行允许接收用户代理对报文采取适当的动作。
Content-Transfer-Encoding:首部行提示接收用户代理该报文主体已经使用了ASCII编码,并指出了所用的编码类型。
接收服务器一旦接收到具有RFC 822和MIME首部行的报文,就在该报文的顶部添加一个Received:首部行;该首部行定义了发送该报文的SMTP服务器的名称(from),接收该报文的SMTP服务器的名称(by),以及接收服务器接收到的时间。
有时一个邮件有多个Receive:行,这是因为有的邮件在发送方和接收方之间的路径要经过不止一个SMTP服务器转发。
5、POP3协议
该协议包括了三个阶段:特许阶段、事务处理、更新。
特许阶段:用户代理发送(以明文方式)用户名和口令来鉴别用户。
此处 客户端命令:user:用户名;pass:口令。
服务器响应:+OK、-ERR。
事务处理阶段:用户代理取回报文。
更新阶段:在用户代理(客户)取回报文后,结束POP3会话,并删除该邮件服务器上的那些标志删除的报文。
POP3 vs IMAP
IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP和POP3是邮件访问最为普遍的Internet标准协议。不同的是:
- IMAP提供Webmail与电子邮件客户端之间的双向通信,客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上(如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的)。而POP3在客户端的操作不会反馈到服务器上。
- IMAP更好地支持了从多个不同设备中随时访问新邮件。
- IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。
- POP3需要下载未阅读的邮件,IMAP可以不用把所有的邮件全部下载,而是通过客户端直接对服务器上的邮件进行操作。所有通过IMAP传输的数据都会被加密,从而保证通信的安全性。
- IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件。
第四部分:DNS–因特网的目录服务
主要是解决了IP地址和域名之间是如何映射的问题。
1、DNS简况
- DNS是一个分布式数据库,由很多台DNS服务器按照层次结构组织起来
- DNS运行在端到端系统上,且使用UDP协议(53号端口)进行报文传输,因此DNS是应用层协议
- DNS以C/S的模式工作
- DNS不直接和用户打交道,而是因特网的核心功能(是特例:应用层协议是因特网的核心功能)
e.g:
假设
- Alice通过IE浏览器访问www.hust.edu.cn/index.html
- Alice的主机上存在DNS客户机
结果
- IE浏览器从URL中抽取出域名www.hust.edu.cn,将其传送给DNS客户机
- DNS客户机向DNS服务器发出一个包含域名的查询请求报文。
- DNS服务器向DNS客户机送回一个包含对应IP地址的响应报文。
- DNS客户机将该IP地址传送给IE浏览器。
- IE浏览器向该IP地址所在WEB服务器发起TCP连接。
由上述的例子可以知道DNS域名的解析是在自己的主机上完成的。和浏览器等无关。
2、DNS实现
**
DNS的实现是分布式的,没有一台DNS服务器上有全部的因特网上所有主机的映射。
顶级域DNS服务器:负责顶级域名和所有国家的顶级域名解析工作,例如:com, org, net, gov, cn, jp等
- Network Solution公司负责维护com顶级域DNS服务器
- Educause公司负责维护edu顶级域DNS服务器
权威DNS服务器: 属于某个组织的DNS服务器, 为组织的服务器提供一个权威的域名到IP地址的映射服务 (例如:Web 和 mail)
- 这些DNS服务器一般由所属组织或者服务提供商负责维护
本地DNS服务器
严格的讲,本地DNS服务器其并不属于DNS层次结构中的一层
每一个网络服务提供商都会提供一个本地DNS服务器
有时候,我们将其称为“默认DNS服务器”
当一台主机需要做一个域名查询的时候,查询请求首先被发送到本地域名服务器
本地域名服务器的行为就像一个代理,它会向域名的层次体系中进行进一步的域名查询。
例子:
要点:是给本地DNS服务器,让本地DNS服务器去查找!!
3、DNS缓存
是为了缓存之前查找过的域名,防止不必要的查找。
注意的是:
- 在一定的时间间隔后缓存的条目将会过期(自动消除)
- TLD DNS服务器通常被缓存在==本地DNS服务器==中
4、DNS可提供的服务
1、域名到IP地址的转换
2、主机、邮件服务器别名
3、负载均衡
5、DNS记录的格式
看看即可。
6、DNS记录维护
手动维护基本上。
第五部分:P2P文件共享
P2P是一种所有计算机都是服务器的模式。
N个副本。服务器分送该文件的时间至少是NF/us。
C/S模式要等最慢的客户下载好才结束此次数据传输。
P2P模式只要一份副本即可。(其他的副本可以在客户上分享下载)。
和C/S模式一样,得等到最后的客户下载好。即F/dmin。
在P2P模式下如果同时共享已下载的文件,总的上传速率为Us + U1 + … + Un
总共要上传N个拷贝,所以时间为至少NF/(Us+U1+…+Un)。这三件事并行,因此。。。
BitTorrent(一种P2P协议)
- 洪流(torrent):参与一个特定文件分发的所有对等方的集合
- 追踪器(tracker):跟踪正参与在洪流中的对等方,每个peer加入洪流时向tracker注册自己
- 文件块(chunk):256KB,以chunk为单位分发
BitTorrent的基本工作机制
每个peer周期性地向邻居询问邻居所拥有的块列表
每个peer决定向邻居请求哪些块:最稀罕优先(使得最稀缺的块能迅速分发,最稀缺的块就是在邻居中副本最少的块)
每个peer决定要向哪些请求块的邻居发送:优先响应哪些请求——对换算法(4+1)
每10秒重新确定4个最高速率对等方进行发送
同时每30秒随机选择1个新的邻居
视频流和内容分发网
http和DASH
由于不同客户拥有不同的带宽,同一个客户不同时间的带宽也是变化的。所以采用经HTTP的动态适应性流DASH
服务器:
将视频文件分成多个文件块
每个块都以不同的速率存储、编码
清单文件:为不同的块提供URL
客户端:
定期测量服务器到客户端的带宽
查询清单,一次请求一个块
选择当前带宽可选的最大编码率(带宽高就选择高质量的)
可以在不同的时间点选择不同的编码率(取决于当时的可用带宽)
内容分发网
如何实现将内容推送给很多人?
CDN: 在CDN节点存储内容副本 。在多个地理位置分散的站点(CDN)存储/提供多个视频的副本。q集群选择策略
地理上最为邻近策略
根据商用地理位置数据库,选择与客户LDNS最近的集群
就网络路径的长度或跳数而言,地理上的邻近并不是网络上的邻近
某些用户使用远地LDNS
没有考虑时延和带宽随事件的变化
周期性实施测量策略
周期性测量CDN各集群到全球各LDNS的时延
并不是每一台LDNS允许被测量