1计算机网络 | 青训营笔记
1 前言&课程介绍
- 描述一个复杂系统通常有两种方式:自底向上、自顶向下
- 自底向上:用于构建对计算机网络的基本认知。从一个个基础节点开始,不断增加复杂度,直到构建出完整的计算机网络
- 自顶向下:用于解释现成网络应用协议的特性,工作原理等。从最高层次的实际需求开始描述如何构建满足实际需求的应用
2 蟹堡王帝国
- 通过构建蟹堡王帝国类比计算机网络的构建,建立基本认知(自底向上)
3 计算机网络基础
- 网络组成部分:
- 主机:客户端和服务端 负责提供信息或接收信息
- 路由器:负责转发主机之间的信息
- 网络协议:提供统一的格式,方便路由器和主机对信息进行编码和解码
- 网络结构:网络的网络
- 信息交换方式:电路交换&分组交换
- 电路交换:需要建立电路连接,预留资源(带宽)
- 分组交换:√
- 接收到新的分组后会加入输出队列,按顺序输出。当队列满了,丢弃新到的分组(即丢包)
- 大的报文分解成n个小的报文,小的报文经过分组通过网络送到目的地,再由主机上的软件把分组拼成完整的报文
- 网络分层
- 应用层、运输层、网络层、数据链路层、物理层
- 对于上一层的调用者无需关心下一层中可能出现的任何问题
- 协议
- 协议的存在依赖于连接
- 协议的存在避免了用错误的方式解读数据
- header&payload
- HTTP协议示例:
- Null/Loopback:说明这个帧是本机的帧,源地址和目标地址都是本机,不需要经过别的交换机
- 链路层的数据18 00 00 00:24(十进制),代表这个链路层帧使用的是ipv6
- IP层:使用ipv6,Src: ::1, Dst: ::1表示源IP和目标IP都是本机地址。IP协议的头部为5-44字节,包含IP协议的版本、源IP地址、目标IP地址、载荷长度等信息
- TCP协议层:头部为20字节,包含源端口号、目标端口号、序列号、头部长度、载荷长度信息等
- HTTP协议层:同样包含头部和载荷两部分信息。头部中包含请求路径、请求域名等
- 报文 = 链路层的头+IP协议的头+TCP协议的头+HTTP协议的头+HTTP正文
- TCP协议格式
- 对HTTP2很重要
- 注意在HTTP协议中,HTTP1.1和以前的版本中,头部和载荷是通过两个换行符和回车符进行划分;而TCP和IP协议并不是
- 以TCP协议为例:TCP中头部和载荷的分割靠data offset部分,这部分相对于TCP数据包来说是固定的,永远在第13、14字节;而HTTP中却是要对HTTP报文做解析,将二进制数据转化为ASCII数据后,发现连续的换行符和回车符才能确定头部和载荷的边界
4 Web中的网络
- 对于web应用来说,除了HTTP协议还有很多因素影响web的性能,比如物理距离、TCP层面的路由选择等
- HTTP协议:
- 请求:
- 请求方法/资源路径/HTTP版本
- 头部名称(不区分大小写):头部值
- 空行:分割头部和正文
- 正文(get请求没有正文)
- 响应
- 状态行:HTTP版本 状态码 状态信息(可自定义)
- 头部
- 空行
- 正文
- HTTP连接模型:
- HTTP报文易理解,TCP难懂,HTTP报文可以用明文(ASCII)展示出来
- HTTP用来请求响应模型
- 网络利用率不高,也无法在一条连接上进行多路复用:在完整请求中间插入另一个请求的内容会导致HTTP无法分辨这部分内容是来自哪的请求
- 请求的头部和响应的头部有很多重复,比如cookie会重复发很多次,这些重复无法压缩,增加报文的体积
- HTTP1.0:多次建立连接,关闭连接
- HTTP1.1:无法多路复用
- 队头堵塞:当一个请求非常大,需要很长时间处理,第二个很小的请求也需要等待第一个请求结束后才能发出,导致很大的资源浪费 HTTP1.1最常用的方案是同时建立多个连接,但成本巨大
- HTTP2:帧(不同于链路层的帧,但工作方式相似)
- 帧格式
- 就有很多类型的帧了
- 解决了多路复用和队头堵塞的问题,还调整响应传输的优先级,头部压缩,Server Push
- 但在TCP上还是会有队头堵塞
- 3 RTT启动,效率很低
- HTTP3:QUIC
- 避免了TCP队头堵塞
- 并将QUIC协议内置进QUIC,降低了握手延迟,可以实现首次1 RTT,二次0 RTT的连接
- CDN:DNS劫持
- 拉策略
- 推策略
- 从物理层面解决HTTP协议无法解决的问题,提升web应用的性能
- WebSocket
- 是除了HTTP协议另一个协议
- 是有状态的持久连接,可主动推送消息,延迟比HTTP低
- 是HTTP升级而来的
- 报文结构
5 网络安全
- 上面讲的协议都是明文,在一台电脑到另一台电脑的过程中中途经过的所有路由器、交换机都能看到消息的全部内容,甚至丢弃、篡改。明文导致很多行为不能通过网络进行
- 网络安全:
- 三要素
- 对称加密和非对称加密
- 区别就在于加密和解密使用的密钥是一个还是一对
- 非对称:公钥&私钥
- 密码散列函数(哈希函数)
- 机密性
- 完整性和身份验证
- 如何实现机密性
- 需要先有秘密信息
- 对比哈希值,如果一致,说明没有被篡改
- 如何实现身份验证
- 数字签名
- 非对称加密
- 密码散列函数(原文)
- 根证书、证书链
- PKI
- HTTPS
- 服务端身份验证使用PKI,客户端身份验证靠HTTP协议