传输层(下)

TCP概述

  • 点对点
    • 一个发送方,一个接收方
  • 可靠的、按序的字节流
  • 流水线机制
    • TCP拥塞控制和流量控制机制设置窗口尺寸
  • 发送方/接收方缓存
  • 全双工(full-duplex)
    • 同一连接中能够传输双向数据流
  • 面向连接
    • 通信双方在发送数据之前必须建立连接
    • 连接状态只在连接的两端中维护,在沿途节点中并不维护状态
    • TCP连接包括:两台主机上的缓存、连接状态变量、socket等
  • 流量控制机制

TCP段结构

image-20220712172112715image-20220712172835102

序列号

  • 序列号指的是segment中第一个字节的编号,而不是segment的编号
  • 建立TCP连接时,双方随机选择序列号

ACKs

  • 希望接收到的下一个字节的序列号
  • 累计确认:该序列号之前的所有字节均已被正确接收到

可靠数据传输

  • TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务
  • 流水线机制
  • 累计确认
  • TCP使用单一重传定时器
  • 触发重传的事件
    • 超时
    • 收到重复ACK
  • 渐进式

RTT和超时

TCP发送方事件

  • 从应用层收到数据
    • 创建Segment
    • 序列号是Segment第一个字节的编号
    • 开启计时器
    • 设置超时时间:Timeout
  • 超时
    • 重传引起超时的Segment
    • 重启计时器
  • 收到ACK
    • 如果确认此前未确认的Segment
      • 更新SendBase
      • 如果窗口中还有未被确认的分组,重启定时器

图例

快速重传机制

TCP流量控制

TCP连接管理

  • 一次握手:客户端发送带有 SYN 标志的连接请求数据包给服务端
  • 二次握手:服务端发送带有 SYN+ACK 标志的连接请求和应答数据包给客户端
  • 三次握手:客户端发送带有 ACK 标志的应答数据包给服务端(可以携带数据了)

拥塞控制原理

拥塞(Congestion)

  • 表现
    • 分组丢失(路由器缓存溢出)
    • 分组延迟过大(在路由器缓存中排队)
  • 拥塞控制 vs 流量控制

方法

  • 端到端拥塞控制
    • 网络层不需要显式的提供支持
    • 端系统通过观察loss、delay等网络行为判断是否发生拥塞
    • TCP采用这种方法
  • 网络辅助的拥塞控制
    • 路由器向发送方显式地反馈网络拥塞信息
    • 简单的拥塞指示
    • 指示发送方应该采取何种速率
    • 案例:ATM ABR拥塞控制

TCP拥塞控制