一、网络通信的本质与OSI模型

目录

学习目标: 理解"两台电脑如何通信",建立网络分层思维

第一部分:课程导入

以下这些场景:

  • 🔧 "应用服务器和数据库服务器无法连接"
  • 🔧 "客户端访问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               │
└──────────────────────────────┘

记住这个四层就够了! 实际排错时用的就是这个。

✅ 关键要点

  1. 网络通信 = 寄快递:层层包装→运输→层层拆开
  2. 数据封装:从应用层到物理层,每层都加上自己的"标签"
  3. 数据解封装:从物理层到应用层,每层拆开自己的"标签"
  4. 分层排查:从物理层开始,逐层向上检查
  5. 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

结论 :问题出在传输层,可能原因:

  1. MySQL服务未启动
  2. 防火墙阻止了3306端口
  3. 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模型排错
→ 两者互为补充,不是对立关系

📌 六、本节重点总结

核心要点

  1. 网络通信本质:数据封装→传输→解封装(像寄快递)

  2. 两个模型的关系:

    • OSI七层模型:理论教科书
    • TCP/IP四层模型:实际工作标准
  3. 数据封装过程(发送端):

    复制代码
    应用数据 → 加TCP头 → 加IP头 → 加帧头 → 变成比特流
  4. 数据解封装过程(接收端):

    复制代码
    比特流 → 去帧头 → 去IP头 → 去TCP头 → 应用数据
  5. 分层排查思维(从下到上):

    复制代码
    物理层(网线)→ 数据链路层(MAC)→ 网络层(IP)→ 传输层(端口)→ 应用层(服务)
  6. 重点关注:

    • ✅ 网络层: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:为什么需要分层?

问题:为什么不直接发送数据,要分这么多层?

答案 :分工合作,各司其职

复制代码
类比:建造房子

如果不分层:
  一个人要同时懂:
  - 打地基(物理层)
  - 盖楼体(数据链路层)
  - 装水电(网络层)
  - 装修(传输层)
  - 摆家具(应用层)
  → 效率低,容易出错

如果分层:
  专业分工:
  - 土木工程师负责地基和楼体
  - 水电工程师负责水管电线
  - 室内设计师负责装修
  - 用户负责摆家具
  → 效率高,责任明确

网络分层的好处:

  1. 模块化:每一层专注自己的职责
  2. 可替换:某一层技术改变,不影响其他层
  3. 标准化:不同厂商设备可以互联互通
  4. 易调试:出问题时可以逐层排查

例子:

复制代码
物理层可以升级:
  网线 → 光纤 → 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 失败

问题:

  1. 这是几层的问题?(物理/数据链路/网络/传输/应用) 传输层 3306被防火墙拦截
  2. 您会依次检查什么?(至少3项)物理层、数据链路层、网络层
  3. 给出您的排查命令(至少2个)ip a(查看网卡的状态)、telnet 192.168.20.100 3306

作业2:概念巩固(选做)

填空题:

  1. ping命令使用__ICMP__协议,属于__网络__层
  2. telnet命令使用__TCP__协议,属于__传输层__层
  3. TCP建立连接需要__3__次握手
  4. MAC地址有_48___位,IP地址有__32__位(IPv4)
  5. ARP协议的作用是:__IP__地址转换为__MAC__地址
相关推荐
姜鱼问生7 分钟前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
钱工的门窗技术笔记24 分钟前
智能门窗的边界与前提:为什么“智能”不能替代本体性能
网络·物联网·智能家居
是真的小外套39 分钟前
2021年软考中级信息安全工程师:选择题+案例分析真题全解析(含答案)
网络
盟接之桥43 分钟前
盟接之桥谈线束数字化-按单入按单出:线束企业库存管理的破局之道
大数据·前端·网络·数据库·人工智能·制造
南棋网络安全1 小时前
ssrf跨站请求伪造(保姆级教程)
运维·服务器·网络·网络安全
flash俊杰2 小时前
给工具调用划安全红线:SSRF 防护、逐跳复检与沙箱取舍
http
科技象限2 小时前
数据防泄漏系统:文件是怎么溜出门的,就该怎么堵
运维·网络·网络安全·安企神
听说6662 小时前
信息安全工程师 - 第二十二章 网站安全需求分析与安全保护工程
网络·安全·web安全·网络安全·系统安全
anew___3 小时前
《从零手写操作系统 (48):网络协议栈基础——Socket API与TCP/IP分层架构》
网络协议·tcp/ip·架构