TCP/IP协议栈学习笔记

TCP/IP 协议栈是互联网通信的基石。本文整理 TCP/IP 四层模型与 OSI 七层模型的对应关系,重点记录 TCP 的三次握手、四次挥手以及滑动窗口、拥塞控制等核心机制,是理解网络通信的基础。

一、TCP/IP四层模型与OSI七层模型

两种模型的对应关系:

TCP/IP 模型更贴近实际实现,OSI 模型更适合教学分层。

二、TCP与UDP对比

三、TCP三次握手

TCP 建立连接需要三次握手:

为什么是三次而非两次?核心原因是确认"双方都能收发"。两次握手无法防止历史失效的 SYN 报文导致服务器误建立连接。

使用 ss 查看连接状态:

# 查看所有 TCP 连接
ss -tan

# 查看指定端口连接状态统计
ss -tan | awk '{print $1}' | sort | uniq -c

四、TCP四次挥手

TCP 断开连接需要四次挥手:

TIME_WAIT 状态持续 2MSL(通常 60 秒),目的是确保被动方收到最后的 ACK,并让本次连接的报文在网络中消亡。

五、滑动窗口

滑动窗口是 TCP 流量控制的核心机制。接收方通过 ACK 报文中的窗口大小(rwnd)告知发送方自己能接收的数据量,发送方据此调整发送速度,避免压垮接收方。

六、拥塞控制

流量控制解决"接收方处理不了",拥塞控制解决"网络处理不了"。主流算法:

查看与调整拥塞控制算法:

# 查看当前算法
sysctl net.ipv4.tcp_congestion_control

# 查看可用算法
sysctl net.ipv4.tcp_available_congestion_control

# 启用 BBR(适用于高带宽延迟网络)
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

小结

TCP/IP 协议栈的核心在于分层设计与可靠传输机制。理解三次握手、四次挥手是排查连接问题的基础;滑动窗口与拥塞控制解释了 TCP 如何在不稳定的网络中实现高吞吐与公平性。日常运维中,sstcpdumpsysctl 是诊断 TCP 问题的常用工具。