传输控制协议



传输控制协议 (TCP) 是互联网协议套件中最重要的协议之一。它是互联网等通信网络中数据传输最广泛使用的协议。

特性

  • TCP 是一个可靠的协议。也就是说,接收方总是向发送方发送肯定或否定的数据包确认,以便发送方始终清楚地知道数据包是否到达目的地,或者是否需要重新发送。

  • TCP 确保数据按发送顺序到达预期目的地。

  • TCP 是面向连接的。TCP 要求在发送实际数据之前建立两个远程点之间的连接。

  • TCP 提供错误检查和恢复机制。

  • TCP 提供端到端通信。

  • TCP 提供流量控制和服务质量。

  • TCP 在客户端/服务器点对点模式下运行。

  • TCP 提供全双工服务,即它可以同时扮演接收方和发送方的角色。

报头

TCP 报头的长度至少为 20 字节,最多为 60 字节。

TCP Header
  • 源端口 (16 位) - 它标识发送设备上应用程序进程的源端口。

  • 目标端口 (16 位) - 它标识接收设备上应用程序进程的目标端口。

  • 序列号 (32 位) - 会话中段的数据字节的序列号。

  • 确认号 (32 位) - 当 ACK 标志设置为 1 时,此数字包含预期数据字节的下一个序列号,并作为对先前接收到的数据的确认。

  • 数据偏移 (4 位) - 此字段表示 TCP 报头的大小(32 位字)以及当前数据包在整个 TCP 段中的数据偏移量。

  • 保留 (3 位) - 保留供将来使用,默认情况下全部设置为零。

  • 标志 (每位 1 位)

    • NS - 随机数和位用于显式拥塞通知信令过程。

    • CWR - 当主机接收到带有 ECE 位设置的数据包时,它会设置拥塞窗口减少以确认已收到 ECE。

    • ECE - 它有两个含义

      • 如果 SYN 位清除为 0,则 ECE 表示 IP 数据包的 CE(拥塞体验)位已设置。

      • 如果 SYN 位设置为 1,则 ECE 表示该设备具有 ECT 功能。

    • URG - 它表示紧急指针字段具有重要数据,应予处理。

    • ACK - 它表示确认字段具有意义。如果 ACK 清除为 0,则表示数据包不包含任何确认。

    • PSH - 设置时,它请求接收站将数据(一旦到达)推送到接收应用程序,而无需对其进行缓冲。

    • RST - 重置标志具有以下功能

      • 用于拒绝传入连接。

      • 用于拒绝段。

      • 用于重新启动连接。

    • SYN - 此标志用于建立主机之间的连接。

    • FIN - 此标志用于释放连接,此后不再交换数据。因为带有 SYN 和 FIN 标志的数据包具有序列号,所以它们按正确的顺序进行处理。

  • 窗口大小 - 此字段用于两个站之间的流量控制,并指示接收方为段分配的缓冲区大小(以字节为单位),即接收方预期接收多少数据。

  • 校验和 - 此字段包含报头、数据和伪报头的校验和。

  • 紧急指针 - 如果 URG 标志设置为 1,它指向紧急数据字节。

  • 选项 - 它提供了常规报头未涵盖的其他选项。选项字段始终以 32 位字描述。如果此字段包含少于 32 位的数据,则使用填充来覆盖剩余位以达到 32 位边界。

寻址

两个远程主机之间的 TCP 通信是通过端口号 (TSAP) 完成的。端口号的范围为 0-65535,分为:

  • 系统端口 (0-1023)
  • 用户端口 (1024-49151)
  • 专用/动态端口 (49152-65535)

连接管理

TCP 通信在服务器/客户端模型中工作。客户端启动连接,服务器接受或拒绝它。三向握手用于连接管理。

TCP Handshake

建立

客户端启动连接并发送带有序列号的段。服务器用自己的序列号和客户端段的 ACK(比客户端序列号大 1)进行确认。客户端在收到其段的 ACK 后,发送对服务器响应的确认。

