一、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)= 以太网帧

↓(物理层)

物理层:
将以太网帧转换为电信号发送到网线

网络传输过程中:

  1. 网线传输电信号到交换机

  2. 交换机根据目标MAC地址转发到路由器端口

  3. 路由器剥到网络层:

    • 查看IP头,TTL减1(从64→63)

    • 查询路由表(目标93.184.216.34匹配默认路由0.0.0.0/0)

    • 重新封装新的以太网帧(源MAC改为路由器WAN口MAC,目标MAC改为ISP网关MAC)

  4. 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头)

五、常见误解澄清

  1. "每一层都添加头部"不完全正确

    • 物理层不添加头,只编码

    • 某些层可能不加头(如应用层HTTP头是用户数据的一部分)

  2. 网络层不做差错控制

    • IP层只对头部做校验(保证路由正确)

    • 数据部分错误依赖传输层(TCP)或应用层

  3. 路由器最多处理到网络层

    • 普通路由器不看TCP/UDP端口(那是防火墙/负载均衡器)

    • 但NAT路由器需要查看传输层端口

  4. 交换机只在数据链路层

    • 普通交换机不解析IP地址

    • 三层交换机可以路由(但那是混合设备)

六、实际编程中如何理解

  • Socket编程:直接操作传输层(TCP/UDP)+ 应用层

  • 原始套接字(Raw Socket):可以自己构建IP头、TCP头(用于编写ping、traceroute)

  • libpcap/tcpdump:工作在第2层(抓取以太网帧)

  • DPDK/XDP:绕过内核协议栈,从网卡直接拿数据(第2层)

  • HTTP抓包:你看到的是应用层数据,实际链路层已剥掉所有底层头

一句话总结:物理层传比特,链路层传帧(MAC寻址),网络层传包(IP路由),传输层传段(端口+可靠性),应用层处理业务数据。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