携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情
应用层协议原理
研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序
网络应用程序体系结构
- 应用程序体系结构由应用程序研发者设计 规定了如何在各种端系统上组织该程序
- 客户-服务器体系模型
- P2P体系结构 对位于数据中心的专用服务器由最小的依赖 主机是对等方
- 自拓展性
进程通信
- 进行通信的实际上是进程而不是程序 在两个不同端系统上的进程 通过跨越计算机网络交换报文而相互通信
- 客户和服务器进程
- 在一对进程之间的通信会话场景中 发起通信的进程被表示为客户 在会话开始时等待连接的进程是服务器
- 进程与计算机网络之间的接口
- 进程通过一个称为套接字的软件接口向网络发送报文和从网络接受报文
- 进程寻址
- 主机由IP地址标识 目的地端口号用于标识进程
提供应用程序使用的传输服务
- 可靠数据传输
- 确保由应用程序的一段发送到数据正确 完全地交付给该应用程序的另一端
- 如果不提供可靠数据传输 可能被容忍丢失的应用所接受(一般是多媒体应用)
- 吞吐量
- 可用吞吐量:发送进程能够像接受进程交付比特的速率
- 具有吞吐量要求的应用程序被称为带宽敏感的应用
- 弹性应用能根据当时可用的带宽或多或少地利用可供使用的吞吐量
- 定时
- 保障实时性 有效性
- 安全性
因特网提供的传输服务
- TCP服务
- 面向连接的服务
- 在应用层报文开始流动之前 TCP让客户和服务器相互胡交换传输层控制信息 握手阶段
- 握手结束后 一个TCP连接在两个进程的套接字之间建立了
- 连接为全双工连接 双方进程可以在此连接上同时进行报文收发 结束报文发送时必须拆除连接
- 可靠的数据传输
- 无差错
- 按时交付
- 没有字节的丢失与冗余
- 拥塞控制 -> 为互联网整体带来好处
- TCP安全
- 安全套接字层SSL
- 是对TCP的加强
- 面向连接的服务
- UDP服务
- 不提供不必要服务的轻量级运输协议
- 无连接 不握手
- 不保证报文到达进程
- 还可能会乱序
- 但是它快啊!
应用层协议
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文
- 交换的报文类型
- 报文类型的语法
- 字段的语义
- 确定一个进程何时发送报文 对报文进行响应的规则
本书涉及的网络应用
- Web
- 文件传输
- 电子邮件
- 目录服务
- 流式视频
- P2P
Web和HTTP
HTTP概况
- WEB的应用层协议是超文本传输协议 RFC1946 2616 定义
- Web浏览器是实现了HTTP的客户端 Web服务器是实现了HTTP是实现了HTTP的服务器端
- HTTP定义了Web客户端向Web服务器请求Web页面的方式 以及服务器向客户传送Web页面的方式
- HTTP服务器并不保存关于客户的任何信息 因此HTTP是一个无状态协议
非持续连接和持续连接
- 每个请求/响应对经一个单独的TCP连接发送 非持续连接
- 所有的请求以及响应经相同的TCP连接发送 持续连接
- 大部分浏览器打开5-10个并行的TCP连接
- 往返时间RTT 指一个短分组从客户到服务器然后再返回客户所花费的时间
- 三次握手RTT
- 客户向服务器发送一个小TCP报文段
- 服务器用一个小TCP报文段做出确认和响应
- 客户向服务器返回确认 前两个部分占用一个RTT
- 客户结合三次握手的第三次部分向TCP连接发送一个HTTP报文
- 请求到达服务器后 服务器就在该TCP连接上发送HTML文件
- 总时间 2RTT+服务器传输HTML文件的时间
- 非持续连接缺点
- 对于每个请求响应分配TCP缓冲区与变量 带来严重负担
- 每一个对象经历2RTT
HTTP报文格式
请求报文
请求行
- 方法字段
- URL
- HTTP版本
首部行
空行
实体体
HTTP响应报文
状态行
- 版本
- 状态码
- 短语
首部行
实体体
用户与服务器的交互 Cookie
- HTTP响应报文中cookie首部行
- HTTP请求报文中cookie首部行
- 用户端系统中的cookie文件 由浏览器管理
- 位于Web站点的后端数据库
Web缓存
- Web缓存服务器也叫代理服务器
- CDN 内容分发网络
条件GET方法
- If-Modified-Since 首部行 最后修改时间
- 当客户端向代理服务器请求时 代理服务器向服务器请求 如果最后修改时间没变 则仍使用缓存 304 Not Modify
因特网中的电子邮件
- 电子邮件是异步的通信媒介
电子邮件组成部分
- 用户代理UA
- 邮件服务器
- 简单邮件传输协议
SMTP
因特网电子邮件和核心 二进制-ASCII-解码
与HTTP对比
- HTTP从Web服务器到Web客户传送文件
- SMTP由邮箱服务器到另一个邮件服务器传送文件
- HTTP 大多为主动拉取 SMTP基本上是推送协议 TCP由发送文件机器发起
POP3
邮件访问协议 UA从邮件服务器获取邮件的协议
IMAP
将每个报文与一个文件夹联系起来
使用HTTP的电子邮件
DNS 因特网的目录服务
- 主机名便于记忆 不易于路由器处理
- 主机使用IP地址进行标识
DNS提供的服务
- 主机名->IP地址 域名系统的主要任务
- 使得主机能够查询分布式数据库的应用层协议
- DNS 基于 UDP 使用53端口
- 提供重要服务
- 主机别名
- 邮件服务器别名
- 负载均衡
DNS工作机制概述
- 调用DNS客户端 指明主机名
- 主机DNS接收到后 向网络中发送DNS查询报文
- 类似黑盒
- 单点问题
- 单点故障
- 通信容量
- 集中数据库
- 维护
- 分布式 层次数据库
- 本地DNS服务器
- 根DNS服务器
- 顶级域DNS服务器
- 权威DNS服务器
- DNS缓存
- 因为缓存 除了少数DNS查询之外 根服务器被绕过了
DNS记录和报文
- 所有DNS服务器存储了资源记录
- 资源记录是一个四元组
- Name Value Type TTL
- TTL是该记录的上恩村时间 决定了资源记录应当从缓存中删除的时间
P2P网络分发
- WEB 电子邮件 DNS 都使用了客户-服务器体系结构 极大的依赖于总是打开的基础设施服务器
- P2P体系结构的扩展性
- BitTorrent 用于文件分发的流行P2P协议
- 最稀缺的块
- 随机对换 疏通
视频流和内容分发网
因特网视频
HTTP流和DASH
- 视频只是存储在HTTP服务器中作为一个普通文件 具有URL 服务器通过响应报文发送
- 字节被收集在客户应用缓存中 一旦超过预先设定门限 就开始播放
- 问题
- 用户可用带宽大小不同 编码却相同
- HTTP的动态适应性流 分版本 选择不同码率的视频
- 存储告示文件 对应URL和字节范围
内容分发网
- 单一数据中心问题
- 时延长
- 网络带宽消耗
- 单点故障
- CDN 内容分发网络
- 管理多个地理位置上的服务器
- 服务器存储视频副本 试图将每个用户请求定向到一个将提供最好的用户体验的CDN位置
- 专用CDN/第三方CDN
- 安置原则
- 深入ISP接入网 靠近端用户 减少时延 提高吞吐量
- 邀请做客
- CDN操作
- 主机发送DNS操作
- 本地DNS操作中继到权威DNS服务器 不返回IP地址 向本地DNS返回一个CDN域的主机名
- DNS进入专用DNS基础设施 最终指向内容服务器的IP地址
- 转发内容服务CDN节点的IP地址
- 收到IP地址 直接建立TCP连接 并且发出对应的请求 DASH
- 集群选择策略
- 地理最近
- 基于流量条件
- CDN能够对集群和客户之间的时延和丢包性执行周期性的实时测量
卡密尔「英雄联盟」
谎言不会伤人,真相才是快刀。