1 OSI七层模型
- 由ISO组织制定的一套数字通信标准流程模型,这个模型是一个建议模型,不是强制的
- 七层模型从高到低
- 应用层
- 提供用户的交互接口
- 表示层
- 提供数据的编码解码,压缩解压缩,加密解密等处理
- 会话层
- 提供会话ID,会话管理
- 传输层
- 提供数据的分段,提供具体传输方式,再应用数据前加上TCP/UDP的数据头部,此层叫做数据段
- TCP
- 可靠传输,使用序列号和确认号来确保每个数据都被正确的接受
- 应用层不需要指定额外的机制,就可以保障数据的准确传输
- TCP需要有额外的网络开销
- UDP
- UDP不保证可靠传输,不提供确认、重传和排序机制。若数据超过MTU,会在IP曾进行分片
- 发送后,无法获取到对方是否成功无误的接受
- 使用UDP如果需要可靠传输,需要应用层面定制额外的机制保障
- 端口号
- 将数据与应用的进程号进行绑定
- 区分电脑上的不同网络应用
- 源和目的端口号
- 端口号范围:1~65535
- 其中1~1024是预留给公用服务的
- 80:http
- 443:https
- 22:ssh
- 53:dns
- 23:telnet
- 3306:mysql
- 3389:windows远程桌面
- 网络层
- 数据链路层定义了最大传输单元(MTU),常见为1500字节。网络层根据MTU决定是否对IP数据包进行分片。此曾的数据单元叫做数据包
- 提供了远程访问的IP地址寻址功能,相当于门牌号码,可以帮助快递找到你在的大概位置
- 基本概念
- 公网IP地址,私有IP地址
- 子网掩码用于定义网络位,网络位相同表示在同一个局域网
- 广播地址是主机都是1,向此地址发送数据,全部局域网都能收到
- 网络号是主机位都是0,此地址无法用于通信,是用来代指此局域网的
- 源和目的IP地址
- 数据链路层
- 根据数据完整性校验,需要确保每一个二进制都是正确的,此层叫做数据帧
- 使用CRC循环冗余校验算法,将二进制计算得到校验值吗,此校验值在接收的时候会拿来与新计算比较,如果一致,就说明数据有效
- 提供物理传输接口的编号(MAC地址),此地址是烧录在芯片上的,无法轻易改变,能够确定具体的设备的具体接口
- MAC地址理论上应全球唯一,但在虚拟机等场景下可以自定义。在同一个局域网下必须唯一。虚拟机的网卡MAC地址随机产生,可自定义,为了保障通信。在一个局域网中,必须唯一
- 源和目的的MAC地址
- 根据数据完整性校验,需要确保每一个二进制都是正确的,此层叫做数据帧
- 物理层
- 定义数据传输介质的电气规范(二进制,数据位)
- 有线
- 电缆
- 光缆
- 接口类型
- RJ45水晶头
- SC连接器,LC连接器
- 无线
附录参考:下图展示了按OSI七层模型组织的常用网络通信协议结构,可作为上述内容的扩展参考

