目录一、三次握手的核心目标二、三次握手详细流程Step 1: SYN同步请求Step 2: SYN-ACK同步确认Step 3: ACK最终确认三、为什么是“三次”而不是两次四、握手过程中的关键细节五、渗透测试中的实际应用六、Wireshark抓包示例TCP三次握手过程1. 第一次握手客户端向服务器发送 SYN 请求2. 第二次握手服务器回应客户端的 SYN 请求3. 第三次握手客户端确认连接建立三次握手完成总结三次握手过程为什么需要三次握手三次握手的图示注意点结论HTTP中的三次握手与中间人攻击之间的关联三次握手与中间人攻击的原理1. 中间人攻击概述2. 三次握手中的中间人攻击步骤3. 攻击后的数据窃取与篡改4. 如何防止三次握手中的中间人攻击总结三次握手与中间人攻击的关联一、三次握手的核心目标同步双方的初始序列号ISN序列号用于标识数据包的顺序防止网络延迟导致的数据混乱。协商通信参数如最大报文段长度MSS、窗口大小等。验证双方通信可达性确保客户端和服务器的网络路径双向畅通。二、三次握手详细流程假设客户端IP: 192.168.1.100请求访问服务器IP: 203.0.113.5的HTTP服务端口80Step 1: SYN同步请求客户端 → 服务器发送一个SYN1的TCP报文控制位SYN置1。序列号Seq客户端随机生成初始序列号如SeqXX是一个32位随机数。确认号Ack此时为0尚未收到服务器数据。其他参数包含客户端的MSS如1460字节、窗口大小。服务器状态变化从CLOSED→LISTEN监听状态→ 收到SYN后进入SYN-RECEIVED。渗透测试关联SYN报文可能被防火墙拦截检测SYN是否被响应可判断端口是否开放类似Nmap的SYN扫描。Step 2: SYN-ACK同步确认服务器 → 客户端发送SYN1, ACK1的TCP报文同时置位SYN和ACK。序列号Seq服务器随机生成初始序列号如SeqY。确认号Ack设置为客户端Seq1即AckX1。其他参数包含服务器的MSS和窗口大小。客户端状态变化从SYN-SENT→ 收到SYN-ACK后准备发送ACK。渗透测试关联未完成握手的半开连接SYN-RECEIVED状态可能被用于SYN洪水攻击DDoS。Step 3: ACK最终确认客户端 → 服务器发送ACK1的TCP报文控制位ACK置1。序列号Seq设置为X1来自上一步Ack的值。确认号Ack设置为服务器Seq1即AckY1。双方状态变化客户端进入ESTABLISHED连接已建立。服务器收到ACK后从SYN-RECEIVED→ESTABLISHED。渗透测试关联完整的三次握手后HTTP请求才会开始传输可通过Wireshark抓包分析。三、为什么是“三次”而不是两次根本原因防止历史重复连接HISTORICAL CONNECTION导致的混乱。假设只有两次握手若客户端的SYN因网络延迟被重发服务器可能为过期连接分配资源导致资源浪费。第三次ACK确保服务器知道客户端已确认连接有效。渗透测试案例攻击者伪造SYN报文IP欺骗可能引发服务器资源耗尽SYN洪水攻击。四、握手过程中的关键细节序列号随机化ISN初始序列号必须随机生成防止攻击者预测序列号如TCP会话劫持。早期系统ISN递增现已被安全机制取代如Linux的/proc/sys/net/ipv4/ipfrag_secret_interval。半连接队列SYN Queue服务器在收到SYN后会将连接信息存入半连接队列等待客户端ACK。队列溢出会导致合法连接被拒绝渗透测试中可模拟DDoS测试。全连接队列Accept Queue完成三次握手后连接从半连接队列移至全连接队列等待应用层如HTTP服务处理。五、渗透测试中的实际应用端口扫描使用Nmap的-sSSYN扫描发送SYN包根据响应判断端口状态收到SYN-ACK → 端口开放Nmap发送RST终止连接避免完成握手。无响应或收到RST → 端口关闭或被过滤。中间人攻击MITM通过ARP欺骗劫持TCP连接时需伪造双方的ACK报文维持会话如Ettercap工具。DDoS攻击防御配置防火墙限制SYN速率如Linux的iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT。使用SYN Cookies技术无需维护半连接队列。六、Wireshark抓包示例过滤条件tcp.port 80 tcp.flags.syn 1 || tcp.flags.ack 1Frame 1客户端 → 服务器Flags: SYNSeq0相对值实际为随机数。Frame 2服务器 → 客户端Flags: SYN, ACKSeq0Ack1。Frame 3客户端 → 服务器Flags: ACKSeq1Ack1。总结三次握手是TCP可靠传输的基石渗透测试人员需深入理解其机制才能有效识别网络漏洞如未随机化的ISN、实施精准攻击SYN洪水或防御策略。--------------------------------------------------------------------在计算机网络中TCP三次握手是建立一个可靠连接的过程。在 HTTP 协议中TCP 三次握手是必不可少的步骤因为 HTTP 基于 TCP 协议运行。三次握手的目的是确保客户端和服务器之间的连接能够可靠地建立并为数据传输做好准备。TCP三次握手过程三次握手的过程分为三步它们分别由客户端和服务器之间的通信来实现1. 第一次握手客户端向服务器发送 SYN 请求客户端发起连接请求向服务器发送一个SYNSynchronize报文段。在这个报文中客户端设置了一个初始序列号Sequence Number通常是一个随机的初始值x表示客户端希望开始连接。这个报文段会告诉服务器客户端希望建立连接但连接还没有建立成功。该报文的标志位是SYN1序列号为x。客户端发送的报文SYN, Seqx2. 第二次握手服务器回应客户端的 SYN 请求服务器接收到客户端的 SYN 请求后会回复一个SYN-ACKSynchronize-Acknowledge报文段。服务器生成一个自己的初始序列号y并将其放入响应报文中。服务器还会设置ACK标志位为 1表示它收到了客户端的请求并且确认客户端的序列号x即ACKx1。该报文段的标志位是SYN1和ACK1并且确认号为x1客户端的序列号加 1。服务器回应的报文SYN, ACK, Seqy, Ackx13. 第三次握手客户端确认连接建立客户端收到服务器的 SYN-ACK 报文后确认服务器的序列号y并发送一个ACKAcknowledge报文段作为回应。客户端在该报文中将确认号设置为y1服务器的序列号加 1并且序列号为x1。该报文段的标志位是ACK1确认号为y1服务器的序列号加 1。客户端回应的报文ACK, Seqx1, Acky1三次握手完成至此客户端和服务器之间的连接已成功建立。TCP 连接已经建立客户端和服务器可以开始数据传输。此时双方都知道了对方的序列号数据的可靠性可以得到保证。总结三次握手过程第一次握手客户端 → 服务器客户端发送 SYN 请求携带自己的初始序列号x。第二次握手服务器 → 客户端服务器接收 SYN 请求发送 SYN-ACK 响应携带自己的初始序列号y并确认客户端的序列号x。第三次握手客户端 → 服务器客户端收到服务器的 SYN-ACK 响应发送 ACK 确认确认服务器的序列号y。为什么需要三次握手保证可靠性三次握手的目的是确保双方都能正确接收对方的请求和确认信息避免数据传输过程中的错误。同步序列号每一方在开始传输数据之前需要同步自己的序列号以便后续的包传输可以按照顺序正确地进行。避免资源浪费三次握手的过程中服务器只有在接收到客户端的 SYN 包后才会为该连接分配资源避免资源浪费。三次握手的图示Client → Server: SYN, Seqx Server → Client: SYN, ACK, Seqy, Ackx1 Client → Server: ACK, Seqx1, Acky1注意点TCP连接的关闭建立连接后的传输结束后连接需要通过四次挥手来关闭。SYN Flood 攻击如果攻击者发送大量的 SYN 请求但不完成后续的握手过程就会导致服务器资源的浪费这种攻击称为SYN Flood攻击。结论TCP 三次握手是保证客户端和服务器之间能够建立稳定可靠的连接的过程。通过这个过程客户端和服务器能够同步各自的序列号并为数据传输做好准备。这一机制是确保数据能够可靠、安全地传输的重要组成部分。HTTP中的三次握手与中间人攻击之间的关联HTTP超文本传输协议本身是一个应用层协议它没有直接的连接建立和握手过程。然而HTTP 协议通常是建立在TCP传输控制协议之上的而 TCP 是一个面向连接的协议因此会使用三次握手来建立可靠的连接。虽然 HTTP 协议本身不涉及三次握手但它依赖于底层 TCP 协议来保证数据传输的可靠性。三次握手是为了确保客户端和服务器能够建立一个可靠的 TCP 连接。在此连接的基础上HTTP 请求和响应才得以交换。中间人攻击MITMMan-in-the-Middle Attack是一种攻击者通过篡改、监听或伪装通信双方来窃取或修改信息的攻击方式。TCP 的三次握手过程可能成为中间人攻击的目标。三次握手与中间人攻击的原理1. 中间人攻击概述中间人攻击是指攻击者在客户端和服务器之间截获并篡改通信内容。攻击者通过劫持正常的连接流量在双方不知情的情况下拦截或篡改传输的数据。在三次握手的过程中攻击者可以通过以下方式进行中间人攻击拦截和伪造握手报文攻击者可以在客户端与服务器之间拦截三次握手的报文伪造 SYN 请求或 SYN-ACK 响应。篡改数据一旦连接建立攻击者可以通过拦截并修改 HTTP 请求或响应获取敏感信息或伪造响应。2. 三次握手中的中间人攻击步骤A. 第一次握手客户端发起请求正常情况客户端发送 SYN 请求尝试与服务器建立连接。中间人攻击攻击者伪装成客户端向服务器发送 SYN 请求而不是客户端直接发送。这使得服务器认为攻击者是合法的客户端。B. 第二次握手服务器回应客户端正常情况服务器收到 SYN 请求后回复 SYN-ACK确认连接请求并发出自己的序列号。中间人攻击攻击者将自己伪装成服务器发送 SYN-ACK 响应给客户端。客户端认为它已经与服务器建立了连接实际上它与攻击者建立了连接。C. 第三次握手客户端确认正常情况客户端收到服务器的 SYN-ACK 后发送 ACK 给服务器连接正式建立。中间人攻击客户端向攻击者发送 ACK 确认攻击者将 ACK 发送给服务器。此时客户端和服务器之间的连接被劫持攻击者处于中间位置能够监听、篡改或阻断数据流。3. 攻击后的数据窃取与篡改一旦 TCP 连接被建立攻击者可以轻松进行以下操作窃取敏感数据例如如果是 HTTP 请求攻击者可以拦截并窃取用户名、密码或其他敏感信息。篡改数据例如攻击者可以修改服务器响应的数据或客户端发送的数据导致欺骗、伪造内容等。4. 如何防止三次握手中的中间人攻击为了防止中间人攻击以下措施是常见的防御手段使用 SSL/TLS 加密通过 HTTPS基于 TLS 的 HTTP协议加密客户端与服务器之间的通信避免中间人拦截和篡改数据。即使攻击者能够在网络中进行监听它也无法解密和篡改加密数据。SSL/TLS 加密会在三次握手之后进行防止了在数据传输过程中的任何中间人攻击。证书验证在使用 HTTPS 时客户端会验证服务器的 SSL 证书确保它连接的确实是一个合法的服务器而不是被攻击者伪装的中间人。服务器也会验证客户端的证书如果需要。HSTSHTTP Strict Transport SecurityHSTS 是一种安全机制可以强制客户端在后续的连接中始终使用 HTTPS 加密协议防止通过中间人攻击如 SSL 劫持进行降级攻击。防止 DNS 欺骗DNS 欺骗可以将客户端的请求引导到恶意服务器上。在进行 HTTPS 请求时使用 DNSSEC域名系统安全扩展来防止此类攻击。总结三次握手与中间人攻击的关联三次握手是 TCP 连接建立的核心步骤而HTTP依赖于该连接进行数据传输。在三次握手过程中攻击者有可能通过伪装或中途拦截报文来劫持客户端与服务器之间的连接进行中间人攻击。通过使用HTTPSSSL/TLS 加密、证书验证和HSTS等技术可以有效防止在三次握手过程中发生的中间人攻击保证通信的安全性。