Day04-05 网络基础与进阶
[TOC]
1. 网络概述
互联网 = 信息高速公路(网络设备)+ 规范(网络协议)
2. OSI 七层协议
| 层级 |
名称 |
核心协议 |
数据单位 |
主要功能 |
| 7 |
应用层 |
HTTP、SMTP、FTP、TLS |
消息/报文 |
为应用程序提供网络服务接口 |
| 4 |
传输层 |
TCP、UDP |
段(Segment) |
端到端通信,端口寻址 |
| 3 |
网络层 |
IP、ICMP、ARP |
包(Packet) |
跨网络路由,IP 寻址 |
| 2 |
数据链路层 |
Ethernet(以太网) |
帧(Frame) |
局域网内帧转发,MAC 寻址 |
| 1 |
物理层 |
IEEE 802.3、RJ45 |
比特(Bit) |
物理介质上的电信号传输 |
严格来说 OSI 是七层,但考试/面试中常简化为 五层(合并应用层上三层),本文采用五层模型。
2.1 物理层
- 传输电/光信号,负责比特与物理信号之间的转换
- 常见物理介质:双绞线、光纤、无线电波
- 数据单位:Bit(比特)
2.2 数据链路层(以太网协议)
| Ethernet 帧结构 |
长度 |
| Head |
18 Byte |
| Data |
≤ 1500 Byte |
| CRC |
4 Byte |
Head 组成:
| 字段 |
长度 |
说明 |
| 目标 MAC |
6 Byte |
接收方网卡地址 |
| 源 MAC |
6 Byte |
发送方网卡地址 |
| 数据描述 |
6 Byte |
协议类型(如 0x0800 = IPv4) |
- MAC 地址:网卡物理地址,48 位十六进制数(如
00:1A:2B:3C:4D:5E),全球唯一
- 广播:局域网内采用广播机制通信(类似"喊话")
- MTU:最大传输单元 = 1500 字节(不含帧头/尾)
2.3 网络层(IPv4)
| IPv4 数据包结构 |
长度 |
| Head |
20-60 Byte |
| Data |
≤ 65515 Byte |
Head 核心字段:
- 源 IP 地址(32 位)
- 目标 IP 地址(32 位)
关键概念:
通信流程对比
flowchart TD
A[源主机] --> B{目标是否在同一局域网?}
B -->|是| C[ARP 广播获取目标 MAC]
C --> D[直接发送帧]
B -->|否| E[ARP 广播获取网关 MAC]
E --> F[封装帧: 源MAC→网关MAC]
F --> G[路由器转发]
G --> H{下一跳是否到达?}
H -->|否| G
H -->|是| I[ARP 获取目标 MAC]
I --> J[最终交付]
| 场景 |
通信方式 |
说明 |
| 同局域网 |
ARP 广播 → 直接通信 |
目标 MAC 直接获取 |
| 跨局域网 |
ARP 获取网关 MAC → 路由器逐跳转发 |
借助网关实现路由 |
2.4 传输层
- 基于端口工作,IP + Port = 唯一网络应用标识
- 端口范围:0 ~ 65535(16 位)
| 常见端口 |
服务 |
| 80 |
HTTP |
| 443 |
HTTPS |
| 22 |
SSH |
| 3306 |
MySQL |
| 6379 |
Redis |
2.5 应用层
- HTTP/HTTPS、SMTP、FTP、DNS 等协议
- Socket:对传输层及以下协议的抽象封装,提供统一编程接口
3. DNS 域名解析
3.1 域名结构
www.baidu.com. → 子域名.主域名.根域(根域 . 可省略)
域名从右到左层级递减,最后的 . 表示根域名服务器。
3.2 记录类型
| 记录类型 |
作用 |
示例 |
| A |
域名 → IPv4 |
www.example.com → 1.2.3.4 |
| AAAA |
域名 → IPv6 |
www.example.com → ::1 |
| CNAME |
域名 → 域名 |
www.example.com → example.com |
| MX |
邮件交换记录 |
@example.com → mail.example.com |
| NS |
域名服务器 |
example.com → ns1.example.com |
3.3 解析查询方式
| 方式 |
说明 |
场景 |
| 递归查询 |
DNS 服务器不知道答案,但代替客户端向下查询并返回最终结果 |
客户端 → 本地 DNS |
| 迭代查询 |
DNS 服务器不知道答案,返回另一个 DNS 服务器地址,让客户端自行查询 |
DNS 服务器之间 |
sequenceDiagram
participant Client as 客户端
participant Local as 本地 DNS<br/>(递归)
participant Root as 根域名服务器
participant TLD as .com TLD<br/>(迭代)
participant Auth as 权威 DNS<br/>(迭代)
Client->>Local: 查询 www.example.com
Local->>Root: 迭代查询
Root-->>Local: 返回 .com 服务器地址
Local->>TLD: 迭代查询
TLD-->>Local: 返回 example.com DNS 地址
Local->>Auth: 迭代查询
Auth-->>Local: 返回 IP 地址
Local-->>Client: 最终结果
3.4 解析优先级
Chrome DNS 缓存 > HOSTS 文件 > 系统 DNS 缓存 > DNS 服务器
3.5 验证命令
# 追踪 DNS 解析全过程
dig +trace egonlin.com
# 简单查询
nslookup www.example.com
# 查看 DNS 缓存(Windows)
ipconfig /displaydns
4. 网络通信流程
4.1 架构模型
| 架构 |
说明 |
示例 |
| C/S |
Client/Server,客户端-服务器 |
MySQL 客户端连接数据库 |
| B/S |
Browser/Server,浏览器-服务器 |
Web 应用(浏览器访问网站) |
4.2 数据封装过程
flowchart LR
subgraph Application["应用层"]
A["HTTP 请求"]
end
subgraph Transport["传输层"]
T["TCP 头 + Data<br/>源端口:随机 → 目标端口:80"]
end
subgraph Network["网络层"]
N["IP 头 + TcpSegment<br/>源IP → 目标IP"]
end
subgraph DataLink["数据链路层"]
D["以太网帧头 + IP包 + 帧尾<br/>源MAC → 目标MAC"]
end
subgraph Physical["物理层"]
P["转换为电信号"]
end
A --> T --> N --> D --> P
style Application fill:#e1f5fe
style Transport fill:#fff3e0
style Network fill:#e8f5e9
style DataLink fill:#fce4ec
逐层封装示意:
| 封装层级 |
结构 |
说明 |
| 以太网帧 (Frame) |
Ethernet Head (14B) + IP 包 + CRC/FCS (4B) |
数据链路层封装 |
| IP 包 (Packet) |
IP Header (20B) + Data (TCP Segment) |
网络层封装 |
| TCP 段 (Segment) |
TCP Header (20B) + Application Data |
传输层封装 |
MTU 限制:以太网 MTU = 1500 字节,当数据包超过 MTU 时需要进行分片。
5. TCP vs UDP
| 特性 |
TCP |
UDP |
| 连接性 |
面向连接(三次握手) |
无连接 |
| 可靠性 |
可靠,有确认机制 |
不可靠,无确认 |
| 传输效率 |
相对较低 |
高(开销小) |
| 数据顺序 |
保证顺序 |
不保证顺序 |
| 流量控制 |
支持(滑动窗口) |
不支持 |
| 拥塞控制 |
支持(慢启动、拥塞避免) |
不支持 |
| 头部大小 |
20~60 字节 |
8 字节 |
| 适用场景 |
文件传输、邮件、Web |
视频通话、DNS、直播 |
5.1 TCP 三次握手
sequenceDiagram
participant C as 客户端
participant S as 服务端
Note over C: 初始状态: CLOSED
Note over S: 初始状态: LISTEN
C->>S: SYN=1, seq=x
Note over C: 状态: SYN_SENT
S->>C: SYN=1, ACK=1, seq=y, ack=x+1
Note over S: 状态: SYN_RCVD
C->>S: ACK=1, seq=x+1, ack=y+1
Note over C: 状态: ESTABLISHED
Note over S: 状态: ESTABLISHED
Note over C,S: 双方确认彼此收发能力正常
握手状态变化:
| 阶段 |
客户端 |
服务端 |
| 初始 |
CLOSED |
LISTEN |
| 第1次握手 |
SYN_SENT |
- |
| 第2次握手 |
- |
SYN_RCVD |
| 第3次握手 |
ESTABLISHED |
ESTABLISHED |
5.2 TCP 四次挥手
sequenceDiagram
participant C as 主动关闭方
participant S as 被动关闭方
C->>S: FIN=1, seq=u
Note over C: 状态: FIN_WAIT_1
S->>C: ACK=1, ack=u+1
Note over S: 状态: CLOSE_WAIT
Note over C: 状态: FIN_WAIT_2
Note over S: 处理剩余数据...
S->>C: FIN=1, seq=w
Note over S: 状态: LAST_ACK
C->>S: ACK=1, ack=w+1
Note over C: 状态: TIME_WAIT
Note over S: 状态: CLOSED
Note over C: 等待 2MSL 后 CLOSED
MSL(Maximum Segment Lifetime):报文最大生存时间,通常为 60 秒
6. 网络通信四种地址
| 地址类型 |
用途 |
获取方式 |
| IP 地址 |
主机唯一标识 |
DHCP 动态 / 静态配置 |
| 子网掩码 |
划分网络/主机部分 |
与 IP 共同配置 |
| 网关地址 |
跨网段通信出口 |
通常由路由器分配 |
| DNS 服务器 |
域名解析 |
ISP 提供 / 自建 |
6.1 流量类型
| 流量类型 |
说明 |
示例 |
| 南北流量 |
与外网通信(纵向) |
用户访问服务器 |
| 东西流量 |
集群内部通信(横向) |
Nginx → App Server |
7. 子网划分
7.1 CIDR 表示法
| 前缀 |
子网掩码 |
可用主机数 |
示例网段 |
| /24 |
255.255.255.0 |
254 |
192.168.71.0/24 |
| /25 |
255.255.255.128 |
126 |
192.168.71.0/25, 192.168.71.128/25 |
| /26 |
255.255.255.192 |
62 |
4 个子网,每段 62 主机 |
| /30 |
255.255.255.252 |
2 |
point-to-point 链路 |
7.2 示例:/25 子网划分
flowchart LR
subgraph subnet1["192.168.71.0/25"]
A1["网络地址: 192.168.71.0"]
A2["可用IP: 1~126"]
A3["广播地址: 192.168.71.127"]
end
subgraph subnet2["192.168.71.128/25"]
B1["网络地址: 192.168.71.128"]
B2["可用IP: 129~254"]
B3["广播地址: 192.168.71.255"]
end
8. VLAN 虚拟局域网
- 将一个物理交换机划分为多个逻辑交换机
- 每个 VLAN 是一个独立的广播域
- 跨 VLAN 通信需要三层路由
- 常见使用场景:
- 隔离办公网络与服务器网络
- 按部门/业务划分网络
- 提升网络安全性和性能
9. 特殊 IP 地址
| 地址范围 |
类型 |
说明 |
| 10.0.0.0 ~ 10.255.255.255 |
私网 A 类 |
大型组织内部网络 |
| 172.16.0.0 ~ 172.31.255.255 |
私网 B 类 |
中型网络 |
| 192.168.0.0 ~ 192.168.255.255 |
私网 C 类 |
家庭/小型办公网络 |
| 127.0.0.1 |
本地回环 |
localhost |
| 169.254.0.0/16 |
链路本地地址 |
DHCP 失败时自动分配 |
| 0.0.0.0 |
任意网络 |
表示"任何地址" |
10. 常用网络命令
# 查看 IP 配置
ip addr show
ifconfig
# 测试连通性
ping <目标IP/域名>
# 追踪路由
traceroute <目标>
tracert <目标> # Windows
# 查看端口监听
netstat -tlnp
ss -tlnp
# DNS 查询
dig <域名>
nslookup <域名>
# 网络诊断
curl -v <URL>
telnet <IP> <端口>