计算机网络知识回顾
网络组成部分
主机:客户端和服务端 路由器 网络协议
网络结构:网络的网络
区域网络、城域网和广域网
电路交换和分组交换
电路交换:单次连接 分组交换:不建立链路链接,不独占资源和带宽
网络分层
- 物理层
- 链路层
- 网络层——高速公路
- 运输层——卡车
- 应用层——快递公司
协议
- 协议的存在依赖于连接。
- 协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作。
标头和载荷
HTTP协议示例:
- 链路层——本地帧头部
- 链路层——IP协议头部(IP地址)
- 运输层——TCP协议头部(端口)
- 应用层——HTTP协议头部
报文 = 链路层头 + IP协议头 + TCP协议头 + HTTP协议头 + 正文
TCP协议格式
HTTP协议
- 红色:请求
- 蓝色:响应
请求
- 起始行:方法 资源路径 http版本
- 头部:名称:值
- 正文
响应
- 起始行:http版本 状态码 状态信息
- 头部:名称:值
- 正文:HTTP报文
连接模型
- 左边为http1
- 中间为http1.1(常用,存在队头堵塞问题,通过限制http请求数量,通常为6)
- 右边为http管线
http2
- http1.1:无法多路复用
- http2:帧
- 1-3字节为载荷长度
- 4字节为类型
- 5字节为类型对应的Flags
- 6-9字节第1位保留位,2-32位:流ID
- 随后的8192字节:载荷
好处
- 解决多路复用和队头阻塞问题
- 调整响应传输的优先级
- 头部压缩
- Server Push
3RTT启动
http3
- Quick UDP Internet Connection(QUIC)
- 现存网络设备对TCP和UDP支持已经僵化
- UDP不靠谱但是QUIC靠谱
- QUC可以为除HTTP协议以外的应用层协议提供支持
- 首次1RTT,二次0RTT
CDN
- CDN:DNS劫特
- 域名解析一般由网站自己处理
- 要加速的域名则重定向到CDN厂商的域名解析服务处理
- CDN厂商根据来源确定最近的CDN服务器的IP
- 用户直接访问最近的CDN服务器
WebSocket
- 有状态的持久连接
- 服务端可以主动推送消息
- 用WebSocket发送消息延迟比HTTP低
网络安全
三要素
- 机密性:攻击者无法获知通信内容
- 完整性:攻击者对内容进行篡改时能被发现
- 身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
加密
- 对称加密:加密、解密用同样的密钥
- 非对称加密:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
密码散列函数(哈希)
- 输入:任意长度的内容
- 输出:固定长度的哈希值
- 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
数字签名
- 签名:用于鉴别身份和防止伪造
- 数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证
- 数字签名(指纹)=私钥加密(密码散列函数(原文))
- 消息=原文+数字签名
- 一般用于对公开内容(如包含公钥的证书)进行数字签名,防止篡改
证书
- 根证书是证书链的尽头
- 验证的一连串证书称为证书链
- 分发证书、验证证书的基础设施称为PKI,Public Key Infrastructure
- 所以想要实现身份验证,通信双方需要先有秘密信息,即根证书中的公钥
- PKI保证了普通用户不需要“面对面”和根证书机构交换根证书
HTTPS
- 把HTTP的明文换成密文,再验证身份,即HTTPS。
- HTTPS=HTTP+TLS
- TLS=身份验证+加解密
- 身份验证靠PKI
- 服务端身份验证靠PKI,客户端身份验证靠HTTP协议。
- HTTPS使用PKI完成了除客户端身份验证以外的特性,客户端身份验证靠HTTP协议实现
思考
前端初阶训练营中的计算机网络知识回顾课程讲的比较基础,主要是对协议部分进行了详细介绍,但对八股文中常问的TCP、HTTP连接建立过程没有详细介绍。在课程之余还需要对TCP的三次握手四次挥手等问题进行复习。课程中蟹堡王帝国的描述确实对理解计算机网络有很大的帮助,膜拜字节的老师,值得大家去学习一下。