网络
TCP 重传
- 超时重传:设置一个计时器,时间应略长于RTT。如果超时了还没有收到ACK,则立即重传
- 快速重传:当连续收到三个相同的 ACK 时,立即重传
- SACK(选择性确认):接收方可以告诉发送方接收到了哪几个消息,还缺哪个消息
- DSACK(重复确认):接收方收到两个2,就会用DSACK告诉发送方,它有两个 2,别重传了。只是因为网络延迟问题。
TCP流量控制
慢启动
刚开始传输时,发送方每收到一个ACK确认,就把发送窗口翻倍(指数增长)。初始窗口长度为 1.
拥塞避免
当窗口大小达到一个阈值(ssthresh) 时,从指数增长变成线性增长(每轮次窗口+1)。
- 如果此时发生超时重传,阈值被设置为当前窗口长度的一般,窗口长度被重新设置为 1,开始慢启动。
- 如果此时发生快速重传,阈值和窗口都被设置为当前窗口的一半,进行快恢复阶段,窗口长度线性增长。
OSI七层模型
1. 应用层:
- HTTP,传输单位是message(报文)
- FTP传文件
- SMTP负责电子邮件
2. 表示层:
- 编码解码、加密解密
3. 会话层:
- 管理登录状态、负责同步
4. 传输层
- TCP/UDP
- 把报文加上port(源端口号+目标端口号),封装成 segment
- 接收时,TCP 把字节流变成多个 segment,然后把 message 根据 port number转发到不同的端口
5. 网络层
- 把 segment 加上源 IP 和目标 IP,封装成包
- IPv4: 前 24 位代表子网,后 8 为代表设备 ID
- 作用:把包从一个 router 发到另一个 router/根据routing算法规划出包的转移路径
6. 数据链路层
- 把包加上客户端MAC和目标MAC,封装成帧。MAC地址即网卡地址。
- 若在同一子网。它发一个ARP给子网中的所有设备,问谁的IP是xxx, 目标设备返回它的MAC地址。
7.物理层
- 传输比特流0和1
HTTP 1.0, 1.1, 2.0
- HTTP 1.0:
- 每请求一个东西,都要三次握手四次挥手
- HTTP 1.1:
- 支持长连接,支持长连接,同一个连接可以发送多个请求
- HTTP 2.0:
- 多路复用,一个连接可以同时处理多个请求
- HPACK 算法,在服务器维护一张 HPACK 表,里面存放来自客户端的请求头。
- 二进制格式,数据传输快
HTTP 请求报文
- 请求行
- GET/POST
- HTTP版本
- url
- 请求头
- user-agent
- Host: www.test.edu.cn
- Cookie: 123456
- Accept: image/jpeg
- Accept-Encoding:
gzip, deflate
(说明自己可以接收哪些压缩方法) - Content-Type:(如果有请求体的话)
- Content-Length: 112(如果有请求体的话)
- Connection: Keep-alive
- 请求体:如果是GET方法,则请求体为空;POST、PUT方法有请求体