0%

应用层

应用层

应用层直接面向用户,是OSI中的最高层。它的主要任务是为用户提供应用的接口,即提供不同计算机间的文件传送、访问与管理,电子邮件的内容处理,不同计算机通过网络交互访问的虚拟终端功能等。

img

第一部分:应用层协议原理

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和socket对接。它们就像是门口的管家,收发报文就是依靠它们的。

第二部分:web应用和HTTP协议

ps:web属于C\S模式

1、web应用

  1. web内容的表达

    Web页面是有一些对象组成的。类似于java中的对象,像Web中的照片、HTML文件等都是对象。每个对象都是可以用URL来定位的。

    URL:主机名+路径名

  2. Web服务器的虚拟路径

    首先一个网站所有的网页及所需的其他资源如图片,Flash等都按一定的目录结构存放在Web服务器上。

    URL

    在这个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连接。

持久连接又可以分为:

  • 非流水线方式:一个对象传输完成方能请求传输下一个
  • 流水线方式:可以一次性发送所有请求,慢慢接收

img

3、HTTP报文类型和格式

请求报文

http请求报文格式

http请求报文格式

响应报文

HTTP响应报文格式HTTP响应报文格式

用户-服务器交互:Cookie

因为HTTP是无状态的,所以我们使用Cookie来保留我们在网站上的一些历史记录等。

Cookie技术的组成部分:

  • 在HTTP响应报文中有一个Cookie首部行
  • 在HTTP请求报文中也有一个Cookie首部行
  • 在用户的端系统中保留了一个Cookie文件,由用户浏览器负责管理
  • 在Web站点有一个后端数据库

cookie

第三部分:因特网中的电子邮件

1、电子邮件系统的构成

1、用户代理

2、邮件服务器

  • 邮箱 包含了收到的用户邮件 (尚未被阅读)
  • 报文 队列包含了外发的 邮件报文

