概述:TCP特性

  • 点到点的数据传输
  • 可靠的字节流服务
  • 是一个流水线协议:可以一次发送多个分组
  • 全双工的数据通信。
  • 存在I/O buffer
  • 面向连接的:通信前,双方需要握手
  • 流量/拥塞控制
  • 公平性

    报文段格式

    image.png

  • 确认为累计确认

  • 序号是流中的一个offset,用来避免读到旧数据。
  • 如果无选项,一般头部长度为20字节,比UDP多12字节。
  • TCP通过估算,来自适应的调整超时重传时间。

    • 两种触发重传的方式:
      • 超时:重发对应段(SR)
      • 收到三个冗余的确认:快速重传

        TCP的可靠传输机制

  • TCP是流水化的协议。

  • ACK为累计确认:类似于GBN。
  • 由于为累计确认,重传定时器只需要一个就够了。
  • TCP可以接受乱序的数据吗? OK的,删除重复的即可。

    流量控制

    TCP通过让发送方维护一个称为接收窗口(receive window)的变量来提供流量控制。由于有了接收方的数据做参考,所以不会发生淹没接收方的情况。
    通俗地说,接收窗口用于给发送方一个指示:该接收方还有多少可用的缓存空间。
    因为TCP是全双工通信,在连接两端的发送方都各自维护一个接收窗口。保证不会相互淹没对方。
    描述了TCP的流量控制服务以后,我们在此要简要地提一下UDP:UDP并不提供流量控制,报文段由于缓存溢出可能在接收方丢失。进程每次从缓存中读取一个完整的报文段。如果进程从缓存中读取报文段的速度不够快,那么缓存将会溢出,并且将丢失报文段。

    连接管理

    三次握手

    客户首先发送一个特殊的TCP报文段,服务器用另一个特殊的TCP报文段来响应,最后,客户再用第三个特殊报文段作为响应。
    前两个报文段不承载“有效载荷”,也就是不包含应用层数据;而第三个报文段可以承载有效载荷。
    由于在这两台主机之间发送了3个报文段,所以这种连接建立过程常被称为三次握手(three-way handshake)

    对称连接释放

    image.png

拥塞控制原理

拥塞定义:

  • 非正式的定义:“太多的数据需要网络传输,超过了网络的处理能力“
  • 与流量控制不同
  • 拥塞的表现:
    • 分组丢失(路由器缓冲区溢出)
    • 分组经历比较长的延迟(在路由器的队列中排队)

复杂的操作都在端系统上,网络的核心的功能应该简单直接,这是设计的原则。
也是TCP采用第一种方式,而不是第二种的原因。

方法

  • 端到端的拥塞控制:
    • 没有来自网络的显式反馈
    • 端系统根据延迟和丢失事件推断是否有拥塞
    • TCP采用这个方法
  • 网络辅助的拥塞控制:

    • 路由器提供给端系统以反馈信息
    • 单个bit置位,显示有拥塞(SNA,DECbit, TCP/IP ECN,ATM)
    • 显式提供发送端可以采用的速率

      TCP的拥塞机制

      TCP有一个拥塞控制机制,以便当源和目的主机间的一条或多条链路变得极度拥塞时来遏制运输层TCP发送方。TCP仍将继续重新发送数据报文段直到目的主机收到此报文并加以确认,而不管可靠交付需要用多长时间。
      端到端的拥塞控制机制
  • 路由器不向主机有关拥塞的反馈信息

    • 路由器的负担较轻
    • 符合网络核心简单的TCP/IP架构原则
  • 端系统根据自身得到的信息,判断是否发生拥塞,从而采取动作。

TCP的控制策略—维护一个拥塞窗口的值

image.png
Reno 、适用于低延时、低带宽的网络,它将拥塞控制的过程分为四个阶段:慢启动、拥塞避免、快速重传和快速恢复,对应的状态如下所示:

  • 慢启动阶段:每收到一个RTT,拥塞窗口的值加倍。直到发生了丢包。初始速率很慢,但是增长很快。
  • 当窗口达到慢启动阈值或出现丢包时,进入拥塞避免阶段,将慢启动阈值设置为当前发生丢包阈值的一半,然后设置conWin = 1,重新进入慢启动。
  • 当再次达到慢启动阈值的时候。此时,每收到一个RTT窗口加一,呈线性增长
  • 当收到对一个报文的三个冗余的 ACK 时,进入快速重传阶段。要求接收方在收到一个失序的报文段后就立即发出重复确认而不要等到自己发送数据时捎带确认;(这样可以让发送方及时知道有报文段没有到达对方,可提高网络吞吐量约20%)
  • 快速重传完成后进入快速恢复阶段,将当前拥塞窗口的值减半,同时拥塞窗口值等于慢启动阈值。然后进入拥塞避免阶段每收到一个RTT窗口加一,呈线性增长,重复上述过程。

    TCP的公平性

    公平性目标:如果K个TCP会话分享一个链路带宽为R的瓶颈,每一个会话的有效带宽为R/K。

    Q&A

    在网络中,2次握手建立连接总是可行吗?

  • 变化的延迟(连接请求的段没有丢,但可能超时)

  • 由于丢失造成的重传(e.g.req_conn(x))
  • 报文乱序
  • 相互看不到对方

    如何检测拥塞?:拥塞感知技术。

    TCP发送方如何限制它向其连接发送流量的速率呢?

    维护一个拥塞窗口的值;拥塞窗口:TCP能够发送的最大速率。

    TCP发送方如何感知从它到目的地之间的路径上存在拥塞呢?

  • 某个段超时了(丢失事件):超时时间到,某个段的确认没有来

原因1:网络拥塞(某个路由器缓冲区没空间了,被丢弃)概率大
原因2:出错被丢弃了(各级错误,没有通过校验,被丢弃)概率小
一旦超时,就认为拥塞了,有一定误判,但是总体控制方向是对的。

  • 有关某个段的3次重复ACK:轻微拥塞

网络这时还能够进行一定程度的传输,拥塞但情况要比第一种好

当发送方感知到端到端的拥塞时,采用何种算法来改变其发送速率呢?

拥塞避免

  • 慢启动
  • SIMD:线性增加,乘性减少
  • 发生拥塞后,保守策略