1.1 数据封装
物理层
数据链路层
MAC地址
ARP协议
向局域网发送二层广播(目的mac地址为全F(FF:FF:FF:FF:FF:FF)),查询目的的IP所对应的MAC地址
收到正确的回应,就会记录在本地的ARP表中,在限定的时间内下次再访问就可以直接完成数据的封装
ARP表是为了保障局域网内通信的
数据在局域网中,具体是从哪个设备的什么接口接收,由MAC地址决定
在Windows或者Linux查看arp表的命令
arp,
网络层
- IP地址
- 广播传递的范围仅限于同一个局域网,无法跨越IP网段传播
- 网络会维护一个路由表,路由表可以指明去往其他网段应该用什么接口出发,每台具备转发能力的网络层设备,都会查询路由表,然后进行转发,经过多跳之后,数据就可以到达目的地所在局域网
- 维护路由表的方法
- 静态路由,手动把路由表条目写上去
- 动态路由,通过协议,路由器相互协议
- RIP
- OSPF
- BGP
传输层
- 端口号
- 发送端往往是随机端口号,接收端是常用端口号
应用层
- 端口号对应的进程
1.2 数据流实例
以电脑访问百度(www.baidu.com)为例
需要的设备:电脑,无线路由器,互联网服务提供商网络,远程Web服务器
第一阶段:电脑->路由器
应用层(客户端发送请求)
- 访问www.baidu.com
- 应用层生成HTTP/HTTPS请求报文:
GET / HTTP/1.1 Host:www.baidu.com... - 此时数据单位:应用层报文
表示层(安全处理)
- 对数据进行加密处理
- 如果是HTTPS,表示层通过TLS库将HTPP报文加密
- 添加TLS头部,变成TLS记录
- 此时数据单位:加密后的PDU(PDU 是 协议数据单元 的缩写。它指的是在计算机网络体系结构的特定层中,数据包或数据块的标准格式)
会话层(建立会话)
- 管理这次Web会话
- 封装
- 建立和维护与服务器的会话状态
- 分配会话ID,管理会话生命周期
- 此时数据单位:会话消息
传输层(端到端控制)
准备可靠的传输
封装
- 添加TCP头部
源端口:随机高位端口(如54321) 目标端口:443(HTTPS) 序列号:初始序列号 标志位:SYN(例如在TCP连接建立时)- 形成TCP段
这里是第一次出现端口号。标识了哪个应用程序(浏览器)与服务器的哪个服务(HTTPS)通信
网络层(跨网络寻址)
添加逻辑地址
封装
- 添加IP头部
版本:IPv4 源IP:内网地址 目标IP:通过DNS解析得到的百度服务器IP TTL:64(每经过一个路由器减一) 协议:6(表示上层是TCP)- 形成IP数据包
这里是第一次出现IP地址,用于跨网络寻址
数据链路层(局域网内传输)
准备在Wi-FI链路上传输
封装
- 添加无线帧头部(或以太网头部,取决于当前链路类型)
目标MAC地址:路由器Wi-Fi接口MAC 源MAC地址:无线网卡MAC 类型:0x0800(表示承载的是IP数据包)- 添加帧尾部(FCS(Frame Check Sequence),用于错误检测)
- 形成无线数据帧
这里第一次出现MAC地址,用于局域网内设备识别
物理层(无线信号传输)
- 转换为无线信号
- 封装
- 将帧的比特流转换为无线电波
- 使用2.4GHz或5GHz频段,特定信道
- 调制方式:如OFDM
- 此时数据单位:比特流
此时完整的数据单元:[前导码][MAC头部][IP头部][TCP头部][TLS头部][HTTP数据][FCS]
第二阶段:路由器处理
路由器通常不处理传输层以上的内容,但为了NAT功能,它会“查看”TCP/UDP端口号
- 物理层
- 无线网卡接收无线电波,转换为比特流
- 数据链路层
- 检查帧的目标MAC地址,确认是发给自己的
- 去掉MAC地址和帧尾部
- 将IP数据包交给录由的网络层处理
- 网络层(路由器核心工作)
- 检查IP包头部的目标IP地址
- 发现是公网IP,而源是私有IP
- 执行NAT(网络地址转换)
- 将源IP从私有IP改为路由器的公网IP:新端口
- 在NAT表中记录映射关系
- 重新计算IP头部校验和
- 查询路由表,确定从WAN口发送到ISP网关
- 数据链路层(出口)
- 添加新的MAC头部
- 目标MAC:ISP网关的MAC地址
- 源MAC:路由器WAN口的MAC地址
- 添加新的MAC头部
- 物理层
- 通过光纤将比特流发送给ISP
- 物理层
第三阶段:互联网传输
数据包经过多个路由器跳转,每经过一个路由器都会发生一下操作
- 物理层接收
- 数据链路层检查MAC地址并解封装
- 网络层
- TTL减1,如果TTL为0,那么丢弃并发送ICMP超时报文
- 查询路由表,决定下一跳
- 更新新的MAC头部
- 重新封装并转发
- IP头部基本不变
- MAC头部每一跳都在变
第四阶段:到达百度服务器
服务器接收到数据后,进行反向解封装
- 物理层
- 网卡接收光/电信号
- 数据链路层
- 检查MAC地址,解封装
- 网络层
- 检查IP地址,确认是发给自己的
- 如果是负载均衡器 ,可能将请求转发给后端的实际服务器
- 传输层
- 根据目标端口443,将TCP段交给Web服务器进程
- TCP协议栈处理序列号,确认,重组等
- 会话层
- 识别或建立会话(如果是新的HTTPS连接,会进行TLS握手)
- 表示层
- TLS解密,将密文恢复为明文HTTP请求
- 应用层
- Web服务器(如Nginx)解析HTTP请求
- 生成HTTP响应
- 物理层
第五阶段:响应原路返回
- 源IP和目标IP(此时的目标IP为路由器gongwangIP)进行转换
- 经过互联网路由,达到最开始的路由器
- 路由器查询NAT表,将目标IP改为服务端IP,改回端口为54321
- 通过Wi-Fi发送给电脑
- 电脑解封装,最终在浏览器中显示百度首页
| 层次 | 数据单元名称 | 关键地址/标识 | 在何处封装/解封装 | 典型设备 |
|---|---|---|---|---|
| 应用层 | 报文/消息 | URL、HTTP方法 | 应用程序内 | 浏览器、服务器软件 |
| 表示层 | 格式化数据 | 加密算法、编码类型 | 系统库/加密库 | SSL/TLS库 |
| 会话层 | 会话/消息 | 会话ID | 操作系统/中间件 | 会话管理器 |
| 传输层 | 段/数据报 | 端口号 | 操作系统内核 | 主机、防火墙 |
| 网络层 | 数据包 | IP地址 | 操作系统内核、路由器 | 路由器、三层交换机 |
| 数据链路层 | 帧 | MAC地址 | 网卡驱动、交换机 | 交换机、网桥、AP |
| 物理层 | 比特流 | 无(电气特性) | 网卡/物理接口 | 网卡、Hub、线缆 |
- 三次地址变化:应用层用URL,传输层用端口,网络层用IP,数据链路层用MAC
- 两层不变:IP地址端到端基本不变,MAC地址每跳都变
- 路由器处理下三层,但为NAT会"偷看"端口
- 交换机/AP只处理下两层,基于MAC地址转发
- 防火墙可以工作在3-7层,深度包检测可看到应用层内容
1.3 常见协议与OSI层级的对应关系(参考)
| OSI层级 | 典型协议举例 |
|---|---|
| 应用层 | HTTP、HTTPS、DNS、SMTP、POP3、SSH、Telnet |
| 传输层 | TCP、UDP |
| 网络层 | IP、ICMP、ARP、OSPF、BGP |
| 数据链路层 | 以太网、Wi-Fi(802.11)、PPP |
| 物理层 | 双绞线、光纤、无限频段 |