建立 TCP 连接:三向握手

145 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情

传输控制协议 (TCP)

什么是传输控制协议 (TCP)

传输控制协议(TCP)是互联网标准,可确保通过网络在设备之间成功交换数据包。TCP是各种应用程序的基础通信协议,包括Web服务器和网站,电子邮件应用程序,FTP和对等应用程序。

TCP使用互联网协议(IP)运行,以指定如何在线交换数据。IP负责将每个数据包发送到其目的地,而TCP保证字节按照发送的顺序传输,没有错误或遗漏。这两种协议统称为 TCP/IP。

建立 TCP 连接:三向握手

建立 TCP 连接需要客户端和服务器都参与所谓的三向握手。该过程可以分解如下:

  1. 客户端向服务器发送 SYN 数据包,即从其源端口到服务器目标端口的连接请求。
  2. 服务器使用 SYN/ACK 数据包进行响应,确认收到连接请求。
  3. 客户端接收 SYN/ACK 数据包,并使用自己的 ACK 数据包进行响应。

建立连接后,TCP的工作原理是将传输的数据分解为段,每个段被打包成一个数据报并发送到其目标。

TCP 标头结构

TCP 使用包含 10 个必填字段(总计 20 个字节(或八位字节))的标头包装每个数据包。每个标头都包含有关连接和正在发送的当前数据的信息。

10 个 TCP 标头字段如下所示:

  1. 源端口 – 发送设备的端口。
  2. 目标端口 – 接收设备的端口。
  3. 序列号 – 启动 TCP 连接的设备必须选择一个随机的初始序列号,然后根据传输的字节数递增。
  4. 确认号码 – 接收设备维护一个以零开头的确认号码。它根据收到的字节数递增此数字。
  5. TCP 数据偏移量 – 这指定 TCP 标头的大小,以 32 位字表示。一个单词表示四个字节。
  6. 保留数据 – 保留字段始终设置为零。
  7. 控制标志 – TCP 使用九个控制标志来管理特定情况下的数据流,例如启动重置。
  8. 窗口大小 TCP 校验和 – 发送方生成校验和并在每个数据包标头中传输该校验和。接收设备可以使用校验和来检查接收的标头和负载中的错误。
  9. 紧急指针 – 如果设置了 URG 控制标志,则此值指示与序列号的偏移量,指示最后一个紧急数据字节。
  10. mTCP 可选数据 – 这些是用于设置最大段大小、选择性确认和启用窗口缩放以更高效地使用高带宽网络的可选字段。

TCP DDoS 漏洞和缓解方法

TCP 容易受到多种类型的 DDoS 攻击,包括:

SYN 泛洪

SYN 泛洪发生在三向握手的初始阶段,它向目标计算机上的每个端口发送 TCP 连接请求(SYN 数据包)的速度快于处理请求的速度。服务器试图处理攻击者的虚假SYN请求,并对合法的TCP请求无响应,从而阻止握手的完成。

SYN 洪水攻击进展。SYN 洪水攻击进展。

这会导致目标计算机耗尽其所有可用端口。在许多情况下,SYN 数据包是首选的有效负载,仅用于使目标的网络管道饱和。

有几种方法可以缓解 SYN 泛洪,包括:

  1. 微块 – 服务器在其内存中为每个 SYN 请求分配一个微记录,而不是一个完整的连接对象,从而减少了太多请求的潜在资源压力。
  2. SYN Cookie – 服务器在分配内存之前使用加密哈希来验证 TCP 请求。
  3. RST cookie – 服务器在初始 SYN 请求后故意发送不正确的响应。如果客户端是合法的,则服务器会收到一个 RST 数据包,告诉服务器有问题。
  4. TCP 堆栈调整 – 您可以减少释放分配给连接的内存的超时,或有选择地删除传入连接。

请注意,除了“经典”的SYN洪水攻击方法之外,许多DDoS违规者还使用伪造的SYN有效负载来挂载通用网络层攻击 - 这种攻击类型只是为了通过虚假数据包过载来造成网络拥塞。缓解这些攻击需要能够按需扩展网络资源,例如,使用云缓解解决方案。

踩踏 DDoS 攻击

STOMP 是一种基于文本的协议,它允许应用程序使用 TCP 与消息代理进行通信。在STOMP DDoS攻击中,犯罪者使用僵尸网络打开与应用程序的大量TCP握手。然后,攻击者发送伪装成STOMP TCP请求的垃圾数据,使网络饱和。如果服务器准备解析 STOMP 请求,则攻击还会耗尽服务器资源。

TCP 碎片(泪滴)

泪滴攻击是一种针对 TCP/IP 重组机制的 IP 碎片攻击,发生在完成三次握手并传输数据之后。它涉及攻击者故意发送具有有缺陷的段偏移字段的数据包,从而阻止接收方正确组合碎片数据。数据包重叠并迅速淹没受害者的服务器。

防止 TCP 碎片攻击需要使用路由器、安全代理或基于云的 DDoS 保护服务检查传入的数据包。然后,在碎片不正确的数据包到达服务器之前,将对其进行检测和丢弃。