MOOC_TCP简述

TCP基本特点

  1. 可靠的, 按序的字节流
  2. 流水线机制
    TCP拥塞控制可流量控制机制设置窗口尺寸
  3. 发送方/接收方都拥有缓存
  4. 全双工: 同一连接中能够双向传输数据
  5. 面向连接
    a. 通信双方在发送数据之前必须建立连接
    b. 连接状态只在连接的两端中维护,在沿途的节点不维护连接状态
    c. TCP连接包括:两台主机上的缓存, 连接状态变量, socket等
  6. 流量控制

TCP段结构

TCP的工作流程简述

TCP是面向连接的协议,在进行数据传输之前要先建立客户机到服务器的连接,然后才能进行通信,TCP的工作流程如下:

  1. 连接的建立
  2. 数据传输
  3. 连接的拆除

连接的建立 & 数据传输

连接的建立的过程通常被称为三次握手: 第一次: 客户端告诉服务器我想和你建立连接, 数据传输序号从client_isn开始, 第二次服务器告诉客户端, 我同意该连接, 我的序号是server_isn, 我期望收到的段序号是client_isn + 1, 第三次, 客户端向服务器报告,对连接进行确认, 同时可以传输数据.

  1. 连接建立主要完成以下任务:
    • 始化TCP变量包括:生成套接字 分配buffer, 生成流量控制信息等.
    • 客户端发起请求
    • 客户端等待客户的连接请求
  2. 客户端发送 TCP SYN段到服务器
    • SYN段: 该段不包含上层应用的任何信息, 该段的SYN比特被置为1, 客户随机分配一个初始序号(client_isn)到Sequence numbers字段
  3. 服务器接收到客户机的SYN段后, 提取 TCP SYN报文段, 为该TCP连接分配TCP缓存和变量, 并向该客户端分配允许连接的报文段
    • 该报文也不含上层应用的任何信息, SYN比特置为1, ACK = client_isn + 1, Sequence number = server_isn
  4. 客户端接收到服务器的信息后, 为该TCP连接分配缓存和变量, 并发送另一个报文段, 该报文段中可以传输上层应用的数据
    • 该报文段: SYN bit = 0 , Sequence number = client_isn + 1, ACK = server_isn + 1, 因为连接已经建立,所以此后的报文段中 SYN bit 都等于0

连接的拆除

  1. 客户端向服务器发送TCP FIN 段
  2. 服务器收到FIN, 回复ACK, 关闭连接, 发送FIN
  3. 服务器收到FIN, 回复ACK
    1. 进入等待-如果收到FIN, 会重新发送ACK
  4. 服务器收到ACK, 连接关闭

TCP的可靠数据传输机制

TCP在IP层提供的 不可靠 的数据传输的基础上提供可靠的数据传输.

  1. 流水线机制
  2. 累积确认机制
  3. 使用单一定时器定时实现重传

可靠数据传输是通过 校验和 + 序列号 + ACK + 重传 +定时器 来实现的

校验和 + 分组序列号 + ACK + 重传 可以解决传输过程中发生的比特位翻转的问题, 使用 定时器 + 重传 可以解决传输过程中发生丢包的问题, 可靠数据传输要解决的重要问题是定时器超时时间的设定

超时时间的设定

超时时间的应该大于RTT,过短,会引起不必要的重发, 过长对段丢失的反应慢, 故,

\[定时时间 = RTT时间 + 安全边界 \]

RTT的变化越大, 所要求的安全边界也就越大

如何估算RTT

测量每次发送到收到ACK的时间作为SampleRTT, 多次测量求平均值形成估计值EstimatedRTT

\[EstimatedRTT = (1 - α) * EstimatedRTT + α * SimpleRTT (α的典型值: 0.125) \]

估算安全边界

安全边界的建立是为了解决在RTT变动时, 超时时间仍然能够大于RTT, 可见, 安全边界与RTT的变化有关, 测量每一次的EstimatedRTT 与当次的SimpleRTT的差值, 即可得到RTT的动态变化范围, 每一次数据传输都计算该差值,并加权平均, 即可得到一个平均的安全边界(DevRTT)

\[DevRTT = (1 - β) * DevRTT + β * |SampleRTT - EstimatedRTT| ( β的典型值为0.25 ) \]

考虑一定的余量, 通常使用n倍的DevRTT, 故, 超时时间公式为

\[TimeoutInterval = EstimatedRTT + 4 * DevRTT \]

针对超时时间过长的快速重传机制

在实际使用中, 如果TCP连接发生一次超时, 根据超时时间计算公式, 超时时间将会被重新设置的很大, 导致系统响应变慢, 如果Sender发送了多个分组, 如果某个分组丢失, 会产生多个相同的ACK.

假定如果收到三个重复的ACK则认为该段数据已经丢失, 则在定时器超时之前进行重传.

TCP流量控制机制

流量控制主要解决, 发送方发送太快而导致接收方淹没(buffer溢出)的问题(也可能是上层应用处理数据较慢,导致接收方接收速度相对较慢)
流量控制有别于拥塞控制, 流量控制更侧重于,端与端之间的速度匹配, 拥塞控制更关心传输网络上的速度匹配.

\[RcvBuffer = space room + TCPdataInBuffer \]

Buffer中的可用空间spaceroom:

\[Spaceroom = RcvBuffer - TCPdataInBuffer =RcvBuffer - [LastByteRcvd - LastByteRead] \]

计算出来得到的Spaceroom告诉发送方, 还能够接收多少数据,借此实现速度匹配.

posted @ 2020-04-06 18:44  Sophomores  阅读(39)  评论(0编辑  收藏