深入理解 TCP/IP 协议栈
TCP/IP 协议栈是现代互联网的核心基础,理解其工作原理对于服务器开发和运维人员至关重要。本文将从协议层次、连接建立到数据传输全面解析 TCP/IP 的工作机制。
一、TCP/IP 四层模型
TCP/IP 协议族按功能划分为四层:
- 应用层:HTTP、HTTPS、FTP、SMTP、DNS 等协议,直接为用户程序提供服务
- 传输层:TCP(可靠传输)和 UDP(不可靠但高效),负责端到端通信
- 网络层:IP 协议负责路由和寻址,将数据包从源主机送到目标主机
- 数据链路层:以太网、Wi-Fi 等,负责相邻节点之间的数据传输
二、TCP 三次握手详解
TCP 建立连接需要三次握手,确保双方都能正常收发数据:
- SYN:客户端发送 SYN 报文(seq=x),进入 SYN_SENT 状态
- SYN+ACK:服务端回复 SYN+ACK(seq=y, ack=x+1),进入 SYN_RCVD 状态
- ACK:客户端发送 ACK(ack=y+1),双方进入 ESTABLISHED 状态
为什么需要三次?两次无法确认客户端的接收能力,四次则多余。三次是保证可靠连接的最少次数。
三、TCP 四次挥手
断开连接需要四次挥手,因为 TCP 是全双工的,双方都需要单独关闭各自的数据通道:
- 主动方发送 FIN,进入 FIN_WAIT_1
- 被动方回 ACK,进入 CLOSE_WAIT;主动方进入 FIN_WAIT_2
- 被动方发送 FIN,进入 LAST_ACK
- 主动方回 ACK,等待 2MSL 后关闭;被动方收到后关闭
四、TCP 可靠传输机制
TCP 通过以下机制保证可靠传输:
- 序号与确认:每个字节都有序号,接收方用 ACK 确认
- 超时重传:超时未收到 ACK 则重传,RTO 根据 RTT 动态调整
- 滑动窗口:允许发送多个未确认的数据包,提高链路利用率
- 流量控制:接收方用窗口大小告知发送方自己的缓冲区容量
- 拥塞控制:慢启动、拥塞避免、快重传、快恢复四个算法协同工作
五、UDP vs TCP 选型建议
并非所有场景都适合 TCP:
- 使用 TCP:文件传输、Web 请求、邮件、需要可靠性的场景
- 使用 UDP:视频直播、游戏实时同步、DNS 查询、需要低延迟的场景
- 使用 QUIC(HTTP/3):综合了 TCP 的可靠性和 UDP 的低延迟,逐渐成为主流
六、常见网络问题排查
掌握 TCP/IP 后,可以快速排查网络问题:
netstat -an:查看所有连接状态,排查 TIME_WAIT 过多问题ss -s:快速查看 socket 统计信息tcpdump -i eth0 port 80:抓包分析具体通信过程ping / traceroute:测试连通性和路由路径
七、TIME_WAIT 问题处理
高并发短连接场景下,TIME_WAIT 堆积会导致端口耗尽。解决方案:开启 tcp_tw_reuse(允许复用 TIME_WAIT 端口)、调大本地端口范围(ip_local_port_range)、使用长连接(Keep-Alive)或连接池。
总结
TCP/IP 协议是每位技术人必须深入理解的基础知识。掌握三次握手、四次挥手、可靠传输机制,不仅能帮助你排查网络故障,更能在系统设计时做出正确的技术选型。