目录
- 第一部分:课程导入
-
- [📦 核心概念:网络通信就像"寄快递"](#📦 核心概念:网络通信就像"寄快递")
- [🧩 数据封装:像俄罗斯套娃一样层层包装](#🧩 数据封装:像俄罗斯套娃一样层层包装)
- [💡 需要关注的4层](#💡 需要关注的4层)
- [🏢 实际工作场景举例](#🏢 实际工作场景举例)
- [📝 TCP/IP四层模型(更实用的简化版)](#📝 TCP/IP四层模型(更实用的简化版))
- [✅ 关键要点](#✅ 关键要点)
- 第二部分:核心知识详解
-
- [📚 一、核心定义与原理](#📚 一、核心定义与原理)
-
- [1.1 什么是网络通信?](#1.1 什么是网络通信?)
- [1.2 OSI七层模型](#1.2 OSI七层模型)
- [1.3 TCP/IP四层模型(实战标准)](#1.3 TCP/IP四层模型(实战标准))
- [1.4 数据封装与解封装](#1.4 数据封装与解封装)
- [📖 二、关键术语解释](#📖 二、关键术语解释)
- [💼 三、典型应用场景](#💼 三、典型应用场景)
- [⚙️ 四、配置命令示例(华为设备)](#⚙️ 四、配置命令示例(华为设备))
-
- [4.1 基础网络命令](#4.1 基础网络命令)
- [4.2 实用排错命令](#4.2 实用排错命令)
- [4.3 华为交换机基础配置示例](#4.3 华为交换机基础配置示例)
- [4.4 华为路由器基础配置示例](#4.4 华为路由器基础配置示例)
- [⚠️ 五、常见误区与易错点](#⚠️ 五、常见误区与易错点)
- [📌 六、本节重点总结](#📌 六、本节重点总结)
- 第三部分:答案反馈与进阶
-
- [📝 答案详细点评](#📝 答案详细点评)
- [🎯 数据封装过程详解](#🎯 数据封装过程详解)
- [🎓 进阶知识点补充](#🎓 进阶知识点补充)
- [🛠️ 实战技巧总结](#🛠️ 实战技巧总结)
- [📝 课后作业](#📝 课后作业)
学习目标: 理解"两台电脑如何通信",建立网络分层思维
第一部分:课程导入
以下这些场景:
- 🔧 "应用服务器和数据库服务器无法连接"
- 🔧 "客户端访问Web应用超时"
- 🔧 "能ping通但应用无法访问"
要解决这些问题,首先需要理解:数据是如何从一台设备传输到另一台设备的?
📦 核心概念:网络通信就像"寄快递"
想象您要从北京给上海的朋友寄一份文件,这个过程是怎么完成的?
现实世界的快递流程
您(寄件人):
1. 写好文件内容
2. 装入信封
3. 写上收件人地址
4. 交给快递公司
快递公司:
5. 分拣包裹
6. 选择运输路线(飞机/火车/汽车)
7. 中转站转发
朋友(收件人):
8. 签收包裹
9. 拆开信封
10. 阅读文件
网络世界的数据传输
两台电脑通信和寄快递完全一样 !只不过网络世界把这个流程标准化成了7个层次 ,这就是OSI七层模型:
┌─────────────────────────────────────────────┐
│ 应用层 (Application) - 您写好文件内容 │
│ 表示层 (Presentation) - 文件格式转换 │
│ 会话层 (Session) - 建立通信会话 │
├─────────────────────────────────────────────┤
│ 传输层 (Transport) - 快递单号(端口号) │
├─────────────────────────────────────────────┤
│ 网络层 (Network) - 收件人地址(IP) │
├─────────────────────────────────────────────┤
│ 数据链路层 (Data Link) - 运输工具(MAC) │
│ 物理层 (Physical) - 公路/光缆 │
└─────────────────────────────────────────────┘
🧩 数据封装:像俄罗斯套娃一样层层包装
当您访问一个网站(比如 www.example.com)时,数据会从上到下层层包装:
应用层: "GET /index.html HTTP/1.1" (您要的文件)
↓ 加上
传输层: 源端口: 54321 目标端口: 80 (快递单号)
↓ 加上
网络层: 源IP: 192.168.1.100 目标IP: 93.184.216.34 (地址)
↓ 加上
数据链路层: 源MAC: aa:aa:aa:aa 目标MAC: bb:bb:bb:bb (运输单)
↓ 变成
物理层: 01010101010101 (电信号/光信号)
到达目标电脑后,再从下到上层层拆开,就像拆快递一样!
💡 需要关注的4层
虽然OSI有7层,但对于我们的工作,重点关注这4层:
| 层次 | 作用 | 类比 | 您在工作中会接触 |
|---|---|---|---|
| 应用层 | 您的应用程序 | 文件内容 | HTTP, MySQL协议, Redis协议 |
| 传输层 | 端口到端口传输 | 快递单号 | TCP端口(3306, 6379, 8080) |
| 网络层 | IP地址路由 | 收件人地址 | 192.168.1.100(服务器IP) |
| 数据链路层 | MAC地址转发 | 运输工具 | 交换机基于MAC转发 |
🏢 实际工作场景举例
场景1:应用无法连接数据库
问题现象:
- 应用服务器(192.168.1.10)无法连接数据库服务器(192.168.1.20)
- 报错:
Connection timeout
OSI分层排查思路:
第1步 - 检查物理层:
✅ 网线插好了吗?端口灯亮吗?
第2步 - 检查数据链路层:
✅ 交换机配置正确吗?VLAN配置对吗?
第3步 - 检查网络层:
❓ IP地址配置正确吗?(这步最关键!)
→ ping 192.168.1.20
第4步 - 检查传输层:
❓ 端口开放了吗?(MySQL默认3306)
→ telnet 192.168.1.20 3306
第5步 - 检查应用层:
❓ 数据库用户名密码对吗?
→ 数据库客户端工具测试
场景2:能ping通但应用无法访问
现象:
C:\> ping 192.168.1.20
来自 192.168.1.20 的回复: 时间=1ms
✅ ping通!
但应用连接失败:
❌ telnet 192.168.1.20 3306
连接失败
原因分析:
- ✅ 物理层、数据链路层、网络层都正常(ping通证明IP可达)
- ❌ 传输层有问题(端口未开放/被防火墙阻止)
- → 这就是典型的**"能ping通但无法访问服务"**问题!
📝 TCP/IP四层模型(更实用的简化版)
实际工作中,我们用TCP/IP四层模型更常见(把OSI的7层简化合并):
┌──────────────────────────────┐
│ 应用层 (Application) │ ← 对应OSI的上三层
│ HTTP, FTP, SMTP, MySQL │
├──────────────────────────────┤
│ 传输层 (Transport) │ ← 对应OSI的传输层
│ TCP, UDP │
├──────────────────────────────┤
│ 网络层 (Internet) │ ← 对应OSI的网络层
│ IP, ICMP, ARP │
├──────────────────────────────┤
│ 网络接口层 (Network Access) │ ← 对应OSI的底两层
│ 以太网, Wi-Fi │
└──────────────────────────────┘
记住这个四层就够了! 实际排错时用的就是这个。
✅ 关键要点
- 网络通信 = 寄快递:层层包装→运输→层层拆开
- 数据封装:从应用层到物理层,每层都加上自己的"标签"
- 数据解封装:从物理层到应用层,每层拆开自己的"标签"
- 分层排查:从物理层开始,逐层向上检查
- TCP/IP四层模型:比OSI七层更实用,重点掌握
第二部分:核心知识详解
📚 一、核心定义与原理
1.1 什么是网络通信?
定义:网络通信是指两台或多个设备之间交换数据信息的过程。
本质:网络通信就像**"寄快递"**的过程,需要经过层层包装、运输、拆包装。
1.2 OSI七层模型
OSI(Open System Interconnection)开放系统互联参考模型,是国际标准化组织(ISO)制定的网络通信标准框架。
┌─────────────────────────────────────────────────┐
│ 第7层 - 应用层 (Application) │
│ 作用:为应用程序提供网络服务接口 │
│ 协议:HTTP, FTP, SMTP, DNS, Telnet │
├─────────────────────────────────────────────────┤
│ 第6层 - 表示层 (Presentation) │
│ 作用:数据格式转换、加密解密、压缩解压 │
│ 协议:SSL/TLS, JPEG, MPEG │
├─────────────────────────────────────────────────┤
│ 第5层 - 会话层 (Session) │
│ 作用:建立、管理、终止会话连接 │
│ 协议:NetBIOS, RPC │
├─────────────────────────────────────────────────┤
│ 第4层 - 传输层 (Transport) │
│ 作用:提供端到端的可靠或不可靠传输 │
│ 协议:TCP, UDP │
├─────────────────────────────────────────────────┤
│ 第3层 - 网络层 (Network) │
│ 作用:路径选择、路由转发、逻辑地址(IP) │
│ 协议:IP, ICMP, ARP, OSPF, BGP │
├─────────────────────────────────────────────────┤
│ 第2层 - 数据链路层 (Data Link) │
│ 作用:MAC地址寻址、成帧、差错控制 │
│ 协议:Ethernet, PPP, MAC, HDLC │
├─────────────────────────────────────────────────┤
│ 第1层 - 物理层 (Physical) │
│ 作用:比特流传输、电气规范、物理接口 │
│ 协议:RJ45, 光纤, 802.3, V.35 │
└─────────────────────────────────────────────────┘
1.3 TCP/IP四层模型(实战标准)
TCP/IP是互联网实际使用的协议栈,将OSI七层合并为四层:
┌─────────────────────────────────────────────────┐
│ 应用层 (Application) │
│ 对应OSI:应用层、表示层、会话层 │
│ 协议:HTTP, FTP, DNS, SSH, MySQL, Redis │
├─────────────────────────────────────────────────┤
│ 传输层 (Transport) │
│ 对应OSI:传输层 │
│ 协议:TCP(可靠), UDP(不可靠) │
├─────────────────────────────────────────────────┤
│ 网络层 (Internet) │
│ 对应OSI:网络层 │
│ 协议:IP, ICMP, ARP │
├─────────────────────────────────────────────────┤
│ 网络接口层 (Network Interface) │
│ 对应OSI:数据链路层、物理层 │
│ 协议:Ethernet, Wi-Fi, PPP │
└─────────────────────────────────────────────────┘
1.4 数据封装与解封装
数据封装 (发送端):数据从上层向下层传输时,每一层都加上自己的控制信息(头部/尾部)。
数据解封装(接收端):数据从下层向上层传输时,每一层都去掉自己的控制信息。
封装过程示例(访问网站)
【应用层】数据:"GET /index.html HTTP/1.1"
↓ 加上TCP头
【传输层】TCP段:源端口54321 + 目标端口80 + 数据
↓ 加上IP头
【网络层】IP包:源IP 192.168.1.100 + 目标IP 93.184.216.34 + TCP段
↓ 加上以太网头
【数据链路层】以太网帧:源MAC + 目标MAC + IP包
↓ 转换成比特流
【物理层】比特流:010101010101...
每一层添加的信息叫"协议头"(Header),就像快递的每一层包装都贴上新的标签。
📖 二、关键术语解释
| 术语 | 解释 | 类比 |
|---|---|---|
| 协议 | 网络设备之间通信的规则和约定 | 快递公司的运营规范 |
| 封装 | 数据层层添加协议头的过程 | 装快递时层层加包装 |
| 解封装 | 数据层层去掉协议头的过程 | 拆快递时层层打开包装 |
| PDU(协议数据单元) | 每一层数据单元的称呼 | 不同环节的快递称呼不同 |
| 比特流 | 物理层传输的二进制0和1 | 快递卡车在公路上行驶 |
| 帧 | 数据链路层的数据单位 | 快递包裹 |
| 包 | 网络层的数据单位 | 快邮 |
| 段 | 传输层的数据单位 | 信件 |
| 端到端 | 从源主机到目的主机的通信 | 从发货人到收货人 |
| 点到点 | 相邻节点之间的通信 | 快递从一个站点到下一个站点 |
不同层的PDU名称
应用层: 数据
传输层: 段 (Segment)
网络层: 包 (Packet)
数据链路层: 帧 (Frame)
物理层: 比特 (Bit)
常见端口速查
| 服务 | 端口 | 协议 | 说明 |
|---|---|---|---|
| HTTP | 80 | TCP | 网页浏览 |
| HTTPS | 443 | TCP | 加密网页浏览 |
| FTP | 20/21 | TCP | 文件传输 |
| SSH | 22 | TCP | 远程登录(Linux) |
| Telnet | 23 | TCP | 远程登录(不安全) |
| DNS | 53 | TCP/UDP | 域名解析 |
| DHCP | 67/68 | UDP | 自动分配IP |
| MySQL | 3306 | TCP | 数据库 |
| Redis | 6379 | TCP | 缓存数据库 |
| PostgreSQL | 5432 | TCP | 数据库 |
| Tomcat | 8080 | TCP | Java应用服务器 |
| RDP | 3389 | TCP | Windows远程桌面 |
💼 三、典型应用场景
场景1:应用无法连接数据库
问题描述:
应用服务器:192.168.10.100
数据库服务器:192.168.10.200
测试结果:
✅ ping 192.168.10.200 成功
❌ telnet 192.168.10.200 3306 失败
❌ 应用报错:Connection timeout
分层排查思路:
第1层 - 物理层检查
检查项:
✅ 网线是否插紧
✅ 交换机端口LED灯是否亮
✅ 网卡状态是否UP
命令:
Windows: ipconfig /all
Linux: ip link show
第2层 - 数据链路层检查
检查项:
✅ VLAN配置是否正确
✅ MAC地址表是否学习到
✅ 交换机端口模式(Access/Trunk)
命令:
display mac-address (华为设备)
show mac address-table (思科设备)
第3层 - 网络层检查
检查项:
✅ IP地址配置是否正确
✅ 子网掩码是否匹配
✅ 默认网关是否配置
✅ 路由表是否有路由条目
命令:
Windows: ipconfig /all && route print
Linux: ip addr && ip route
本场景:ping成功 = 网络层正常 ✅
第4层 - 传输层检查
检查项:
❌ 目标端口是否开放
❌ 防火墙是否阻止
❌ 服务是否监听该端口
命令:
telnet 192.168.10.200 3306
netstat -tulpn | grep 3306 (Linux)
本场景:telnet失败 = 传输层有问题 ❌
第5层 - 应用层检查
检查项:
✅ 数据库用户名密码是否正确
✅ 数据库是否允许该IP连接
✅ 数据库服务是否启动
命令:
systemctl status mysql
mysql -u root -p -h 192.168.10.200
结论 :问题出在传输层,可能原因:
- MySQL服务未启动
- 防火墙阻止了3306端口
- MySQL配置只允许本地连接
解决方案:
bash
# 检查MySQL服务
systemctl status mysql
# 启动MySQL
systemctl start mysql
# 检查端口监听
netstat -tulpn | grep 3306
# 配置防火墙(Linux)
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
# 检查MySQL绑定地址
cat /etc/mysql/my.cnf | grep bind-address
# 应该是 bind-address = 0.0.0.0 或注释掉
场景2:能访问外网IP但无法解析域名
问题描述:
✅ ping 8.8.8.8 成功(外网IP)
✅ ping 114.114.114.114 成功(DNS服务器IP)
❌ ping www.baidu.com 失败(域名解析)
应用报错:Unknown host
分析:
- ping外网IP成功 = 网络层正常,能访问互联网
- ping域名失败 = DNS解析有问题
问题定位 :应用层DNS配置问题
解决方案:
bash
# Windows查看DNS配置
ipconfig /all | findstr "DNS"
# Linux查看DNS配置
cat /etc/resolv.conf
# 修改DNS为公共DNS
Windows:
网络连接 → 属性 → IPv4设置 → DNS服务器
首选:114.114.114.114
备用:8.8.8.8
Linux:
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
# 验证
nslookup www.baidu.com
⚙️ 四、配置命令示例(华为设备)
4.1 基础网络命令
华为设备查看配置
shell
# 查看运行配置
display current-configuration
# 查看接口状态
display interface brief
# 查看IP路由表
display ip routing-table
# 查看ARP表
display arp
# 查看MAC地址表
display mac-address
# 查看VLAN配置
display vlan
思科设备查看配置
shell
# 查看运行配置
show running-config
# 查看接口状态
show ip interface brief
# 查看IP路由表
show ip route
# 查看ARP表
show ip arp
# 查看MAC地址表
show mac address-table
# 查看VLAN配置
show vlan brief
4.2 实用排错命令
Windows常用命令
cmd
:: 查看IP配置
ipconfig /all
:: 查看路由表
route print -4
:: Ping测试
ping 192.168.1.1
:: 持续Ping(100次)
ping 192.168.1.1 -n 100
:: 路由跟踪
tracert www.baidu.com
:: 端口测试
telnet 192.168.1.1 23
:: DNS解析测试
nslookup www.baidu.com
:: ARP缓存查看
arp -a
:: 清除DNS缓存
ipconfig /flushdns
:: 查看连接状态
netstat -an
:: 查看特定端口
netstat -an | findstr "3306"
Linux常用命令
bash
# 查看IP配置
ip addr show
ifconfig
# 查看路由表
ip route show
route -n
# Ping测试
ping -c 4 192.168.1.1
# 路由跟踪
traceroute www.baidu.com
# 端口测试
nc -zv 192.168.1.1 22
telnet 192.168.1.1 22
# DNS解析测试
nslookup www.baidu.com
dig www.baidu.com
# ARP缓存查看
arp -n
# 查看连接状态
netstat -tulpn
ss -tulpn
# 查看特定端口
netstat -tulpn | grep 3306
# 抓包
tcpdump -i eth0 -nn host 192.168.1.1
tcpdump -i eth0 port 3306
# 查看ARP表
ip neigh show
4.3 华为交换机基础配置示例
shell
# 进入系统视图
system-view
# 修改设备名称
sysname Switch-A
# 创建VLAN
vlan batch 10 20 100
# 配置接口为Access模式(连接PC)
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
quit
# 配置接口为Trunk模式(连接交换机)
interface GigabitEthernet0/0/24
port link-type trunk
port trunk allow-pass vlan 10 20 100
quit
# 配置管理IP
interface Vlanif 100
ip address 192.168.100.1 24
quit
# 配置远程登录
user-interface vty 0 4
authentication-mode password
set authentication password simple Huawei@123
protocol inbound ssh telnet
quit
# 保存配置
return
save
4.4 华为路由器基础配置示例
shell
# 进入系统视图
system-view
# 配置接口IP
interface GigabitEthernet0/0/0
ip address 192.168.1.1 24
quit
interface GigabitEthernet0/0/1
ip address 192.168.2.1 24
quit
# 配置静态路由
# 目标网段 10.1.0.0/16,下一跳 192.168.2.2
ip route-static 10.1.0.0 255.255.0.0 192.168.2.2
# 配置默认路由(访问互联网)
ip route-static 0.0.0.0 0.0.0.0 192.168.1.254
# 查看路由表
display ip routing-table
# 保存配置
save
⚠️ 五、常见误区与易错点
误区1:ping通就等于网络完全正常
错误认识:
"我能ping通对方,所以网络没问题!"
正确理解:
ping通只能证明:
✅ 物理层正常(网线通了)
✅ 数据链路层正常(MAC能转发)
✅ 网络层正常(IP可达)
但无法证明:
❌ 传输层是否通(端口是否开放)
❌ 应用层是否正常(服务是否可用)
案例:
✅ ping 192.168.1.200 成功
❌ telnet 192.168.1.200 3306 失败
→ 网络层正常,但传输层有问题
误区2:混淆IP地址和MAC地址
错误认识:
"IP地址和MAC地址不都是地址吗?有什么区别?"
正确理解:
| 特性 | IP地址 | MAC地址 |
|---|---|---|
| 层次 | 网络层(第3层) | 数据链路层(第2层) |
| 作用 | 逻辑地址,用于跨网段路由 | 物理地址,用于同网段转发 |
| 长度 | 32位(IPv4) | 48位 |
| 示例 | 192.168.1.100 | AA:BB:CC:DD:EE:FF |
| 变化 | 可以手动修改 | 网卡出厂固定 |
| 类比 | 家庭住址 | 身份证号码 |
记住:
- 跨网段通信用IP地址(路由器根据IP转发)
- 同网段通信用MAC地址(交换机根据MAC转发)
误区3:忘记配置网关
错误认识:
"我的IP地址配置正确,为什么访问不了其他网段?"
正确理解:
默认网关 = 本网段的出口路由器
没有网关:
✅ 同网段通信正常(192.168.1.10 ↔ 192.168.1.20)
❌ 跨网段通信失败(192.168.1.10 ↔ 192.168.2.10)
配置网关后:
数据包 → 网关 → 路由器 → 目标网段
案例:
错误配置:
IP: 192.168.1.10
掩码: 255.255.255.0
网关: (未配置)
→ 只能访问192.168.1.0/24网段
正确配置:
IP: 192.168.1.10
掩码: 255.255.255.0
网关: 192.168.1.1
→ 可以访问所有网段
误区4:忽略防火墙的影响
错误认识:
"网络配置都对了,为什么还是连不上?"
正确理解:
防火墙 = 网络的"门卫"
常见防火墙:
1. Windows防火墙
2. Linux防火墙(iptables/firewalld)
3. 网络防火墙(华为USG、天融信等)
4. 云安全组(阿里云、腾讯云)
防火墙默认策略:
- 通常拒绝所有入站连接
- 允许所有出站连接
案例:
网络配置正确,防火墙阻止导致连接失败
检查:
# Windows
netsh advfirewall firewall show rule name=all | findstr "3306"
# Linux
iptables -L -n | grep 3306
firewall-cmd --list-ports
解决:
# Windows添加防火墙规则
netsh advfirewall firewall add rule name="MySQL" `
dir=in action=allow protocol=TCP localport=3306
# Linux添加防火墙规则
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
误区5:TCP和UDP选错
错误认识:
"TCP和UDP不都是传输协议吗?随便选一个就行。"
正确理解:
| 特性 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 可靠传输(确认应答) | 不可靠传输 |
| 速度 | 较慢 | 快 |
| 资源消耗 | 高 | 低 |
| 适用场景 | 文件传输、邮件、网页 | 视频、语音、游戏 |
| 类比 | 电话通话 | 寄明信片 |
选择建议:
必须用TCP:
✅ 数据不能丢失(文件传输、数据库、邮件)
✅ 需要确认对方收到(HTTP、HTTPS、SSH、FTP、MySQL)
可以用UDP:
✅ 允许少量丢包(视频流、语音通话)
✅ 速度优先(在线游戏、DNS查询)
误区6:认为OSI模型过时
错误认识:
"TCP/IP才是实用的,OSI模型没用。"
正确理解:
OSI模型的价值:
1. 提供统一的框架(行业标准)
2. 帮助理解网络通信的本质
3. 故障排查时的分层思路
4. 网络设备厂商遵循的规范
TCP/IP的价值:
1. 互联网实际使用的协议栈
2. 更简洁实用(4层 vs 7层)
3. 所有网络设备都支持
结论:
→ 学习时用OSI模型理解概念
→ 工作时用TCP/IP模型排错
→ 两者互为补充,不是对立关系
📌 六、本节重点总结
核心要点
-
网络通信本质:数据封装→传输→解封装(像寄快递)
-
两个模型的关系:
- OSI七层模型:理论教科书
- TCP/IP四层模型:实际工作标准
-
数据封装过程(发送端):
应用数据 → 加TCP头 → 加IP头 → 加帧头 → 变成比特流 -
数据解封装过程(接收端):
比特流 → 去帧头 → 去IP头 → 去TCP头 → 应用数据 -
分层排查思维(从下到上):
物理层(网线)→ 数据链路层(MAC)→ 网络层(IP)→ 传输层(端口)→ 应用层(服务) -
重点关注:
- ✅ 网络层:IP地址配置、路由
- ✅ 传输层:端口号、防火墙
- ✅ 应用层:HTTP、MySQL等协议
- ⏳ 物理层、数据链路层:基本了解即可
记忆口诀
OSI七层从下往上记:
物(物理)数(数据链路)网(网络)传(传输)
会(会话)表(表示)应(应用)
"物理叔网传,表情应用"
常用命令速记
看配置:ipconfig /all
查路由:route print
测连通:ping IP
查端口:telnet IP 端口
查DNS:nslookup 域名
看ARP:arp -a
看连接:netstat -an
查路由:tracert 域名
第三部分:答案反馈与进阶
📝 答案详细点评
问题1:场景分析题
应用服务器 IP: 192.168.10.100
数据库服务器 IP: 192.168.10.200
测试结果:
✅ ping 192.168.10.200 成功
❌ telnet 192.168.10.200 3306 失败
❌ 应用无法连接数据库
**请问**:
1. 这说明网络哪几层是正常的?
2. 问题最可能出在哪一层?
3. 您会优先检查什么?
您的答案:
1. 物理层、数据链路层、网络层 ✅ 完全正确
2. 传输层 ✅ 完全正确
3. 优先检查传输层,端口是否开放 ✅ 完全正确
第1问:网络哪几层正常?✅ 满分
正确答案:物理层、数据链路层、网络层
解析:
ping命令使用ICMP协议(网络层)
✅ ping成功 = 说明以下层都正常:
物理层 ✅
→ 网线插好了,电信号能传输
→ 网卡LED灯亮,接口状态UP
数据链路层 ✅
→ MAC地址能正确转发
→ 交换机学习到MAC地址
→ VLAN配置正确(同VLAN)
网络层 ✅
→ IP地址配置正确
→ 路由表有路由条目
→ ICMP包能到达目标并返回
记住 :ping通是网络通信的最低要求,相当于"路是通的",但不保证"门是开的"。
第2问:问题最可能出在哪一层?✅ 满分
您的答案:传输层 ✅
教师补充:
为什么是传输层?
telnet 192.168.10.200 3306 失败
→ 尝试建立TCP连接到目标端口3306
→ TCP三次握手无法完成
→ 说明传输层不通
传输层问题的3大常见原因:
| 原因 | 占比 | 解决方案 |
|---|---|---|
| 防火墙阻止端口 | 60% | 配置防火墙规则放行端口 |
| 服务未启动 | 25% | 启动服务(systemctl start mysql) |
| 服务未监听该端口 | 15% | 检查配置文件(端口可能改了) |
第3问:优先检查什么?✅ 满分
您的答案:优先检查传输层,端口是否开放 ✅
完整的排查步骤(按优先级):
第1步:检查端口是否开放
────────────────────────────────
命令(在数据库服务器上执行):
Linux:
netstat -tulpn | grep 3306
或
ss -tulpn | grep 3306
Windows:
netstat -an | findstr "3306"
期望看到:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
↑ ↑ ↑
TCP协议 监听地址 监听状态
如果看不到:说明MySQL没有启动,或端口不是3306
第2步:检查防火墙是否阻止
────────────────────────────────
命令(在数据库服务器上执行):
Linux (firewalld):
firewall-cmd --list-ports
Linux (iptables):
iptables -L -n | grep 3306
Windows:
netsh advfirewall firewall show rule name=all | findstr "3306"
如果端口不在列表中:需要添加防火墙规则
第3步:检查MySQL服务状态
────────────────────────────────
命令:
systemctl status mysql
或
service mysql status
期望看到:
Active: active (running)
如果显示 inactive/failed:需要启动服务
systemctl start mysql
systemctl enable mysql # 开机自启
第4步:检查MySQL配置文件
────────────────────────────────
问题:MySQL可能只监听127.0.0.1(不允许远程连接)
配置文件位置:
/etc/mysql/my.cnf
或 /etc/my.cnf
检查项:
bind-address = 127.0.0.1 ❌ 只允许本地
bind-address = 0.0.0.0 ✅ 允许所有IP
#bind-address ✅ 注释掉也行
修改后重启:
systemctl restart mysql
问题2:概念理解题
(判断题)当您在浏览器输入 `www.baidu.com` 访问网站时:
- 您的电脑会先发送"百度首页"的请求内容,再层层加IP地址、MAC地址等包装 正确
- 还是先加IP地址、MAC地址等包装,最后才把"百度首页"的请求内容放进去? 错误
您的答案:
✅ 先发送"百度首页"的请求内容,再层层加IP地址、MAC地址等包装
❌ 先加IP地址、MAC地址等包装,最后才把"百度首页"的请求内容放进去
🎯 数据封装过程详解
完整的封装流程(以访问百度为例)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【第1步】应用层生成数据
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
您在浏览器输入:www.baidu.com
浏览器生成HTTP请求:
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0...
(空的)
这是"原始数据",就像您要寄的文件内容
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【第2步】传输层加上TCP头(端口信息)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TCP层加上自己的控制信息:
┌─────────────────────────────────┐
│ 源端口: 54321(随机端口) │
│ 目标端口: 80(HTTP端口) │
│ 序列号: 1001 │
│ 确认号: 0 │
│ 标志位: SYN(建立连接) │
├─────────────────────────────────┤
│ GET / HTTP/1.1 │ ← 应用层数据
│ Host: www.baidu.com │
└─────────────────────────────────┘
就像给文件装进信封,贴上快递单号
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【第3步】网络层加上IP头(地址信息)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IP层加上自己的控制信息:
┌─────────────────────────────────┐
│ 版本: 4 │
│ 源IP: 192.168.1.100 │
│ 目标IP: 220.181.38.148 │ ← 百度IP
│ TTL: 64 │
│ 协议: 6(TCP) │
├─────────────────────────────────┤
│ 源端口: 54321 目标端口: 80 │ ← TCP头
│ 序列号: 1001 │
├─────────────────────────────────┤
│ GET / HTTP/1.1 │ ← 应用数据
└─────────────────────────────────┘
就像给信封装进纸箱,写上收件地址
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【第4步】数据链路层加上以太网头(MAC地址)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
以太网层加上自己的控制信息:
┌─────────────────────────────────┐
│ 源MAC: AA:AA:AA:AA:AA:AA │
│ 目标MAC: BB:BB:BB:BB:BB:BB │ ← 网关MAC
│ 类型: 0x0800(IP协议) │
├─────────────────────────────────┤
│ 源IP: 192.168.1.100 │ ← IP头
│ 目标IP: 220.181.38.148 │
├─────────────────────────────────┤
│ 源端口: 54321 目标端口: 80 │ ← TCP头
├─────────────────────────────────┤
│ GET / HTTP/1.1 │ ← 应用数据
└─────────────────────────────────┘
就像给纸箱贴上运输标签,准备装车
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【第5步】物理层转换成比特流
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
将整个数据帧转换成二进制0和1:
01010101010101010110101010101010
11010101010101010101010101010101
10101010101010101010101010101010
...
变成电信号(网线)或光信号(光纤)发送出去
就像快递卡车开上高速公路
关键要点:数据是"从内到外"层层包装的
应用层数据(最里面的核心)
↓
┌─────────┐
│ TCP头 │ ← 第1层包装
├─────────┤
│ IP头 │ ← 第2层包装
├─────────┤
│ 以太网头│ ← 第3层包装
└─────────┘
↓
比特流(发送)
记住 :先有数据,再加包装! 就像:
- 先写好文件 → 再装信封 → 再装纸箱 → 再贴标签
- 不是先准备好纸箱和标签,再在里面放文件
🎓 进阶知识点补充
知识点1:为什么需要分层?
问题:为什么不直接发送数据,要分这么多层?
答案 :分工合作,各司其职
类比:建造房子
如果不分层:
一个人要同时懂:
- 打地基(物理层)
- 盖楼体(数据链路层)
- 装水电(网络层)
- 装修(传输层)
- 摆家具(应用层)
→ 效率低,容易出错
如果分层:
专业分工:
- 土木工程师负责地基和楼体
- 水电工程师负责水管电线
- 室内设计师负责装修
- 用户负责摆家具
→ 效率高,责任明确
网络分层的好处:
- 模块化:每一层专注自己的职责
- 可替换:某一层技术改变,不影响其他层
- 标准化:不同厂商设备可以互联互通
- 易调试:出问题时可以逐层排查
例子:
物理层可以升级:
网线 → 光纤 → 5G无线
不影响上面的IP地址、TCP、HTTP等
应用层可以创新:
HTTP → HTTP/2 → HTTPS → HTTP/3
不影响下面的TCP、IP、以太网等
知识点2:TCP三次握手(传输层核心概念)
问题:为什么telnet端口时要说"三次握手"?
答案 :建立可靠的TCP连接需要三个步骤
客户端 服务器
│ │
│ ① SYN(我要连接你) │
│──────────────────────────→ │
│ │
│ ② SYN+ACK(好的,我也连接你) │
│←───────────────────────────│
│ │
│ ③ ACK(好的,连接建立) │
│──────────────────────────→ │
│ │
TCP连接建立成功!
可以传输数据了
为什么是三次,不是两次?
两次握手的问题:
客户端发送的连接请求如果在中途滞留
→ 客户端重发请求
→ 连接建立后,第一个请求终于到达
→ 服务器误以为客户端要建立新连接
→ 资源浪费
三次握手的好处:
双方都确认对方"活着"且"愿意连接"
建立可靠的连接
实际抓包示例(Wireshark看到的):
帧1: 客户端 → 服务器
[SYN] Seq=0
"我可以连接吗?"
帧2: 服务器 → 客户端
[SYN, ACK] Seq=0 Ack=1
"可以,我可以连接你吗?"
帧3: 客户端 → 服务器
[ACK] Seq=1 Ack=1
"好的,连接建立!"
帧4开始:传输HTTP数据
telnet失败的原因:
telnet 192.168.10.200 3306
如果卡在"正在连接..."
→ 第1步SYN发出去了,但没收到第2步SYN+ACK
→ 原因:端口未开放,或防火墙丢弃了SYN包
如果立即显示"无法打开连接"
→ 本地立即拒绝
→ 原因:IP地址格式错误,或本地有防火墙阻止
知识点3:ICMP协议(ping命令背后的协议)
问题:ping为什么能检测网络连通性?
答案 :ping使用ICMP协议,属于网络层
ping 192.168.10.200 实际发生:
客户端 服务器
│ │
│ ICMP Echo Request │
│ (有人在吗?) │
│──────────────────────────→ │
│ │
│ ICMP Echo Reply │
│ (有人!) │
│←───────────────────────────│
│ │
ping成功 = 收到Echo Reply
ICMP协议特点:
| 特性 | 说明 |
|---|---|
| 所属层 | 网络层(第3层) |
| 协议号 | IP协议头中的协议号 = 1 |
| 传输层 | 不使用TCP或UDP |
| 端口 | 无端口号 |
| 用途 | 网络诊断、错误报告 |
ICMP消息类型:
类型8:Echo Request(请求)
→ ping发送的包
类型0:Echo Reply(回复)
→ ping收到的包
类型11:Time Exceeded(超时)
→ TTL过期,路由器返回
类型3:Destination Unreachable(目标不可达)
→ 网络、主机、端口不可达
为什么ping通但telnet不通?
ping使用ICMP(网络层)
→ 只要路由可达就能ping通
→ 不需要端口号
→ 就像"敲门看看有人在家"
telnet使用TCP(传输层)
→ 需要建立TCP连接
→ 需要端口开放
→ 就像"敲门并请求进门"
类比:
ping = 敲门,确认房子在 ✅
telnet = 敲门,请求进屋 ❌ 屋主不开门
知识点4:ARP协议(IP地址与MAC地址的桥梁)
问题:有了IP地址,为什么还需要MAC地址?
答案 :IP用于跨网段路由,MAC用于同网段转发
场景:PC1要给PC2发数据
PC1:192.168.1.10 MAC: AA:AA:AA:AA
PC2:192.168.1.20 MAC: BB:BB:BB:BB
步骤1:PC1知道PC2的IP(192.168.1.20)
步骤2:但PC1不知道PC2的MAC地址
步骤3:PC1广播ARP请求:
"谁是192.168.1.20?请告诉我你的MAC"
步骤4:PC2收到后回复:
"我是192.168.1.20,我的MAC是BB:BB:BB:BB"
步骤5:PC1现在可以直接发送数据给PC2
ARP缓存表:
PC1的ARP表:
IP地址 MAC地址
192.168.1.1 AA:BB:CC:DD:EE:FF (网关)
192.168.1.20 BB:BB:BB:BB:BB:BB (PC2)
192.168.1.30 CC:CC:CC:CC:CC:CC (PC3)
查看ARP表:
Windows: arp -a
Linux: arp -n
ARP工作流程:
场景:ping 192.168.1.20
PC1检查ARP表:
"192.168.1.20的MAC是什么?"
→ ARP表中没有
→ 发送ARP请求广播
ARP请求(广播):
"谁有192.168.1.20?请告诉我你的MAC"
→ 所有同网段设备都收到
PC2回复(单播):
"我是192.168.1.20,MAC是BB:BB:BB:BB"
→ 只回复给PC1
PC1更新ARP表,然后发送ping数据:
目标IP: 192.168.1.20
目标MAC: BB:BB:BB:BB:BB:BB
ARP缓存超时:
ARP表项有生存时间(通常2-5分钟)
超时后会删除,下次需要重新ARP解析
为什么需要超时?
→ 设备可能更换网卡
→ IP地址可能改变
→ 保证ARP表的准确性
🛠️ 实战技巧总结
技巧1:快速判断网络问题的层级
┌─────────────────────────────────────────┐
│ 网络故障快速定位表 │
├─────────────────────────────────────────┤
│ 故障现象 可能问题层级 │
├─────────────────────────────────────────┤
│ 网线灯不亮 物理层(网线) │
│ ping不同网段IP 网络层(路由) │
│ ping同网段IP失败 物理层/数据链路层 │
│ ping通但域名解析失败 应用层(DNS) │
│ ping通但端口不通 传输层(端口/防火墙)│
│ 端口通但应用报错 应用层(服务配置) │
└─────────────────────────────────────────┘
技巧2:常用排查命令组合
【场景1:网络完全不通】
步骤1:检查本地IP
ipconfig /all
步骤2:ping网关
ping 192.168.1.1
步骤3:ping外网IP
ping 8.8.8.8
步骤4:ping域名
ping www.baidu.com
【场景2:能ping通但应用无法连接】
步骤1:ping测试
ping 192.168.1.200 ✅
步骤2:端口测试
telnet 192.168.1.200 3306 ❌
步骤3:在目标服务器检查
netstat -tulpn | grep 3306
firewall-cmd --list-ports
步骤4:检查服务状态
systemctl status mysql
【场景3:DNS解析失败】
步骤1:ping IP测试
ping 8.8.8.8 ✅
步骤2:ping域名测试
ping www.baidu.com ❌
步骤3:DNS解析测试
nslookup www.baidu.com
步骤4:修改DNS
改为 114.114.114.114 或 8.8.8.8
技巧3:Wireshark抓包技巧
【过滤器表达式】
查看特定IP:
ip.addr == 192.168.1.100
查看特定端口:
tcp.port == 3306
查看HTTP请求:
http.request.method == "GET"
查看TCP三次握手:
tcp.flags.syn == 1 && tcp.flags.ack == 0
查看ping包:
icmp
查看特定协议:
dns || http || mysql
【常用操作】
1. 选择网卡开始捕获
2. 操作(访问网站、ping等)
3. 停止捕获
4. 使用过滤器过滤
5. 右键 → "追踪流" → "TCP流" 查看完整对话
📝 课后作业
作业1:案例分析(必做)
场景:
公司网络:
网段1:192.168.10.0/24(办公区)
网段2:192.168.20.0/24(服务器区)
应用服务器:192.168.20.100
部署在服务器区
MySQL端口:3306
防火墙已配置规则
您的笔记本:192.168.10.50
部署在办公区
测试结果:
✅ ping 192.168.20.100 成功
❌ telnet 192.168.20.100 3306 失败
问题:
- 这是几层的问题?(物理/数据链路/网络/传输/应用) 传输层 3306被防火墙拦截
- 您会依次检查什么?(至少3项)物理层、数据链路层、网络层
- 给出您的排查命令(至少2个)ip a(查看网卡的状态)、telnet 192.168.20.100 3306
作业2:概念巩固(选做)
填空题:
- ping命令使用__ICMP__协议,属于__网络__层
- telnet命令使用__TCP__协议,属于__传输层__层
- TCP建立连接需要__3__次握手
- MAC地址有_48___位,IP地址有__32__位(IPv4)
- ARP协议的作用是:__IP__地址转换为__MAC__地址