3、简单邮件传输协议:SMTP(发送协议

  • SMTP 协议用在邮件服务器之间发送邮件
  • 客户端: 将邮件发送到邮件服务器
  • “服务器”: 接收和转发邮件

接收邮件是其他协议:POP3协议或者IMAP协议等

1
2
graph LR
A[用户代理]-->B[邮件服务器]---c[邮件服务器]-->D[用户代理]

2、SWTP协议

  1. 使用 TCP可靠的传送邮件报文, 端口

  2. 直接传输: 发送服务器到接收服务器

  3. 传输的三个阶段

    • 握手(打招呼)

    • 报文传输

    • 结束

  4. 命令/响应交互

    • 命令: ASCII文本

    • 响应: 状态码和短语

  5. 邮件报文必须使用7-bit ASCII表示

PS:如果接收方的邮件服务器没有打开,那么邮件就会在发送方的邮件服务器中缓存。

3、SWTP VS HTTP

SWTPvsHTTP

4、邮件报文格式

首部诸行, e.g.,

1
2
3
From: alice@crepes.fr
To: bob@hamburger.edu
Subject: Searching for the meaning of life.

邮件报文格式

首部行和信体用一个空行隔开。

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编码,并指出了所用的编码类型。

MIME信体

接收服务器一旦接收到具有RFC 822和MIME首部行的报文,就在该报文的顶部添加一个Received:首部行;该首部行定义了发送该报文的SMTP服务器的名称(from),接收该报文的SMTP服务器的名称(by),以及接收服务器接收到的时间。

有时一个邮件有多个Receive:行,这是因为有的邮件在发送方和接收方之间的路径要经过不止一个SMTP服务器转发。

5、POP3协议

该协议包括了三个阶段:特许阶段、事务处理、更新。

  1. 特许阶段:用户代理发送(以明文方式)用户名和口令来鉴别用户。

    ​ 此处 客户端命令:user:用户名;pass:口令。

    ​ 服务器响应:+OK、-ERR。

  2. 事务处理阶段:用户代理取回报文。

  3. 更新阶段:在用户代理(客户)取回报文后,结束POP3会话,并删除该邮件服务器上的那些标志删除的报文。

POP3 vs IMAP

IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP和POP3是邮件访问最为普遍的Internet标准协议。不同的是:

  • IMAP提供Webmail与电子邮件客户端之间的双向通信,客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上(如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的)。而POP3在客户端的操作不会反馈到服务器上。
  • IMAP更好地支持了从多个不同设备中随时访问新邮件。
  • IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。
  • POP3需要下载未阅读的邮件,IMAP可以不用把所有的邮件全部下载,而是通过客户端直接对服务器上的邮件进行操作。所有通过IMAP传输的数据都会被加密,从而保证通信的安全性。
  • IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件。

第四部分:DNS–因特网的目录服务

主要是解决了IP地址和域名之间是如何映射的问题。

1、DNS简况

  1. DNS是一个分布式数据库,由很多台DNS服务器按照层次结构组织起来
  2. DNS运行在端到端系统上,且使用UDP协议(53号端口)进行报文传输,因此DNS是应用层协议
  3. DNS以C/S的模式工作
  4. DNS不直接和用户打交道,而是因特网的核心功能(是特例:应用层协议是因特网的核心功能)

e.g:

假设

结果

  • 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服务器上有全部的因特网上所有主机的映射。

顶级域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缓存

是为了缓存之前查找过的域名,防止不必要的查找。

注意的是:

  1. 在一定的时间间隔后缓存的条目将会过期(自动消除)
  2. TLD DNS服务器通常被缓存在==本地DNS服务器==中

4、DNS可提供的服务

1、域名到IP地址的转换

2、主机、邮件服务器别名

3、负载均衡

5、DNS记录的格式

看看即可。

image-20191201145010879

6、DNS记录维护

手动维护基本上。

第五部分:P2P文件共享

P2P是一种所有计算机都是服务器的模式。

image-20191201145250021

N个副本。服务器分送该文件的时间至少是NF/us。

C/S模式要等最慢的客户下载好才结束此次数据传输。

P2P模式只要一份副本即可。(其他的副本可以在客户上分享下载)。

和C/S模式一样,得等到最后的客户下载好。即F/dmin。

在P2P模式下如果同时共享已下载的文件,总的上传速率为Us + U1 + … + Un

总共要上传N个拷贝,所以时间为至少NF/(Us+U1+…+Un)。这三件事并行,因此。。。

image-20191201150023941

BitTorrent(一种P2P协议)

  1. 洪流(torrent):参与一个特定文件分发的所有对等方的集合
  2. 追踪器(tracker):跟踪正参与在洪流中的对等方,每个peer加入洪流时向tracker注册自己
  3. 文件块(chunk):256KB,以chunk为单位分发

BitTorrent的基本工作机制

  1. 每个peer周期性地向邻居询问邻居所拥有的块列表

  2. 每个peer决定向邻居请求哪些块:最稀罕优先(使得最稀缺的块能迅速分发,最稀缺的块就是在邻居中副本最少的块)

  3. 每个peer决定要向哪些请求块的邻居发送:优先响应哪些请求——对换算法(4+1)

    • 每10秒重新确定4个最高速率对等方进行发送

    • 同时每30秒随机选择1个新的邻居

视频流和内容分发网

http和DASH

由于不同客户拥有不同的带宽,同一个客户不同时间的带宽也是变化的。所以采用经HTTP的动态适应性流DASH

  1. 服务器:

    • 将视频文件分成多个文件块

    • 每个块都以不同的速率存储、编码

    • 清单文件:为不同的块提供URL

  2. 客户端:

    • 定期测量服务器到客户端的带宽

    • 查询清单,一次请求一个块

    • 选择当前带宽可选的最大编码率(带宽高就选择高质量的)

    • 可以在不同的时间点选择不同的编码率(取决于当时的可用带宽)

内容分发网

如何实现将内容推送给很多人?

CDN: 在CDN节点存储内容副本 。在多个地理位置分散的站点(CDN)存储/提供多个视频的副本。q集群选择策略

  1. 地理上最为邻近策略

    • 根据商用地理位置数据库,选择与客户LDNS最近的集群

    • 就网络路径的长度或跳数而言,地理上的邻近并不是网络上的邻近

    • 某些用户使用远地LDNS

    • 没有考虑时延和带宽随事件的变化

  2. 周期性实施测量策略

    • 周期性测量CDN各集群到全球各LDNS的时延

    • 并不是每一台LDNS允许被测量