网络层次模型
一、OSI七层模型(理论标准)
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
第一层:物理层
核心职责:在物理介质上传输原始比特流
具体做法:
-
定义物理特性:电压高低(+5V表示1,-5V表示0)、光脉冲、无线电频率
-
定义机械特性:网线插头RJ45形状、光纤接口SC/LC、引脚数量
-
定义传输介质:双绞线(Cat5e/6/7)、光纤(单模/多模)、同轴电缆、无线(2.4GHz/5GHz)
-
定义速率与距离:10Mbps/100Mbps/1Gbps/10Gbps/40Gbps
-
编码与解码:Manchester编码、4B/5B编码(避免长串0/1丢失时钟)
-
传输方式:单工(广播)、半双工(对讲机)、全双工(电话)
例子:网卡将"Hello"的ASCII码01001000 01100101...转换成电信号在网线上传输
协议/设备:以太网(IEEE 802.3)、WiFi(802.11)、蓝牙、USB;设备:集线器(Hub)、中继器、网线、光纤
第二层:数据链路层
核心职责:在相邻节点间可靠传输数据帧,差错控制和流量控制
具体做法:
-
成帧(Framing):将比特流封装成帧,添加帧头和帧尾
典型帧结构:| MAC目的地址(6B) | MAC源地址(6B) | 类型/长度(2B) | 数据(46-1500B) | CRC校验(4B) | -
MAC地址寻址:48位物理地址(如
00:1A:2B:3C:4D:5E),局域网内唯一 -
差错检测:CRC循环冗余校验(能检测出99.99%的传输错误)
-
差错纠正:某些协议支持前向纠错(FEC),但不常用
-
重传机制:收到的帧损坏则丢弃,依赖上层重传(或链路层自动重传如ARQ)
-
流量控制:停等协议、滑动窗口(避免发送方淹没接收方)
-
介质访问控制(MAC):
-
CSMA/CD(以太网有线):先听后说,边听边说,冲突后退
-
CSMA/CA(WiFi无线):先听后说,请求发送/清除发送(RTS/CTS)
-
-
交换机学习:交换机构建MAC地址表,转发帧到对应端口
例子:添加源MAC(自己的网卡地址)和目标MAC(路由器地址),计算CRC校验
协议:以太网(Ethernet)、WiFi(802.11)、PPP(点对点协议)、HDLC
设备:交换机(Switch)、网桥(Bridge)
第三层:网络层
核心职责:路径选择和跨网络通信,实现端到端的数据传输
具体做法:
-
IP地址寻址:逻辑地址(如
192.168.1.100),可跨网络 -
路由选择:
-
查看目标IP,决定从哪个接口发出
-
运行路由协议(OSPF/BGP/RIP)计算最佳路径
-
路由器维护路由表(目标网络/掩码/下一跳/接口)
-
-
分片与重组:
-
MTU(最大传输单元)限制(以太网1500字节)
-
大于MTU的IP包分片,到达目的地后重组
-
现代网络尽量用路径MTU发现避免分片(TCP MSS协商)
-
-
封装与解封装:
-
收到第2层的帧,剥掉帧头取出IP数据报
-
添加IP头后交给第2层
-
IP头结构:| 版本(4) | 头长(4) | 服务类型(8) | 总长度(16) | 标识(16) | 标志(3) | 片偏移(13) | TTL(8) | 协议(8) | 首部校验和(16) | 源IP(32) | 目的IP(32) | 选项 | 数据 |
-
-
TTL跳数限制:每跳减1,到0丢弃,防止路由环路
-
ARP协议:IP地址 → MAC地址(只在同一子网内)
-
发送ARP广播"谁有192.168.1.1?告诉192.168.1.100"
-
目标回复自己的MAC地址,缓存到ARP表
-
-
NAT网络地址转换:
-
私有IP(10.x, 172.16.x, 192.168.x)→ 公网IP
-
维护端口映射表(TCP/UDP端口+内外IP映射)
-
例子:封装IP头(源IP=192.168.1.100, 目标IP=8.8.8.8),查询路由表决定从网关192.168.1.1发出
协议:IP(IPv4/IPv6)、ICMP(ping/traceroute)、ARP、RARP、OSPF、BGP、RIP
设备:路由器(Router)、三层交换机
第四层:传输层
核心职责:端到端通信,提供可靠传输、流量控制、端口复用
具体做法:
TCP(传输控制协议):
-
连接管理:
-
三次握手:SYN → SYN-ACK → ACK(建立连接)
-
四次挥手:FIN → ACK → FIN → ACK(关闭连接)
-
维护连接状态表(源IP/port、目标IP/port、状态)
-
-
可靠性:
-
序列号:保证数据有序(乱序重组)
-
确认应答(ACK):每个包到达需确认,否则重传
-
超时重传(RTO):动态计算RTT,决定超时时间
-
快速重传:收到3个重复ACK立即重传
-
-
流量控制:
-
滑动窗口:通告对方自己还有多少接收缓冲区空间
-
零窗口探测:接收方满时,定期发送探测包
-
-
拥塞控制:
-
慢启动(cwnd从1个MSS指数增长)
-
拥塞避免(线性增长)
-
快速恢复(丢包时cwnd减半)
-
-
端口复用:同一IP多个服务(HTTP:80,SSH:22,MySQL:3306)
UDP(用户数据报协议):
-
无连接(不握手)
-
不可靠(不重传,不排序)
-
低延迟(适合实时音视频、DNS、游戏)
SCTP(流控制传输协议):
-
多宿主(多IP绑定)
-
消息边界保留
-
用于电信信令
例子:封装TCP头(源端口=54321,目的端口=80,序列号=12345,窗口大小=65535),计算校验和
协议:TCP、UDP、SCTP、DCCP
第五层:会话层
核心职责:建立、管理和终止应用程序之间的对话
具体做法:
-
会话建立:协商认证方式、数据传输模式(全双工/半双工)
-
会话恢复:断点续传(从上次中断处继续传输)
-
检查点设置:在数据流中插入同步点(每传输1MB标记一次)
-
会话迁移:移动设备在不同网络间切换时保持会话
-
会话活动管理:空闲会话的keep-alive,超时关闭
例子:NetBIOS维护文件共享会话(Windows共享文件夹);SQL客户端与数据库服务器的会话
协议:NetBIOS、RPC(远程过程调用)、PPTP(VPN)、SSH(会话层+应用层)
第六层:表示层
核心职责:数据格式转换、加密解密、压缩解压
具体做法:
-
数据格式转换:
-
字节序转换(大端/小端)
-
字符编码(ASCII ↔ UTF-8 ↔ UTF-16 ↔ EBCDIC)
-
数据类型转换(C语言的int ↔ Java的int)
-
-
加密/解密:
-
对称加密(AES对HTTP数据加密 → HTTPS)
-
非对称加密(TLS握手时证书交换)
-
-
压缩/解压:
-
gzip压缩HTTP响应(Content-Encoding: gzip)
-
图片格式转换(JPEG ↔ PNG ↔ GIF)
-
-
结构化数据序列化:
-
JSON/XML解析
-
Protobuf/Thrift/MessagePack编码
-
例子:浏览器请求https://google.com,表示层进行TLS加密和HTTP压缩
协议:TLS/SSL(证书、加密)、ASCII/Unicode、JPEG/MPEG(但实际在应用层处理)
第七层:应用层
核心职责:为用户提供网络服务的接口
集体做法:
-
HTTP/HTTPS:
-
浏览器输入URL → DNS解析 → 构建HTTP请求
-
方法(GET/POST)、头部(Host/User-Agent)、body(表单数据)
-
状态码(200 OK, 404 Not Found)
-
Cookie/Session管理
-
-
DNS:
-
域名解析(google.com → 142.250.185.46)
-
递归/迭代查询,DNS缓存
-
-
SMTP/POP3/IMAP:发送和接收邮件
-
FTP/SFTP:文件上传下载
-
SSH:远程登录、安全隧道
-
WebSocket:全双工实时通信
-
DHCP:自动分配IP地址
例子:用户在浏览器输入"www.baidu.com",应用层发出HTTP GET请求
协议:HTTP/1.1/2/3、DNS、SMTP、FTP、SSH、Telnet、DHCP、NTP、WebSocket、gRPC、MQTT
二、TCP/IP四层模型(实际使用的模型)
更贴近实际实现,将OSI上三层合并为“应用层”
第一层:网络接口层(对应OSI物理层+数据链路层)
驱动+网卡处理以太网帧
发送:IP数据报 --> 封装MAC头 --> 转成比特流
接收:比特流 --> 校验CRC --> 解封装 --> 交给IP层
第二层:网络层(对应OSI网络层)
IP包的路由和转发
TTL减1、分片重装
第三层:传输层(对应OSI传输层)
TCP/UDP的端口管理、连接状态机
第四层:应用层(对应OSI会话+表示+应用层)
用户进程直接操作(浏览器、邮件客户端、FTP工具)
三、数据流转完整示例
场景:浏览器访问http://example.com(IP: 93.184.216.34)
发送端(客户端)
应用层(HTTP):
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Chrome
↓(交给传输层)
传输层(TCP):
封装TCP头(源端口随机54321,目标端口80,序列号100,ACK号0,SYN=1)
+ 上层数据 = TCP报文段
↓(交给网络层)
网络层(IP):
封装IP头(源IP=192.168.1.100,目标IP=93.184.216.34,TTL=64,协议=6(TCP))
+ TCP报文段 = IP数据报
↓(交给网络接口层)
数据链路层(以太网):
封装以太网头(源MAC=AA:BB:CC:DD:EE:FF,目标MAC=路由器MAC)
+ IP数据报 + 帧尾(CRC)= 以太网帧
↓(物理层)
物理层:
将以太网帧转换为电信号发送到网线
网络传输过程中:
-
网线传输电信号到交换机
-
交换机根据目标MAC地址转发到路由器端口
-
路由器剥到网络层:
-
查看IP头,TTL减1(从64→63)
-
查询路由表(目标93.184.216.34匹配默认路由0.0.0.0/0)
-
重新封装新的以太网帧(源MAC改为路由器WAN口MAC,目标MAC改为ISP网关MAC)
-
-
ISP路由器 → 骨干网路由器(BGP路由交换)→ 到达目标服务器
接收端(服务器)
物理层:网线收到电信号 → 转换成比特流
数据链路层:网卡驱动
- 识别以太网帧(检查目标MAC是否是自己)
- 计算CRC校验(错误则丢弃)
- 解封装,取出IP数据报 → 交给IP层
网络层(IP):
- 检查目标IP是否是本机(93.184.216.34)
- 检查IP头校验和,TTL>0
- 查看协议字段=6(TCP),交给TCP层
传输层(TCP):
- 检查目标端口=80(HTTP服务监听)
- 处理三次握手(回复SYN-ACK)
- 数据到达后:组装TCP流(检查序列号、ACK确认)
- 重组完成后交给应用层
应用层(HTTP):
- 解析HTTP请求(GET /index.html)
- 读取文件/index.html
- 构建HTTP响应(200 OK + HTML内容)
- 从相同路径反向传输回去
四、每一层的关键数据结构
| 层级 | 数据单元名称 | 关键头部字段 |
| 物理层 | 比特流(bits) | 开(信号编码) |
| 数据链路层 | 帧(Frame) | 源MAC、目的MAC、类型、CRC |
| 网络层 | 数据报(Datagram) | 源IP、目的IP、TTL、协议号 |
| 传输层 | 报文段(Segment)/数据报(Datagram) | 源端口、目的端口、序列号、窗口 |
| 应用层 | 消息(Message) | 协议自定义(如HTTP头) |
五、常见误解澄清
-
"每一层都添加头部"不完全正确:
-
物理层不添加头,只编码
-
某些层可能不加头(如应用层HTTP头是用户数据的一部分)
-
-
网络层不做差错控制:
-
IP层只对头部做校验(保证路由正确)
-
数据部分错误依赖传输层(TCP)或应用层
-
-
路由器最多处理到网络层:
-
普通路由器不看TCP/UDP端口(那是防火墙/负载均衡器)
-
但NAT路由器需要查看传输层端口
-
-
交换机只在数据链路层:
-
普通交换机不解析IP地址
-
三层交换机可以路由(但那是混合设备)
-
六、实际编程中如何理解
-
Socket编程:直接操作传输层(TCP/UDP)+ 应用层
-
原始套接字(Raw Socket):可以自己构建IP头、TCP头(用于编写ping、traceroute)
-
libpcap/tcpdump:工作在第2层(抓取以太网帧)
-
DPDK/XDP:绕过内核协议栈,从网卡直接拿数据(第2层)
-
HTTP抓包:你看到的是应用层数据,实际链路层已剥掉所有底层头
一句话总结:物理层传比特,链路层传帧(MAC寻址),网络层传包(IP路由),传输层传段(端口+可靠性),应用层处理业务数据。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)