端口是入口,连接还有自己的状态。看到 TIME_WAIT 并不意味着必须立即调整内核参数,应先理解连接建立与关闭过程。
学习整理:2026-10-29。以下命令、地址和账号均为课程实验示例,按实际环境替换;涉及安装、覆盖配置或服务启停的操作先在隔离环境练习,不代表本站已经实施。
一、TCP和UDP
TCP特点:
- 面向连接。
- 有序、可靠传输。
- 有重传、流量控制和拥塞控制。
- HTTP、HTTPS、SSH、MySQL常使用TCP。
UDP特点:
- 无连接。
- 不保证到达和顺序。
- 开销较小。
- DNS查询、音视频和部分监控协议常使用UDP。
二、TCP连接过程
建立连接常概括为三次握手:
客户端 SYN
服务端 SYN+ACK
客户端 ACK关闭通常是双方各自关闭发送方向,因此常称四次挥手。
不必死记标志位,要能理解:
- Connection refused:目标可达,但端口通常没有服务监听或被明确拒绝。
- Connection timed out:数据包可能被防火墙丢弃、路由不通或目标无响应。
三、端口
端口用于区分同一主机上的不同网络服务。
| 端口 | 协议/服务 |
|---|---|
| 22 | SSH |
| 53 | DNS |
| 80 | HTTP |
| 443 | HTTPS |
| 3306 | MySQL |
| 6379 | Redis |
| 9090 | Prometheus |
| 3000 | Grafana |
端口只是默认约定,实际配置可以修改。
四、查看连接
ss -lntp
ss -lnup
ss -ant
ss -s
lsof -iTCP:80 -sTCP:LISTEN状态:
- LISTEN:等待连接。
- ESTAB:连接已建立。
- TIME-WAIT:主动关闭方短期保留状态。
- SYN-SENT:已经发送SYN,等待响应。
- CLOSE-WAIT:对端已关闭,本地程序尚未关闭。
大量CLOSE-WAIT通常提示应用没有正确关闭连接;大量TIME-WAIT要结合连接速率和业务判断,不能看到就调内核参数。
五、测试端口
curl -v http://192.168.56.12:8080/
nc -vz 192.168.56.12 8080
timeout 3 bash -c '</dev/tcp/192.168.56.12/8080'Telnet可以用于简单TCP测试,但不要把“TCP能连接”误认为应用协议一定正常。
六、端口不通排查
- 服务进程是否运行。
- 服务是否监听预期端口。
- 监听地址是127.0.0.1还是0.0.0.0。
- 本机curl是否成功。
- 防火墙是否放行。
- 云安全组是否放行。
- 路由是否正确。
- SELinux是否阻止服务。
- 应用日志是否报错。
隔离环境练习计划
使用Python临时监听:
python3 -m http.server 8080 --bind 127.0.0.1
ss -lntp | grep 8080从其他主机访问并观察失败。改为:
python3 -m http.server 8080 --bind 0.0.0.0再次验证,理解监听地址的意义。
我的验收重点
先说清每个组件和参数解决的问题,再在实验环境记录正常结果、错误现象与恢复步骤。配置能通过语法检查只是起点,还应验证实际功能。本文保留为学习笔记,不把计划中的多机部署或演练写成本站完成记录。
实验的可达性前提
从回环监听改为 0.0.0.0 之前先停止上一条临时服务,确认端口释放,否则第二次启动会报占用。绑定所有地址并不保证远端可达,防火墙、云规则与路由仍需满足。Python 临时 HTTP 服务只能提供无敏感内容的专用测试目录,结束用 Ctrl+C。CLOSE-WAIT 值应结合持续时间与进程确认,瞬时出现并不必然是泄漏。
内容复核与修订:2026-10-29。实验示例与本站运行记录分别说明;原始归档日期保留。
评论 (0)