2.2.1 TCP/IP体系结构与分层职责
TCP/IP体系结构以分层设计实现解耦与协作,典型分为应用层、传输层、网络层、链路层(或网络接口层)。每一层向上提供服务、向下依赖底层,便于协议演进与故障定位。
应用层(Application)
- 面向业务场景协议:HTTP/HTTPS、DNS、SSH、FTP、SMTP、DHCP
- 运维关注:端口、证书/加密、服务可用性与性能
- 示例:查看应用端口与服务对应关系
# 查看当前监听的应用端口与进程
ss -lntp
# 预期:看到如 80/443/22 等端口的监听进程
传输层(Transport)
- TCP:可靠传输、流控、拥塞控制
- UDP:无连接、低开销
- 运维关注:连接数、重传率、窗口大小、端口占用
- 示例:统计 TCP/UDP 连接状态
# TCP 各状态统计
ss -s
# 查看指定端口连接
ss -nt 'sport = :443'
网络层(Internet)
- 核心协议:IP(IPv4/IPv6)、ICMP
- 负责逻辑寻址与路由转发
- 运维关注:地址规划、路由表、MTU、ICMP可达性
- 示例:查看地址与路由
# 查看 IP 地址
ip addr show
# 查看路由表
ip route show
链路层/网络接口层(Link/Network Interface)
- 同一链路帧传输与MAC寻址
- 技术:以太网、ARP、VLAN
- 运维关注:网卡状态、速率、丢包、ARP 冲突
- 示例:查看链路状态与 ARP
# 网卡状态/速率
ip link show
# ARP 表
ip neigh show
分层带来的运维价值
- 快速定位:自下而上排查链路、IP、端口、应用
- 便于监控:不同层级对应不同指标与工具
- 规范化管理:配置变更清晰、职责边界明确
安装常用网络诊断工具#
# Debian/Ubuntu
apt-get update
apt-get install -y iproute2 iputils-ping traceroute tcpdump net-tools
# RHEL/CentOS
yum install -y iproute iputils traceroute tcpdump net-tools
分层排错示例(从链路到应用)#
1)链路层:检查网卡与丢包#
ip link show eth0
# 关注:state UP/DOWN、RX/TX 丢包计数
ethtool eth0 | grep -E 'Speed|Duplex|Link detected'
# 预期:Link detected: yes
2)网络层:检查IP与路由#
ip addr show eth0
ip route show
ping -c 3 8.8.8.8
# 若 ping 失败,检查网关路由和 MTU
3)传输层:检查端口与连接#
ss -lntp | grep ':22'
# 预期:sshd 正在监听 22 端口
ss -nt | head
# 观察 SYN-SENT、ESTAB 等状态
4)应用层:检查服务响应#
curl -I http://127.0.0.1:80
# 预期:返回 HTTP/1.1 200 或 301
抓包示例(定位是哪一层的问题)#
# 抓取访问 80 端口的流量
tcpdump -i eth0 -nn tcp port 80 -c 20
# 预期:看到 SYN/SYN-ACK/ACK(三次握手)
典型问题与排错思路#
- 能 ping 通 IP,但端口不通:多为传输层/应用层问题
- 检查监听:
ss -lntp - 检查防火墙:
iptables -L -n - 端口监听正常,但外部访问失败:可能路由/防火墙/NAT
ip route与traceroute- 间歇性断连:可能链路抖动/丢包
ip -s link统计丢包mtr或长时间ping
练习#
- 在本机启动一个 HTTP 服务(如
python3 -m http.server 8080),用ss -lntp查端口,用curl访问验证,并抓包分析三次握手。 - 手动添加一条静态路由(测试环境):
ip route add 10.10.0.0/24 via 192.168.1.1 dev eth0
ip route show | grep 10.10.0.0/24
- 断开网线或禁用接口,观察
ip link与ping的变化,写出分层排错顺序。