1. 计算机网络基础
1.1 网络组成部分
-
主机:客户端和服务端
-
路由器
-
网络协议
网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。大多数网络都采用分层的体系结构,每一层都建立在它的下层之上,向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。
-
网络结构:网络的网络
- 本地网络
- 全国通信网络
- 区域网络、城域网和广域网
-
电路交换与分组交换
-
电路交换
电路交换需要建立一条专用的数据通信路径,这条路径上可能包含许多中间节点。这条通信路径在整个通信过程中将被独占,直到通信结束才会释放资源。电路交换适合实时性要求较高的大量数据传输的情况。
-
分组交换
报文交换以报文作为数据传输单位,携带有源地址和目的地址等信息。
-
-
网络分层
-
协议
协议的存在依赖于连接。协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作。
- 标头和载荷
-
TCP协议格式
1.2 小结
- 网络组成部分:由主机、路由器、交换机等组成
- 网络结构:网络的网络
- 信息交换方式:电路交换和分组交换
- 网络分层:分清职责,物理层、链路层、网络层、运输层和应用层
- 网络协议:标头和载荷
2. Web 中的网络
2.1 HTTP 连接模型
-
短链接模型
HTTP 的传输协议主要依赖 TCP 提供从客户端到服务器端之间的连接。早期 HTTP 使用一个简单模型来处理这样的连接。这些连接的生命周期是短暂的:每发起一个请求时都会创建一个新的连接,并在收到应答时立即关闭。
-
长连接模型
它会保持连接去完成多次连续的请求,减少不断重新打开连接的时间。
-
流水线模型
多个连续的请求甚至都不用等待立即返回就可以被发送,这样就减少了耗费在网络延迟上的时间。
-
HTTP 1.1:无法多路复用
- 对头堵塞
Head of Line Blocking
- 对头堵塞
-
HTTP 2:帧
-
前三个字节:载荷长度
-
第四个字节:类型
-
第五个字节:类型对应的Flags
-
第六到第九字节:第1位:保留位,第2-32位:流ID
-
随后的n个字节:载荷
-
额外的好处:
- 调整相应传输的优先级
- 头部压缩
- Server Push
-
队头堵塞,但是在TCP上
-
3
RTT启动
-
-
HTTP 3:
QUICQuick UDP Internet Connection- 现存网络设备对
TCP和UDP支持已经僵化 UDP不靠谱但是QUIC靠谱QUIC可以为除HTTP协议以外的应用层协议提供支持- 第一次访问:1
RTT - 第二次访问:2
RTT
2.2 CND
-
CDN全称是内容分发网络。其目的是让用户能够更快速的得到请求的数据。 -
DNS劫持:- 域名解析一般由网站自己处理
- 要加速的域名则重定向到
CDN厂商的域名解析服务处理 CDN厂商根据来源确定最近的CDN服务器的**IP**- 用户直接访问最近的
CDN服务器
2.3 WebSocket
- 有状态的持久连接
- 服务端可以主动推送消息
- 用
WebSocket发送消息延迟比HTTP低
2.4 小结
- HTTP 1 2 3 的演进历史
CDN解决了 HTTP 协议之外的问题WebSocket从 HTTP 协议升级而来
3. 网络安全
3.1 网络安全三要素
-
机密性:攻击者无法获知通信内容
-
加密需要加密算法和密钥等信息(统称为秘密信息)
-
网络是明文的,不安全
-
实现:
- 想要通过明文通信交换秘密信息,通信双方需要现有秘密信息
-
-
完整性:攻击者对内容进行篡改时能被发现
-
实现:
- 想要实现完整性,通信双方需要现有秘密信息
-
-
身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
-
完整性和身份验证相互关联
-
实现:
-
签名:用于鉴别身份和防止伪造
-
数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证
- 数字签名(指纹)=私钥加密(密码散列函数(原文))
- 消息=原文+数字签名
- 一般用于公开内容
-
-
非对称加密性质
-
证书链
-
分发证书、验证证书的基础设施称为:
KPI,Public Key Infrastructure
要想实现身份验证,通信双方需要现有秘密信息,即根证书中的公钥
-
-
3.2 对称加密和非对称加密
- 对称加密: 加密和解密的秘钥使用的是同一个
- 非对称加密: 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥
publickey和私有密钥privatekey。公钥加密只能用私钥解密、私钥加密只能用公钥解密
3.3 密码散列函数(哈希函数)
- 输入:任意长度内容
- 输出:固定长度的哈希值
- 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
3.4 HTTPS
- 把 HTTP 的明文换成密文,在验证身份,即 HTTPS
- HTTPS=HTTP+TLS
- TLS=身份验证+加解密(PKI)
3.5 小结
- 网络安全三要素:机密性、完整性和身份验证
- 在没有提前交换秘密信息的前提下,无法在不安全的信道交换秘密信息
KPI保证了普通用户不需要“面对面”和根证书机构交换根证书- HTTPS 使用 PKI 完成了除客户身份验证以外的特性,客户端身份