菜鸡的计算机网络学习笔记

40 阅读2分钟
  • Web and HTTP:

    web page: 由一些对象组成,对象可以是HTMl文件,JPEG图像,JAVA小程序,声音剪辑文件等.HTML文件还可能包含若干对象的引用,通过URL对每个对象进行引用.

  • 无状态HTTP:

    • 协议层面:服务器不保存客户端上下文信息,每个请求独立处理
    • 技术表现:缺少自动的会话跟踪机制(需通过 Cookie/Session 人工实现)
    • 好处:降低服务器内存开销,简化故障恢复机制,提升横向扩展能力
    • 现实: Cookie(客户端状态存储)Session(服务端状态映射)JWT(分布式状态令牌)
    # 无状态请求示例
    GET /page1 HTTP/1.1
    GET /page2 HTTP/1.1  # 服务器无法自动关联两个请求
    
    # 有状态模拟(通过 Cookie)
    GET /page1 HTTP/1.1
    Cookie: sessionid=abc123
    
    GET /page2 HTTP/1.1
    Cookie: sessionid=abc123  # 服务器通过 Cookie 关联会话
    
  • 非持久HTTP和持久HTTP:

    • 非持久 HTTP (HTTP/1.0)

      sequenceDiagram Client->>Server: TCP 握手 Client->>Server: GET /index.html Server->>Client: 返回资源 + 关闭连接 Client->>Server: 新 TCP 握手 Client->>Server: GET /style.css Server->>Client: 返回资源 + 关闭连接

      性能损失:

      • 平均每个对象增加 2×RTT(握手+请求)
      • 现代网页含 50+ 资源时延迟呈指数增长
    • 持久HTTP/1.1 Keep-Alive

      Connection: Keep-Alive
      Keep-Alive: timeout=5, max=100
      
      # 伪代码示例
      connection = create_tcp_connection()
      for i in range(max_requests):
          send_request(connection)
          receive_response(connection)
          if timeout_reached: 
              break
      close_connection(connection)
      

流水线 vs 非流水线

  • 非流水线(默认模式):

    timeline
      title 非流水线请求时序
      Client : 请求1 -> 等待响应1 -> 请求2
      Server : 处理请求1 -> 响应1 -> 处理请求2
    
  • 流水线模式:

    timeline
      title 流水线请求时序
      Client : 请求1 -> 请求2 -> 请求3
      Server : 处理请求1 -> 响应1 -> 处理请求2 -> 响应2
    
  • 对比分析表:

    特性非流水线流水线
    网络利用率低(RTT 间隙)高(连续发送)
    实现复杂度简单复杂(需缓存响应)
    队头阻塞严重
    错误恢复容易困难