课程内容:
- 网络结构
- TCP/UDP
- HTTP 1 / HTTP2 / HTTP3 (QUIC)
- WebSocket
- CDN
- 安全(SSL/TLS/基础密码学)
1、网络基础
1、网络组成部分
- 主机:客户端和服务端【提供信息和接受信息】
- 路由器【转发主机之间的信息】
- 网络协议【提供统一的格式,方便路由器和主机进行解码和编码】
2、网络分为:区域网络、城域网、广域网
3、信息交换方式:电路交换、分组交换
4、网络分层5层:物理层、数据链路层、网络层、传输层、应用层
每层有各自的职责,各自的封装,每一层对上一层来讲是黑盒的
5、协议
协议的存在依赖于连接(或者说依赖于两个实体,实体可以是主机或者路由器)
协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作
报文=链路层头+ip协议的头+tcp协议头+http协议头+http正文
下面的内容对于HTTP2来讲很重要
之前的http版本头\r\n来进行划分的,但是tcp和ip协议的头不是这样的
TCP协议格式
- data offset:载荷相对于tcp数据包的偏移量
- 头部和载荷的分割靠的是data offset
小结:
- 在计算机网络中什么是分组交换?
- 网络分层:让职责更加清晰,降低各层的使用成本
- 网络协议的基本结构:标头和载荷
- 每一层都会把下一层的标头和载荷看成是本层的载荷,并添加自己的标头
web中的网络
http从1到3的过程,使用哪些技术让其更快
除了http协议之外,还有很多因素影响web的性能,比如:物理距离、路由选择
websocket
请求报文:
- 起始行(请求方法 资源路径 版本)
- 头部(名称:值)(名称不区分大小写)
- 正文
响应报文:
- 状态行(版本 状态码 状态信息)
- 头部(头部中的空行将头部和正文分割)
- 响应体
二进制----转ASCII----对人类友好,但是对机器不友好
http连接模型:(请求-响应模型)
- 无法多路复用,头部会有重复
- http1.1 connection:keep-alive 默认的 但是还是有对头阻塞
- http管线:允许发送多个,服务器按照顺序响应(有潜在安全问题,性能提升不高,对于解决对头阻塞几乎没有帮助)
- 对于对头阻塞问题,http1.1常用解决方案是同时建立多个tcp连接,将请求分散在多个tcp连接上,但是建立多个tcp连接的成本比较大;当请求的数量超过tcp连接的数量,仍然需要排队;用户和服务器的带宽是固定的,tcp连接的数量增加的时候,每条tcp连接所能分配的带宽也会相应的减少,完成一个完整http请求的时间也会增加,因此在大部分情况下浏览器会限制一个域名下的tcp连接的数量,通常是6个)
考虑一个问题:在一个tcp连接上,http报文是严格按照顺序的,如果服务器将两个响应交替发送,会有什么样的结果
- 无法判断这一行是属于哪个请求的
http2:将多个http请求拆分到帧中,每一个帧可以携带来自不同http请求的数据,这里的帧和数据链路层中的帧是不同的,虽然工作原理很类似;可以标识每个数据包属于哪个请求,进而实现多路复用
- 帧的长度、帧的类型、当前帧的状态、保留位、帧所属流的id、当前帧的载荷
- 得到流id,判断出载荷属于哪个请求,最终在浏览器或者服务器中重组为完整的请求或响应
http2:帧带来的额外好处(下面可以通过不同的帧来实现)
- 调整响应传输的优先级
- 头部压缩
- server push
为什么出现http3?
- http2解决了http层面的对头阻塞
- http2在tcp层面仍然可能出现对头阻塞
- https是主流,http2会有双倍的握手延迟
HTTP 3:QUIC(Quick UDP Internet Connection)运输层协议
- 解决了各自握手了1RTT(首次)、0RTT(后续),独立的流解决对头阻塞的问题
- 现存网络设备对TCP和UDP支持已经僵化
- UDP不靠谱但是QUIC靠谱(没有拥塞控制、顺序保证、重传)
- QUIC可以为除HTTP协议以外的应用层协议提供支持
CDN:内容分发网络
- 地理位置
- 拉策略用户,推策略网站
websocket
- 有状态的持久连接
- 服务器可以主动推送消息
- 用websocket发送消息延迟比http低
- 需要先使用http协议
- message事件
- websocket可以传输二进制的文件
网络安全
1、网络安全:三要素
- 机密性:攻击者无法获知通信内容
- 完整性:攻击者对内容进行篡改时能被发现
- 身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
2、网络安全:对称加密和非对称加密
- 对称加密:加密、解密使用相同的密钥
- 非对称加密:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密,私钥加密只能用公钥解密
3、网络安全:密码散列函数(哈希函数)
- 输入:任意长度的内容
- 输出:固定长度的哈希值
- 性质:找到两个不同的输入使之经过密码散列函数之后会有相同的哈希值,在计算上是不可能的
- 和之前的对称加密和非对称加密不同
- 根据哈希值不能反推出内容
4、网络安全:机密性
- 加密需要加密算法和密钥等信息(统称为秘密信息)
- 网络是明文的,不安全
怎么在不安全的信道交换秘密信息?
5、网络安全:完整性和身份验证
完整性和身份验证相互关联
6、网络安全:如何实现机密性?
- 已知:网络是明文的
- 如果双方可以通过明文通信商量出秘密信息,那么攻击者也可以
- 所以想要通过明文通信交换秘密信息,通信双方需要先有秘密信息
7、网络安全:如何实现完整性
8、网络安全:如何实现身份验证
非对称加密效率比较低
- 前提是根证书中的公钥
9、HTTPS
- 服务端身份验证靠PKI,客户端身份验证靠HTTP协议