HTTP和TCP的数据传输过程(易错点)

image-20251208174529794

特性 HTTP/1.0 HTTP/1.1 (默认)
连接模式 默认非持久连接。每个请求/响应对都需要建立和关闭一个独立的 TCP 连接。 默认持久连接。一个 TCP 连接可以处理多个请求。
性能影响 连接建立和关闭的“三次握手、四次挥手”开销大,严重影响性能,尤其是加载包含多个资源的网页时。 大幅减少延迟和开销。复用连接避免了反复建立连接的成本,是性能优化的基础。
明确关闭 如果需要保持连接,必须使用 Connection: keep-alive 头部。 如果需要关闭连接,必须使用 Connection: close 头部。
特性 HTTP/1.0 HTTP/1.1
默认连接方式 非持久连接。每个请求后连接关闭。 持久连接。连接默认保持打开以供重用。
流水线支持 不支持。必须收到上一个响应,才能发下一个请求。 在协议标准中支持流水线(RFC 2616定义)。允许在未收到响应时发送后续请求。
现实应用情况 无流水线。要模拟持久连接需用非标准头 Connection: keep-alive 持久连接被广泛应用,但流水线基本被所有现代浏览器和服务器禁用

image-20251208174648512

image-20251208174701824

疑惑点:1.1的流水线基本被禁用为啥可以一次性可以发送两个MSL?

关键在于:应用层协议(HTTP)的“请求/响应”模型 与 传输层协议(TCP)的“数据传输”机制是独立的两个层面。

  1. HTTP/1.1 持久连接(我们实际在用的模式)
    • 模型“请求-响应-再请求-再响应”的串行模式。客户端必须为每个资源(HTML、图片、CSS等)单独发送一个HTTP请求报文。只有收到当前资源的响应后,浏览器解析发现还需要新资源,才会发送下一个请求。
    • 单位:以 “HTTP 消息” (一个完整的请求或响应报文)为单位进行交换。
  2. TCP 数据传输与拥塞控制
    • 模型面向字节流的、分段的数据管道。一旦连接建立,发送方(如Web服务器)可以将需要发送的字节流切割成多个TCP报文段(如MSS大小),并(在拥塞窗口允许的情况下)连续发送出去
    • 单位:以 “TCP 报文段” 为单位进行传输。
    • 关键机制慢启动与拥塞窗口。拥塞窗口限制了发送方在收到一个确认之前可以发送的最大数据量(单位是字节或报文段)。这个窗口大小会动态变化。

奥这下看懂了,因为这个图片是3个MSL,我一次HTTP请求,就可以请求这个图片,算是一次HTTP请求和响应,但是数据有3个MSL,这就看TCP咋传了

就比如说我这个图片有100MSL,那2个MSL发完就是一次性发4个,8个,16个…..