计算机网络概论|青训营笔记
1. 计算机网络基础
1.1 网络组成部分
- 主机:客户端、服务端
- 路由器
- 网络协议
1.2 网络结构:网络的网络
- 本地网络
- 本地网络节点的网络
- 本地网络的网络
- 区域网络、城域网和广域网
1.3 信息交换
- 电路交换:线路接受需要建立连接
- 分组交换:传真,不需要建立连接;分组进入输出队列
1.4 网络分层
- 协议
- 协议的存在依赖于连接
- 协议定义了在两个或多个通信实体之间交换的报文格式和顺序
- 以及报文发送或接收一条报文或其他事件所采取的动作
- 标头和载荷
- header
- payload
- 分层
- 物理层
- 链路层-本地帧头部
- 链路层-IP协议头部
- 网络层
- 运输层-TCP协议头部
- 应用层-HTTP协议头部
1.5 TCP协议格式
- 头部和载荷划分依靠data offset
- HTTP对报文做解析\r\n
2. Web中的网络
2.1 HTTP协议
2.1.1 请求
- 请求 URL 协议 (GET / HTTP/1.1)
- Host
- optional header
- 头部名称:头部值
2.1.2 响应
- 协议 状态码 状态文
- Headers
- Payload
2.2 HTTP连接模型
- 请求响应模型:发起请求后需要等到响应在进行下一个请求
- 头部会重复发送,无法被压缩
- HTTP1.0 每个请求需要创建一个连接
- HTTP1.1 Persistent,默认持续一段时间
- 队头堵塞:头请求耗时长,其余请求需要等待
- 无法多路复用
- HTTP1.2 Pipelining:用户发送请求pipeline,服务器按需反馈
- HTTP2 帧:将数据拆分到帧中,实现流式处理方式
- 帧长度、类型、状态、流id、载荷
- 通过头部信息分辨流,在服务器中重组
- 返回:3-帧长度 1类型 1状态 1id -载荷
- 带来额外好处
- 调整响应传输优先级
- 头部压缩
- server push
- 问题 不够快
- 队头堵塞 TCP上丢包
- HTTPS下 响应不够快
- 3RTT启动
- HTTP客户端发起请求
- TCP客户端发起请求
- TCP服务端响应
- TCP客户端请求密钥
- TCP服务端发送密钥
- HTTP客户端发起请求
- HTTP3: QUIC
- Quick UDP internet connection
- 现存网络设备对TCP UDP支持僵化
- UDP不靠谱,QUIC靠谱
- UDP无控制 无顺序 无保证
- QUIC可以为除HTTP协议以外的应用层协议提供支持
- 1RTT
- HTTP客户端发起请求
- QUIC客户端发起钥匙请求
- QUIC服务端发送证书和钥匙
- HTTP客户端发起请求
- QUIC发送钥匙
- 再次请求 0RTT
- HTTP客户端发起请求
- QUIC客户端发起请求 直接请求HTTP需要的内容
- QUIC发起回复 直接回复HTTP请求需要的内容
2.3 CDN
- 极限
- 物理极限决定通信极限
- 价格
- 服务器承载量不足 发生崩溃
- CDN服务器
- 在全国访问不同的服务器
- DNS劫持
- 域名解析由网站自己处理
- 加速的域名重定向到CDN厂商域名解析服务处理
- CDN厂商根据来源确定最近的CDN服务器IP
- 用户直接访问最近的CDN服务器
- 影响速度
- 负载
- 具体地点
- 假DNS
- 只在CDN服务器维护部分策略
- LRU 清除使用最少的内容
2.4 WebSocket
- 特点
- 有状态的持久连接
- 服务端主动推送消息
- websocket发送消息延迟比HTTP低
- Websocket升级 101 switching protocols 然后建立连接
- 发送消息:payload
3.网络安全
3.1 网络安全三要素
- 机密性:攻击者无法获知通信内容
- 完整性:攻击者对内容进行篡改时能被发现
- 身份验证:无法伪装成通信双方的任意一方与另一方通信
3.2 加密
- 对称加密:加解密使用同样的密钥
- 非对称加密:加解密使用不同密钥,公钥只能私钥解密,私钥只能公钥解密
3.3 密码散列函数 hash函数
- 输入任意长度内容
- 输出固定长度哈希值
- 两个不同的输入使其计算后值相同是不可能的
3.4 机密性
- 秘密信息:加密算法、密钥
- 网络明文
- 通信双方需要提前有秘密信息
3.5 完整性
- 明文m 哈希函数H 密钥S
- H(m+s)=h
- m+h发送到接收方 H(m+s)->h' 对比h h'
- 双方需要先有秘密信息
3.6 身份验证
- 签名:鉴别身份防止伪造
- 保证机密性、完整性、身份验证
- 发送方使用自己的私钥加密
- 接收方使用自己的公钥解密
- 数字签名:对明文内容的哈希值进行私钥加密,验证者使用公钥验证
- 用于对公开内容解密
- 根证书-证书链验证
- Public key infrastructure:需要根证书公钥
3.7 HTTPS
- 把HTTP明文换成谜文 在验证身份
- HTTP+TLS
- TLS=身份验证+加解密
- 身份验证靠PKI
- 服务端验证靠PKI,客户端身份靠HTTP协议