TCP/IP 握手详解
在网站部署、接口调试、网络通信等场景中,TCP/IP 协议是基础,而三次握手则是通信建立的关键步骤。
🧱 什么是 TCP/IP 模型?
TCP/IP 是互联网通信协议的基础。包含 4 层结构:
层级 | 协议 | 作用 |
---|---|---|
应用层 | HTTP, FTP, DNS | 提供服务和接口 |
传输层 | TCP, UDP | 可靠或非可靠传输 |
网络层 | IP, ICMP | 地址寻址与路由 |
链路层 | Ethernet, PPP | 网卡间通信 |
🤝 三次握手原理
TCP 是 面向连接、可靠传输 的协议。它在通信前需通过 三次握手 建立连接。
1. 客户端 → 发送 SYN
2. 服务器 → 回复 SYN + ACK
3. 客户端 → 回复 ACK(连接建立)
📦 图示流程:
Client → SYN → Server
Client ← SYN + ACK ← Server
Client → ACK → Server
info
握手目的是确保双方准备就绪,网络可达。
⚙️ 实际部署中相关配置场景
✅ 后端监听 端口(Node.js/Flask/.NET)
- Node.js
- Flask
- .NET Core
const express = require('express');
const app = express();
app.listen(3000, '0.0.0.0', () => {
console.log("Server started on port 3000");
});
from flask import Flask
app = Flask(__name__)
app.run(host='0.0.0.0', port=5000)
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.ListenAnyIP(5000);
});
✅ 云部署/容器环境中三次握手失效常见原因
问题 | 原因 |
---|---|
无法连接 | 未监听 0.0.0.0 或端口未暴露 |
timeout | 防火墙或云安全组未开放端口 |
接口健康检查失败 | TCP 未响应 SYN 请求 |
🧪 排查握手失败的实用工具
# 检查 TCP 端口开放
telnet 127.0.0.1 3000
nc -zv 127.0.0.1 3000
# 查看网络监听端口
netstat -an
lsof -i :5000
🔐 K8s 中 readinessProbe 使用 TCP 检查连接是否正常
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
🧠 TCP 相关知识补充
四次挥手(断开连接)
- 客户端发送 FIN,表示“我没数据了”
- 服务器回复 ACK
- 服务器发送 FIN
- 客户端回复 ACK,断开连接
✅ 总结
知识点 | 说明 |
---|---|
三次握手 | 建立连接,保障可靠性 |
监听地址 | 建议使用 0.0.0.0 ,避免外网无法连接 |
防火墙与云安全组 | 必须开放目标端口 |
容器环境 | readinessProbe 会进行 TCP 握手检测 |