TCP 协议如何保证可靠传输
- 分段与编号: 应用数据被分割成 TCP 认为最适合发送的数据块,并对每个数据包进行编号。接收方通过排序对数据包进行重组,以正确传递有序的数据给应用层。
- 校验和: TCP 维护首部和数据的检验和,用于检测数据在传输中的变化。如果收到的数据包的检验和错误,TCP 将丢弃该包并不确认接收。
- 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,接收方只允许发送端发送其缓冲区容纳的数据。这避免了数据丢失,并确保接收方能够及时接收。
- 拥塞控制: TCP 通过慢开始、拥塞避免、快重传和快恢复等算法来调整发送方的发送速率,防止过多的数据注入网络引起拥塞。
- ARQ 协议: Automatic Repeat-reQuest 是一种在不可靠服务基础上实现可靠传输的协议,通过确认和超时机制来确保数据的正确传输。
- 超时重传: 发送方设置定时器,若在一定时间内未收到确认,则重传对应的数据包。
ARQ 协议
ARQ(Automatic Repeat-reQuest)协议是数据链路层和传输层的错误纠正协议,包括停止等待 ARQ 和连续 ARQ 两种。
- 停止等待 ARQ: 发送方每发送一个分组就停止发送,等待接收方的确认。若超时未收到确认,重新发送。简单但信道利用率低。
- 连续 ARQ: 发送方维持发送窗口,窗口内的分组可以连续发送。接收方使用累积确认,表示成功接收到的最后一个分组。提高信道利用率。
滑动窗口和流量控制
TCP 利用滑动窗口实现流量控制,确保发送方不会发送过多数据导致接收方无法及时处理。通过窗口字段控制发送窗口大小,即控制发送方的发送速率。
拥塞控制
TCP 的拥塞控制算法包括慢开始、拥塞避免、快重传和快恢复。这些算法调整发送方的发送速率,以防止网络拥塞。拥塞控制需要网络能够承受当前负载。
HTTP 是不保存状态的协议,如何保存用户状态?
HTTP 是无状态协议,为了保存用户状态,引入了 Session 机制。通过在服务端记录用户状态信息,每个用户都被分配一个唯一的 Session 标识,用于标识和跟踪用户。常见场景是购物车等需要跟踪用户操作的情况。 Session 通常有一定的有效期,过期后需要重新创建。