计算机网络原理(12)——TCP协议

计算机网络原理(12)——TCP协议

一、TCP概述

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

二、TCP:序列号和ACK

  • 序列号
    • 序列号指的是segment中第一个字节的编号,而不是segment的编号
    • 建立TCP连接时,双方随机选择序列号
  • ACK
    • 希望接收到的下一个字节的序列号
    • 累计确认:该序列号之前的所有字节均已被正确接收到
  • 问题:接收方如何处理乱序到达的segment?
    • TCP规范中没有规定,由TCP的实现者做出决策

三、TCP可靠数据传输概述

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

四、TCP RTT和超时

  • 如何设置定时器的超时时间?

    • 大于RTT,但RTT是变化的
    • 过短:不必要的重传
    • 过长:对段丢失时间反应慢
  • 如何估计RTT?

    • SampleRTT:测量从段发出去到收到ACK的时间,忽略重传
    • SampleRTT变化:测量多个SampleRTT,求平均值,形成RTT的估计值EstimatedRTT
  • 定时器超时时间的设置

    • EstimatedRTT+“安全边界”

    • EstimatedRTT变化大→较大的边界

    • 测量RTT的变化值:SampleRTT与EstimatedRTT的差值

      DevRTT=(1-β)×DevRTT + β×|SampleRTT-EstimatedRTT|

      (typically,β=0.25)

    • 时间设置

      TimeoutInterval=EstimatedRTT+4×DevRTT

五、TCP发送方事件

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

六、快速重传机制

  • TCP的实现中,如果发生超时,超时时间间隔将重新设置,即将超时时间间隔加倍,导致其很大
    • 重发丢失的分组之前要等待很长时间
  • 通过重复ACK检测分组丢失
    • Sender会背靠背地发送多个分组
    • 如果某个分组丢失,可能会引发多个重复的ACK
  • 如果sender收到对同一数据的3个ACK,则假定该数据之后的段已经丢失
    • 快速重传:在定时器超时之前即进行重传

七、TCP流量控制

  • 思想:接收方为TCP连接分配buffer,上层应用可能处理buffer中数据的速度较慢,控制发送方不会传输的太多、太快以至于淹没接收方(buffer溢出)
  • 本质:速度匹配机制

八、TCP连接管理

  • TCP sender和receiver在传输数据前需要建立连接
  • 初始化TCP变量
    • seq.#
    • Buffer和流量控制信息
  • Client:连接发起者
  • Server:等待客户连接请求

你可能感兴趣的:(计算机网络原理)