TCP/IP 协议详解:三次握手和四次挥手的原理

admin 发布于 1 天前 7 次阅读


TCP/IP 是互联网的基石协议。本文深入浅出地讲解 TCP 连接建立和断开的过程。

TCP 三次握手(Three-Way Handshake)

为什么需要三次握手?

确保双方都具备发送和接收数据的能力,防止旧连接请求导致的问题。

握手过程

  1. 第一次握手(SYN)

    客户端发送 SYN 包,序列号 seq=x,进入 SYN_SENT 状态。

  2. 第二次握手(SYN+ACK)

    服务器收到后,发送 SYN+ACK 包,seq=y, ack=x+1,进入 SYN_RCVD 状态。

  3. 第三次握手(ACK)

    客户端发送 ACK 包,seq=x+1, ack=y+1,双方进入 ESTABLISHED 状态。

抓包示例

tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0'

TCP 四次挥手(Four-Way Handshake)

为什么需要四次挥手?

TCP 是全双工通信,双方都需要独立关闭发送通道。

挥手过程

  1. 第一次挥手(FIN)

    客户端发送 FIN 包,进入 FIN_WAIT_1 状态。

  2. 第二次挥手(ACK)

    服务器发送 ACK 包,进入 CLOSE_WAIT 状态。客户端进入 FIN_WAIT_2。

  3. 第三次挥手(FIN)

    服务器发送 FIN 包,进入 LAST_ACK 状态。

  4. 第四次挥手(ACK)

    客户端发送 ACK 包,进入 TIME_WAIT 状态(等待 2MSL)。

常见问题

TIME_WAIT 过多怎么办?

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

SYN Flood 攻击防护

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192

实战:查看 TCP 连接状态

netstat -ant | awk '{print $6}' | sort | uniq -c
ss -s  # 更快的替代工具

总结

理解 TCP 握手和挥手过程,对于网络故障排查和性能优化至关重要。

此作者没有提供个人介绍。
最后更新于 2026-03-11