一、TCP 是什么?定位与特点
TCP(Transmission Control Protocol):传输层面向连接、可靠、字节流协议,基于 IP 封装,协议号为 6。
核心特点(必记)
典型用途:SSH、HTTP/HTTPS、FTP、车载 OTA、DoIP、SOME/IP 等。
二、TCP 头部结构(精简版,抓包必认)
最小 20 字节,最大 60 字节(带选项)。
关键字段(Linux 调试 / 抓包高频):
- Source Port / Dest Port
- Sequence Number(序号)
- Ack Number(确认号)
- Data Offset
- Control Bits(标志位)
- Window Size
- Checksum
最常用标志位:
三、TCP 三次握手(建立连接)
目的:确认双方收发能力正常 + 初始化序号
流程(C = 客户端,S = 服务端)
C → S:SYN
S → C:SYN + ACK
- 服务端回复:
SYN=1, ACK=x+1, Seq=y
C → S:ACK
- 状态:C、S 都进入 ESTABLISHED(连接建立)
Linux 视角意义
- 可通过
ss -tan / netstat 查看状态
四、TCP 四次挥手(正常关闭连接)
因为是全双工,双方要各自关闭发送通道,所以要 4 步。
标准流程
C → S:FIN(我不再发数据了)
S → C:ACK(收到你的关闭)
S → C:FIN(我也不发了)
C → S:ACK(收到,关闭完成)
关键状态(Linux 必懂)
- TIME_WAIT:主动关闭方会进入,持续 2MSL作用:确保对方收到最后 ACK、防止旧报文干扰新连接
- CLOSE_WAIT:被动关闭方,说明应用层没调用 close ()(常见代码 Bug)
五、TCP 可靠传输机制(核心原理)
1. 序列号 + 确认应答(Seq + Ack)
2. 超时重传
发送方启动定时器,超时未确认则重传。
3. 滑动窗口(流量控制)
4. 拥塞控制(网络层面)
四个核心阶段:
- 慢启动
- 拥塞避免
- 快重传
- 快恢复
六、Linux 下 TCP 常用查看 / 调试命令
1. 看 TCP 连接状态
ss -tan# 或老版netstat-tanp
常见状态:
LISTENESTABSYN_SENT / SYN_RECVFIN_WAIT1/2TIME_WAITCLOSE_WAIT
2. 查看 TCP 内核参数
sysctl net.ipv4.tcp_timestampssysctl net.ipv4.tcp_syncookiessysctl net.ipv4.tcp_tw_reusesysctl net.ipv4.tcp_fin_timeout
3. 抓 TCP 包(定位问题神器)
tcpdump -i eth0 tcp port 22 -nn -S
七、车载 / 嵌入式 Linux 特别关注点
低时延、高可靠车载以太网(DoIP、 SOME/IP)大量使用 TCP,要求稳定不丢包。
TIME_WAIT 优化(高并发 / 频繁重连场景)
net.ipv4.tcp_tw_reuse =1net.ipv4.tcp_tw_recycle =1(部分内核已废弃)net.ipv4.tcp_fin_timeout =30
3. SYN 泛洪防护
net.ipv4.tcp_syncookies =1
4. 长连接 vs 短连接
八、TCP vs UDP(极简对比表)
| | |
|---|
| | |
| | |
| | |
| | |
| | 视频、音频、实时雷达、车载 SOME/IP 部分场景 |
九、一句话总结(适合写文档 / 面试收尾)
TCP 是面向连接、可靠、全双工、带流量控制与拥塞控制的字节流协议,通过三次握手建立连接、四次挥手关闭,依靠序列号、确认应答、滑动窗口、超时重传保证可靠传输,是 Linux 网络与车载以太网中最核心的传输层协议。