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

一、TCP概述

  • 点对点:一个发送方,一个接收方。

  • 可靠的按序的字节流

  • 流水线机制:TCP拥塞控制和流量控制设置窗口尺寸。

  • 发送方/接收方缓存

  • 全双工(full-duplex):同一连接中能够传输双向数据流。

  • 面向连接

    • 通信双方在发送数据之前必须建立连接;
    • 连接状态只在连接的两端中维护,在沿途节点中并不维护状态;
    • TCP连接包括:两台主机上的缓存、连接状态变量、socket等。
  • 流量控制机制

二、TCP:序列号和ACK

序列号

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

ACKs

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

问题:接收方如何处理乱序到达的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:等待客户连接请求
  • 建立:三次握手
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章