网络模型
问题
OSI 七层模型和 TCP/IP 四层模型是什么?各层有哪些常见协议?
答案
网络模型是对网络通信过程的抽象分层,帮助理解和设计网络协议。
模型对比
OSI 七层模型
| 层次 | 名称 | 功能 | 协议/设备 |
|---|---|---|---|
| 7 | 应用层 | 为应用提供网络服务 | HTTP、HTTPS、DNS、FTP、SMTP |
| 6 | 表示层 | 数据格式转换、加密 | SSL/TLS、JPEG、ASCII |
| 5 | 会话层 | 建立、管理会话 | NetBIOS、RPC |
| 4 | 传输层 | 端到端传输 | TCP、UDP |
| 3 | 网络层 | 路由和寻址 | IP、ICMP、路由器 |
| 2 | 数据链路层 | 帧传输、差错检测 | Ethernet、MAC、交换机 |
| 1 | 物理层 | 比特流传输 | 网线、光纤、集线器 |
数据封装过程
TCP/IP 四层模型
实际应用中更常用 TCP/IP 模型。
| 层次 | 名称 | OSI 对应 | 协议 |
|---|---|---|---|
| 4 | 应用层 | 5-7 层 | HTTP、DNS、FTP、SSH |
| 3 | 传输层 | 4 层 | TCP、UDP |
| 2 | 网络层 | 3 层 | IP、ICMP、ARP |
| 1 | 网络接口层 | 1-2 层 | Ethernet、Wi-Fi |
各层详解
应用层
// 常见应用层协议
const applicationProtocols = {
// Web
HTTP: { port: 80, description: '超文本传输协议' },
HTTPS: { port: 443, description: '安全 HTTP' },
// 域名
DNS: { port: 53, description: '域名解析' },
// 邮件
SMTP: { port: 25, description: '发送邮件' },
POP3: { port: 110, description: '接收邮件' },
IMAP: { port: 143, description: '接收邮件' },
// 文件传输
FTP: { port: 21, description: '文件传输' },
SFTP: { port: 22, description: '安全文件传输' },
// 远程
SSH: { port: 22, description: '安全远程登录' },
Telnet: { port: 23, description: '远程登录' },
// 实时通信
WebSocket: { port: 80/443, description: '全双工通信' }
};
传输层
// TCP vs UDP
const transportProtocols = {
TCP: {
connection: '面向连接',
reliability: '可靠',
order: '有序',
use: 'HTTP、FTP、SMTP'
},
UDP: {
connection: '无连接',
reliability: '不可靠',
order: '无序',
use: 'DNS、视频流、游戏'
}
};
网络层
// IP 协议
interface IPPacket {
version: 4 | 6; // IPv4 或 IPv6
sourceIP: string; // 源 IP
destinationIP: string; // 目标 IP
ttl: number; // 生存时间
protocol: number; // 上层协议(6=TCP, 17=UDP)
payload: Buffer; // 数据
}
// ICMP 协议(网络诊断)
// ping 命令使用 ICMP Echo Request/Reply
数据链路层
// 以太网帧
interface EthernetFrame {
destinationMAC: string; // 目标 MAC 地址
sourceMAC: string; // 源 MAC 地址
type: number; // 上层协议类型
payload: Buffer; // 数据
fcs: number; // 帧校验序列
}
// MAC 地址
// 48 位,如 00:1A:2B:3C:4D:5E
// 前 24 位是厂商代码(OUI)
// 后 24 位是设备标识
网络设备与层次
| 设备 | 工作层次 | 功能 |
|---|---|---|
| 集线器 | 物理层 | 信号放大,广播 |
| 交换机 | 数据链路层 | MAC 地址转发 |
| 路由器 | 网络层 | IP 路由 |
| 负载均衡 | 传输层/应用层 | 流量分发 |
| 防火墙 | 多层 | 安全过滤 |
前端相关协议栈
// 前端开发者需要了解的协议
// 应用层
interface FrontendProtocols {
HTTP: 'GET/POST/PUT/DELETE 请求';
HTTPS: 'HTTP + TLS 加密';
WebSocket: '全双工通信';
DNS: '域名解析';
HTTP2: '多路复用、头部压缩';
HTTP3: 'QUIC + UDP';
}
// 这些协议直接影响:
// - 接口设计
// - 性能优化
// - 安全实践
数据包分析
使用 Wireshark
// 抓包分析 HTTP 请求
// 以太网帧
Ethernet II, Src: aa:bb:cc:dd:ee:ff, Dst: 11:22:33:44:55:66
// IP 包
Internet Protocol Version 4, Src: 192.168.1.100, Dst: 93.184.216.34
// TCP 段
Transmission Control Protocol, Src Port: 54321, Dst Port: 80
// HTTP 请求
GET /index.html HTTP/1.1
Host: example.com
使用浏览器 DevTools
// Network 面板可以看到:
// - 请求/响应头
// - 时间线(DNS、TCP、TLS、请求、响应)
// - 协议版本(h2, h3)
// - 状态码
常见面试问题
Q1: OSI 七层模型各层的作用?
答案:
| 层 | 作用 | 记忆方法 |
|---|---|---|
| 应用层 | 应用程序接口 | 用户直接接触 |
| 表示层 | 数据格式转换 | 翻译 |
| 会话层 | 会话管理 | 主持人 |
| 传输层 | 端到端传输 | 快递员 |
| 网络层 | 路由寻址 | 导航 |
| 数据链路层 | 帧传输 | 道路 |
| 物理层 | 比特传输 | 车辆 |
Q2: TCP/IP 模型与 OSI 模型的区别?
答案:
| 区别 | OSI | TCP/IP |
|---|---|---|
| 层数 | 7 层 | 4 层 |
| 来源 | 理论模型 | 实践模型 |
| 应用 | 教学为主 | 实际使用 |
| 设计 | 先有模型 | 先有协议 |
Q3: 各层使用什么地址?
答案:
| 层 | 地址类型 | 示例 |
|---|---|---|
| 应用层 | URL/域名 | www.example.com |
| 传输层 | 端口号 | 80、443 |
| 网络层 | IP 地址 | 192.168.1.1 |
| 数据链路层 | MAC 地址 | 00:1A:2B:3C:4D:5E |
Q4: 数据包从发送到接收经历了什么?
答案:
发送方(封装):
- 应用层:生成数据
- 传输层:添加端口号(TCP/UDP 头)
- 网络层:添加 IP 地址(IP 头)
- 数据链路层:添加 MAC 地址(以太网头)
- 物理层:转换为比特流
接收方(解封装):
- 物理层:接收比特流
- 数据链路层:去除以太网头,验证 MAC
- 网络层:去除 IP 头,验证 IP
- 传输层:去除 TCP/UDP 头
- 应用层:处理数据
Q5: 前端开发需要了解哪些网络知识?
答案:
| 层级 | 知识点 | 应用场景 |
|---|---|---|
| 应用层 | HTTP/HTTPS、WebSocket | API 设计、实时通信 |
| 应用层 | HTTP/2、HTTP/3 | 性能优化 |
| 应用层 | DNS | 预解析、CDN |
| 传输层 | TCP 三次握手 | 理解连接建立 |
| 安全 | TLS、证书 | HTTPS 配置 |