# 二。第二章:应用层
# 1. 应用层原理
# (1). 创建一个新的网络应用
- 编程:
- 在不同的端系统上运行
- 通过网络基础设施提供的服务应用进程彼此通信
- 如 Web:
- Web 服务器软件与浏览器软件通信
- 网络核心中没有应用层软件
- 网络核心中没有应用层功能
- 网络核心只有再端系统上存在,快速网络应用开发和部署
# (2). 网络应用的体系加购
- 客户 — 服务器模式 (C/S:client/server)
- 对等模式 (P2P:Peer to Peer)
- 混合体:客户 — 服务器和对等体系结构
# (3). 进程通信
# (4). 分布式进程需要解决的问题
标识进程,需要定义两种信息:
- 主机的地址
- 主机由其 IP 地址标识
- 再目的主机中指定接收进程的标识符
- 用目的端口号来进行标识,特定的服务端拥有特定的端口号
TCP 之上的套接字 (socket)
UDP 之上的套接字 (socket)
套接字
应用层协议
Internet 传输层提供的服务
- TCP 服务
- 可靠的传输服务
- 流量控制:发送方不会淹没接收方
- 拥塞控制:当网络出现用塞时,能抑制发送方
- 不能提供的服务:时间保证、最小吞吐保证和安全
- 面向连接:要求再客户端进程和服务器进程之间建立连接
- UDP 服务
- 不可靠数据传输
- 不能提供的服务:可靠、流量控制、拥塞控制、时间、带宽保证、建立连接
# 2. Web and HTTP
# (1). 术语
- Web 页:由一些对象组成
- 对象可以是 HTM 文件,JPEG 图像、Java 小程序、声音剪辑文件等
- Web 也含有一个基本的 HTML 文件,该基本文件、又包含若干对象的引用 (链接)
- 通过 URL 对每个对象进行引用
- 访问协议,用户名,口令字,端口等
- URL 格式:
# (2). HTTP 概况
HTTP:超文本传输协议
Web 的应用层协议
客户 / 服务器模式
- 客户:请求、接收和显示 Web 对象的浏览器
- 服务器:对请求进行响应,发送对象的 Web 服务器
HTTP 1.0:RFC 1945
HTTP 1.1:RFC 2068
HTTP 使用在 TCP 上
# (3). HTTP 链接
响应时间模型
# (4).HTTP 报文格式
提交表单输入
POST 方式:
- 网页通常包括表单输入
- 包含实体主体 (entity body) 中的输入被提交到服务器
URL 方式:
- 方法:GET・
- 输入通过请求行的 URL 字段上载
方法类型:
TCP 无边界,需要进程自己去区分前部 message 和后部 message。- HTTP 响应状态码:
# (5). 用户 — 服务器状态:Cookies
# (6).Web 缓存 (代理服务器)
- 目标:不访问原时服务器,就满足客户的请求
- 用户设置浏览器:通过缓存访问 Web
- 浏览器将所有的 HTTP 请求发给缓存
- 在缓存中的对象:缓存直接返回对象
- 如对象不在缓存,缓存请求原始服务器,然后再将对象返回给客户端
- 缓存既是客户端又是服务端
- 通常缓存是由 ISP 安装 (大学、公司、居民区 ISP)
- Web 缓存的好处:
- 降低客户端请求响应时间
- 可以大大减少一个机构内部网络与 Internet 接入链路上的流量
- 互联网大量采用缓存:额可以使较弱的 ICP 也能够有效提供内容
- 非 Web 缓存:
- Web 缓存:
# (7). 条件 GET 方法
# 3. FTP:文件传输协议
向远程主机上传输文件或从远程主机接收文件
客户 / 服务器模式
- 客户端:发起传输的一方
- 服务器:远程主机
ftp:RFC 959
ftp 服务器:端口号为 21
# 4. Email
3 个主要组成部分:
用户代理
- 又名 “邮件阅读器”
- 撰写、编辑和阅读邮件
- 如 outlook、Foxmail
- 输出和输入邮件保存在服务器上
邮件服务器
- 邮箱中管理和维护发送给用户的邮件
- 输出报文队列保持待发送邮件报文
- 邮件服务器之间的 SMTP 协议:发送 email 报文
- 客户:发送方邮件服务器
- 服务器:接收端邮件服务器
简单邮件传输协议:SMTP
POP3 协议
# 5. DNS
# (1). DNS 必要性
- DNS 完成域名到 IP 地址的转化
# (2). DNS 总体思路和目标
- DNS 的主要思路
- 分层的、基于域的命名方式,用于解决设备命名问题
- 若干分布式的数据库存储域名和相应 IP 地址,完成名字到 IP 地址的方式,解决域名到 IP 地址的问题
- 运行在 UDP 之上端口号为 53 的应用服务,DNS 的实现具有事务性特点,需要即时转换
- 核心的 Internet 功能,但以应用层协议实现,在网络边缘实现
- 网路边缘处理复杂性
- DNS 主要目的
- 实现主机名 - IP 地址的转换 (name/IP translate)
- 其他目的
- 主机别名到规范名字的转化:Host aliasing
- 邮件服务器别名到邮件服务器的正规名字的转换:Mail server aliasing
- 负载均衡:Load Distribution
# (3). DNS 域名结构
- 一个层面命名设备会有很多重名
- DNS 采用层次树状结构的命名方法,以倒着的树来命名
- Internet 跟被划分为几百个顶级域 (top lever domains)
- 每个 (子) 域下面课可划分为若干个子域 (subdomains)
- 树叶是主机
- 全球共有 13 个根名字服务器
# (4). DNS 的名字空间
- 域名
- 从本域网上,直到树根
- 中间使用 “.” 间隔不同的级别
- 例如:ustc.edu.cn auto.usts.edu.cn
- 域的域名:可以用于表示一个域
- 主机的域名:一个域上的一个主机
- 域名的管理
- 域与物理网络无关
- 域遵从组织界限,而不是物理网络
- 一个域的主机可以不在一个网络上
- 一个网络的主机可以不在一个域
- 域的划分是逻辑的,而不是物理的
# (5). 域名 - IP 地址转化
一个名字服务器的问题
- 可靠性问题:单点故障
- 扩展性问题:通信容量
- 维护问题:远距离的集中式数据库
区域
- 区域的划分有区域管理者自己决定
- 将 DNS 名字空间划分为互不相交的区域,每个区域都是树的一部分
- 名字服务器:
- 每个区域都有一个名字服务器;维护着它所管辖区域的权威信息
- 名字服务器允许被放置在区域之外,以保障可靠性
权威 DNS 服务器:组织机构的 DNS 服务器,提供组织机构服务器 (如 Web 和 mail) 可访问的主机和 IP 之间的映射。组织机构可以选择实现自己维护或某个服务提供商来维护。
顶级域 (TLD) 服务器:
区域名字服务器维护资源记录
# (6). DNS 的大致工作过程
本地名字服务器 (Local Name Server)
名字服务器
当本地名字服务器拥有本地缓存时,直接返回
递归查询
- 当本地服务器没有缓存,不能解析时,会顺着上一层次的服务器进行查询,
迭代查询
# (7). DNS 协议、报文
提高性能
维护问题:新增一个域
攻击 DNS
# 6. P2P 应用
# (1). 纯 P2P 架构
# (2). 文件分发时间
# (3).P2P 文件分发
结构化 (DHT) 和非结构化 P2P
覆盖网络:Peer 节点之间有逻辑撒上的网络连接,有数据上的交流,有 “边”,有邻居的关系
结构化:Peer 节点构成的的覆盖网络是有序的,像树,环类似的有序结构
每一份资源都由一组关键字进行标识。系统对其中的每一个关键字进行 Hash,根据 Hash 的结果决定此关键字对应的那条信息(即资源索引中的一项)由哪个用户负责储存。
非结构化:Peer 节点构成的的覆盖网络是无序的
集中化目录
问题:
- 单点故障
- 性能瓶颈
- 侵犯版权
完全分布式
- Gnutella:
- 在已有的 TCP 连接上发送查询报文
- 对等方转发查询报文
- 以反方向返回查询命中报文
混合体
BitTorrent:(非结构化代表)
文件被分为一个个块 256KB,再使用另一张由每个 1bit 组成的 map 来表示是否拥有文件块。一个 bit 中 1 表示拥有,0 表示没有
网络中的这些 peer 发送接收文件块,相互服务
# (4). CDN
流化服务
- 将视频为许多的流组成,在看视频时,一边播放视频一边加载后面的内容,而不是将整个视频先下载,再观看。这样大大减少了用户的等待时间
- DASH
>CND (内容分发网)
CDN 原理
上图假设一个内容提供商 NetCinema 雇佣了第三方内容提供商 KingCDN 来分发视频,在 NetCinema 的 Web 网页上,它的每个视频都被指派了一个 URL,如 video.netcinema.com/23425235 ,接下来将会发生图中的 6 个步骤:
- 用户访问 www.NetCinema.com , 并返回 video.netcinema.com/23425235 ;
- 用户点击 video.netcinema.com/23425235 时,该用户的主机发送了一个对于 video.netcinema.com 的 DNS 请求
- 用户的本地 DNS 服务器(LDNS)将该 DNS 请求中继到一个用户 NetCinema 的权限 DNS 服务器,该服务器看到是 video,就将 DNS 请求移交给 KingCDN,NetCinema 权威 DNS 服务器不返回 IP 地址,而是返回一个 KingCDN 域的主机名,如 123.kingcdn.com
- 当 LDNS 拿到 123.kingcdn.com 时,就去请求 KingCDN 权威 DNS 服务器,KingCDN 权威 DNS 服务器这时返回的才是 KindCDN 服务器的 IP 地址
- LDNS 把 KindCDN 服务器的 IP 地址返回给用户
- 用户拿到 KindCDN 服务器的 IP 地址后,就发起连接请求,并获取资源
集群选择策略
- 任何 CDN 的部署,其集群选择策略很重要,因为关乎到用户体验和网络性能,用户选择太远的集群,就会造成网络损耗,所以集群选择策略有两种:
- 基于地理位置最为临近的。这种可以根据用户 IP 作出选择,比如基于商用地理位置数据库可以查询到用户的地理位置
- 基于当前流量条件选择最优。这种需要对集群和客户之间的时延和丢包性能做周期性的实时测量
# (5). TCP 套接字编程
- 2 种传输层服务的 socket 编程
- TCP:可靠的、字节流服务
- UDP:不可靠 (数据 UDP 数据报) 服务
- 套接字:应用进程与端到端船速协议 (TCP 或 UDP) 之间的门户
- TCP 服务:从一个进程向另一个进程可靠地传输字节流
- 工作过程:
- 两种结构体
- >
- >
# (6). UDP 套接字编程
- >
- >