释放

服务器和客户端都可以发送带有 FIN 标志设置为 1 的 TCP 段。当接收端通过 ACKnowledging FIN 进行响应时,TCP 通信的方向关闭,连接释放。

带宽管理

TCP 使用窗口大小的概念来适应带宽管理的需求。窗口大小告诉远程端的发送方,此端的接收方可以接收多少个数据字节段。TCP 通过使用窗口大小 1 来使用慢启动阶段,并在每次成功通信后成倍增加窗口大小。

例如,客户端使用窗口大小 2 并发送 2 个字节的数据。当收到此段的确认时,窗口大小加倍到 4,接下来发送的段将包含 4 个数据字节。当收到 4 字节数据段的确认时,客户端将窗口大小设置为 8,依此类推。

如果错过确认,即数据在传输网络中丢失或收到 NACK,则窗口大小减半,慢启动阶段重新开始。

差错控制和流量控制

TCP 使用端口号来知道需要将数据段交给哪个应用程序进程。除此之外,它还使用序列号与远程主机同步。所有数据段都带有序列号进行发送和接收。发送方在收到 ACK 时知道接收方收到了哪个最后一个数据段。接收方通过参考最近接收到的数据包的序列号来了解发送方发送的最后一个段。

如果最近接收到的段的序列号与接收方预期的序列号不匹配,则将其丢弃并发送 NACK。如果两个段到达时序列号相同,则比较 TCP 时间戳值以做出决定。

多路复用

将两个或多个数据流组合到一个会话中的技术称为多路复用。当 TCP 客户端与服务器初始化连接时,它始终引用一个定义明确的端口号,该端口号指示应用程序进程。客户端本身使用从专用端口号池中随机生成的端口号。

使用 TCP 多路复用,客户端可以在单个会话中与许多不同的应用程序进程通信。例如,客户端请求一个网页,该网页反过来包含不同类型的数据(HTTP、SMTP、FTP 等),TCP 会话超时增加,会话保持打开更长时间,从而避免三向握手开销。

这使客户端系统能够通过单个虚拟连接接收多个连接。如果超时时间过长,这些虚拟连接对服务器不利。

拥塞控制

当向无法处理的大量数据馈送到系统时,就会发生拥塞。TCP 通过窗口机制来控制拥塞。TCP 设置窗口大小,告诉另一端发送多少个数据段。TCP 可能使用三种算法进行拥塞控制

  • 加性增加,乘性减少

  • 慢启动

  • 超时反应

定时器管理

TCP 使用不同类型的定时器来控制和管理各种任务

保活定时器

  • 此定时器用于检查连接的完整性和有效性。

  • 当保活时间到期时,主机发送探测以检查连接是否仍然存在。

重传定时器

  • 此定时器维护已发送数据的 stateful 会话。

  • 如果在重传时间内未收到已发送数据的确认,则再次发送数据段。

持久定时器

  • TCP 会话可以由任一主机通过发送窗口大小 0 来暂停。

  • 要恢复会话,主机需要发送窗口大小,且值需要更大。

  • 如果此段从未到达另一端,则两端都可能无限期地等待对方。

  • 当持久计时器超时时,主机重新发送其窗口大小以告知另一端。

  • 持久计时器有助于避免通信死锁。

计时等待

  • 释放连接后,任一主机都会等待一段时间(计时等待时间)以完全终止连接。

  • 这是为了确保另一端已收到其连接终止请求的确认。

  • 计时等待时间最长可达 240 秒(4 分钟)。

崩溃恢复

TCP 是一种非常可靠的协议。它为每个发送的分段中的每个字节提供序列号。它提供反馈机制,即当主机接收到数据包时,它必须确认该数据包(如果它不是最后一个分段),并包含预期的下一个序列号。

当 TCP 服务器在通信过程中崩溃并重新启动其进程时,它会向所有主机发送 TPDU 广播。然后,主机可以发送从未确认的最后一个数据段并继续进行。

广告