本文同步发布于博客(xblc.netlify.app),如果有更新博客会在第一时间更新
Intro
课程目标
- 建立整理认识
- 网络协议分层的认识
- HTTP123
- CDN原理
- 网络安全原则
分析方法
- 自底向上
- 自顶向下
使用自底向上的方法分析
用一个例子来理解宏观计算机网络结构
计算机网络基础
网络组成部分
- 主机:客户端and服务端
- 路由器、交换机
- 网络协议
网络结构
其实就是由更低层次的网络来组成更高层次的网络
- 局域网
- 城域网
- 广域网
信息交换
- 交换方式:电路交换 & 分组交换
- 传输主要是一个分组合并的过程
网络分层
- 分清职责:物理层、链路层、网络层、运输层和应用层
- 我们重点关注上三层。每一层都是一次抽象,有自己要关心的事情和不需要关心的事情
协议
- 协议的存在依赖于连接
- 协议定义了通信实体间的报文格式和顺序
- 还有采取的动作
标头和载荷
- 标头是类似于寄件人收件人会重点关注的东西,类似于快递贴的单子
- 会有更高层需要额外关注的东西
示例
HTTP协议
- 链路层
- 运输层
- 应用层 TCP协议
Web 中的网络
- 请求
- 头部
- 响应
- 状态行
- 包含正文的响应
HTTP 连接模型
HTTP 1.1
-
使用了简单的请求-响应模型
-
每次请求和响应都要建立一次全新的连接,这样会造成很大的延迟
-
不支持连接的持久化、并发
-
第一个请求完成以后,才能发起后一个请求
-
利用率不高,无法多路复用
-
没法判断请求源
HTTP2
解决队头堵塞(Head of Line blocking)的问题:当一个请求非常大,后一个请求还是等待前一个请求处理完
引入帧
- 把要一次传输的信息封装成一个个帧,每个帧都有关于本次请求或者响应的相关信息,让每个包有自己的身份。
额外带来的好处
- 二进制
- 多次传输
- 调整响应传输的优先级
- 头部压缩
- Server push
仍然存在的问题:TCP造成的队头堵塞,丢包
- TCP 是 HTTP 底层的传输协议,用于处理连接控制等事情
- TCP 有丢包成团的特性
- 虽然帧的特性允许我们在一次连接中可以发送多次请求,但是当一次请求阻塞的时候,所有的请求都要等这个请求在 TCP 连接中结束
HTTP3
引入 QUIC 协议
-
现在的网络设备几乎不支持 TCP + UDP 了
-
QUIC 还能对其他的应用层协议提供良好支持
-
解决了 TCP 的很多缺陷问题
-
0-RTT
-
改善服务器push,可以取消
CDN
协议层面没法解决的问题,物理层面的问题 你HTTP协议再快,也没法解决物理层面的问题
本质是DNS劫持
- DNS一般网站自己解析
- 如果要加速,就会劫持到 CDN 厂商进行处理
- 用户直接访问 CDN 厂商的服务器
如果最近厂商资源不够了
- 拉策略
- 推策略
WebSocket:一种HTTP的代替协议
相比,不同的地方如下
- 状态持久连接
- 允许服务端主动推送消息
- 发送消息延迟更低
网络安全
以上的协议都是明文的,路由器交换器都可以查看,丢弃,修改
所以要做到
- 机密:无法获取
- 核心问题:怎么在不安全的信道交换「秘密信息(密钥,算法)」?
- 必须有攻击者不知道的信息
- 完整:篡改的时候能发现
- 哈希函数
- 身份验证 —— 数字签名技术
- 特性 / 要求
- 可鉴别
- 不可伪造
- 应用过程
- 签名 = 私钥加密,公钥验证
- 消息 = 传输原文 + 签名
- 实例
- 一般对证书进行签名
- 证书链:验证信息的人不一定可信
- 根证书
- PKI 操作系统验证过的秘密信息,以上提到过的通信秘密信息
- 不需要面对面
- 实例:
feishu.cn的证书- 层次
- 颁发者
- 特性 / 要求
HTTPS
-
= HTTP + TLS
-
TLS = 身份验证 + 加解密
-
服务端身份验证 -> KPI
-
客户端身份验证 -> HTTP