【计算机网络】第3章:传输层—概述、多路复用与解复用、UDP

news2025/6/6 19:55:04

目录

一、概述和传输层服务

二、多路复用与解复用

三、无连接传输:UDP

四、总结

(一)多路复用与解复用

(二)UDP


一、概述和传输层服务

二、多路复用与解复用

三、无连接传输:UDP

四、总结

(一)多路复用与解复用

核心思想:

想象一条高速公路(网络信道)。多路复用允许来自不同源头(发送方应用进程)的车辆(数据)共享同一条主干道(同一个网络层协议,如IP),最终到达各自正确的目的地(接收方应用进程)。解复用则是在目的地根据车辆上的标识(地址)将它们分拣到各自正确的出口(接收方应用进程)。

1. 多路复用 (Multiplexing)

  • 定义: 在发送端,将来自多个高层应用进程或数据流的数据,合并同一个低层协议数据单元(通常是网络层数据包,如IP数据报)中,通过同一个底层传输信道(如一条物理链路、一个网络层连接)进行传输的过程。

  • 目的:

    • 提高资源利用率: 避免为每一个应用进程或短时数据流都建立独立的底层连接,极大地节省了网络带宽和端口资源。

    • 简化网络管理: 网络层只需处理单一的IP数据报流,而不需要关心上层众多的应用流。

    • 降低成本: 共享基础设施降低了传输成本。

  • 关键要素 (在发送端):

    • 源应用进程: 多个需要发送数据的应用程序(如浏览器标签、邮件客户端、文件传输)。

    • 传输层协议: 主要是 TCP 和 UDP。

    • 多路复用字段: 传输层在将应用数据封装成段(Segment)或数据报(Datagram)时,会添加关键的标识信息:

      • 源端口号 (Source Port Number): 标识发送数据的本地应用进程。

      • 目的端口号 (Destination Port Number): 标识数据要交付给远程主机上的哪个目标应用进程。

    • 网络层封装: 传输层段(包含源/目的端口号和应用数据)被交给网络层(如IP)。网络层将其封装成IP数据报,添加源/目的IP地址

  • 过程描述 (发送端):

    1. 不同的应用进程(P1, P2, ...)通过各自的套接字(Socket) 调用传输层服务(如send())。

    2. 传输层(TCP/UDP)接收来自不同套接字的数据块。

    3. 传输层为每个数据块添加传输层头部,其中最关键的是填写源端口号(标识发送进程)和目的端口号(标识目标进程)。

    4. 这些带有源/目的端口号的传输层段被传递给网络层(IP)。

    5. 网络层将传输层段封装成IP数据报(添加源/目的IP地址),并通过底层网络接口发送出去。来自不同应用进程(不同源端口)但去往同一目标主机(同一目的IP)的数据,就这样被“复用”到了同一个IP数据流中。

2. 解复用 (Demultiplexing)

  • 定义: 在接收端,从同一个低层协议数据单元流(如接收到的IP数据报流)中,根据数据单元中的标识信息,分离出数据,并将其正确地交付指定的高层应用进程的过程。它是多路复用的逆过程。

  • 目的:

    • 正确交付: 确保接收到的数据被准确地传递给目标主机上正确的目标应用进程。

    • 重建数据流: 对于面向连接的协议(如TCP),解复用还涉及到将乱序到达的段按顺序重组,还原成原始的应用数据流。

  • 关键要素 (在接收端):

    • 传输层协议: TCP 或 UDP。

    • 解复用字段: 接收端传输层从网络层交付的IP数据报中提取:

      • 源IP地址 (Source IP Address): 标识发送数据的主机。

      • 目的IP地址 (Destination IP Address): 标识接收数据的主机(本机)。

      • 协议字段 (Protocol Field - IP头部): 指示封装的是TCP段(6)还是UDP数据报(17)。

      • 源端口号 (Source Port Number): 标识发送数据的远程应用进程。

      • 目的端口号 (Destination Port Number): 标识数据要交付给本机上的哪个目标应用进程。

    • 套接字 (Socket): 接收端操作系统为每个正在等待数据的应用进程维护一个“门户”。套接字由 <本地IP地址, 本地端口号, 协议(TCP/UDP)> 唯一标识。对于TCP,一个连接由 <源IP, 源端口, 目的IP, 目的端口> 四元组唯一标识。

  • 过程描述 (接收端):

    1. 接收主机通过网络接口接收到IP数据报。

    2. 网络层(IP)检查目的IP地址是否匹配本机地址。匹配则剥去IP头部,根据IP头部的协议字段确定将数据报的有效载荷(传输层段)交给哪个传输层协议(TCP或UDP)。

    3. 传输层(TCP或UDP)接收数据段。

    4. 传输层检查段头部中的目的端口号

    5. 传输层根据以下信息查找匹配的套接字

      • UDP: 主要依赖 <目的IP地址, 目的端口号>。只要目的端口号匹配一个正在监听的UDP套接字,数据就被交付给该套接字对应的应用进程。源IP和源端口通常用于回复。

      • TCP: 依赖完整的 <源IP地址, 源端口号, 目的IP地址, 目的端口号> 四元组来唯一标识一个TCP连接。传输层查找具有匹配四元组的套接字,将数据交付给该套接字绑定的应用进程。TCP还负责段排序、确认、重传等。

    6. 数据被放入对应套接字的接收缓冲区。

    7. 目标应用进程通过其套接字读取接收缓冲区中的数据。

多路复用与解复用的核心依赖:端口号

  • 端口号 (Port Number): 这是一个16位的整数(范围0-65535),是传输层实现多路复用和解复用的关键标识符

    • 源端口号: 由发送方主机(通常是操作系统)动态分配(客户端端口),用于标识发送数据的本地进程。

    • 目的端口号: 通常由应用层协议约定(服务器端口),用于标识接收方主机上的目标服务进程(如HTTP:80, HTTPS:443, FTP:21, DNS:53)。客户端程序需要知道服务器的目的端口号才能发起连接或发送数据。

  • 套接字地址 (Socket Address): 网络通信的端点由 IP地址 + 端口号 唯一标识。发送端的套接字地址是<源IP, 源端口>,接收端的套接字地址是<目的IP, 目的端口>。TCP连接则由两端的套接字地址(四元组)唯一确定。

TCP 与 UDP 在复用/解复用上的关键区别

特性UDP (无连接)TCP (面向连接)
连接标识无连接概念每个连接由四元组 <源IP, 源端口, 目的IP, 目的端口> 唯一标识
解复用依据仅依赖目的端口号 (匹配监听该端口的UDP套接字)依赖完整的四元组 (匹配特定的TCP连接套接字)
数据交付数据报独立交付,可能乱序、丢失。字节流按序可靠交付。
套接字一个UDP套接字可以接收所有发往其端口的数据报 (无论来源)。每个TCP连接对应一个独立的套接字。
示例DNS查询、音视频流、广播/多播。Web浏览(HTTP/HTTPS)、文件传输(FTP)、电子邮件(SMTP/POP/IMAP)、远程登录(SSH)。

应用层的多路复用

这个概念不仅限于传输层。在更高层也存在复用:

  • HTTP/1.1 Pipelining: 允许在同一个TCP连接上发送多个HTTP请求(复用),但响应必须按序返回(容易队头阻塞)。

  • HTTP/2: 引入了流(Stream)的概念,在同一个TCP连接上实现了真正的多路复用。多个HTTP请求/响应对(流)可以交错传输,互不阻塞。每个流有唯一的ID标识。这极大地提高了Web页面的加载效率。

  • HTTP/3 (基于QUIC): QUIC协议在UDP之上实现了自己的可靠传输和连接管理。它在QUIC层也使用了流ID来实现多路复用,并且解决了TCP层的队头阻塞问题。

总结

  • 多路复用: 发送端将多个应用数据流汇聚到一个底层传输信道(通过添加端口号/IP地址标识)。

  • 解复用: 接收端根据端口号/IP地址标识将汇聚的数据流分离并正确交付给目标应用进程。

  • 核心机制: 依赖于传输层端口号(结合网络层IP地址)来唯一标识通信端点(套接字)。

  • TCP vs UDP: TCP使用四元组进行精确解复用到特定连接;UDP仅使用目的端口号解复用到监听套接字。

  • 价值: 实现了网络资源的极大共享,简化了网络结构,是互联网能够高效承载海量应用的基础。

(二)UDP

UDP 的核心定位与设计哲学

  1. “尽力而为”的传输层协议: UDP位于TCP/IP模型的传输层(第4层),在网络层IP服务(提供主机到主机的逻辑通信)之上,为应用进程提供进程到进程的逻辑通信。

  2. 极简主义: UDP协议本身非常简单。它在IP提供的基础服务之上,只添加了非常少的功能:

    • 多路复用/解复用: 通过端口号区分同一主机上的不同应用进程。

    • 轻量级的错误检测: 提供可选的校验和,用于检测传输过程中UDP头部和数据部分是否出错。

  3. 无连接 (Connectionless):

    • 发送数据前不需要像TCP那样建立连接(三次握手)。

    • 每个UDP数据报都是独立的实体,彼此之间没有关联。

    • 通信双方没有长期维护的连接状态(如序号、确认号、窗口大小、RTT估计等)。

  4. 不可靠 (Unreliable):

    • 不保证交付: 发送的UDP数据报可能丢失,且协议本身不会重传。

    • 不保证顺序: 即使发送方按顺序发送多个数据报,接收方收到的顺序也可能不同。

    • 不保证完整性: 虽然有校验和,但如果检测到错误,UDP通常只是静默丢弃该数据报,不会通知发送方或接收方上层应用(有些实现可能会将错误信息上传给应用层)。

    • 不提供拥塞控制: UDP本身没有内置机制来感知或响应网络拥塞。发送方可以以任何速率发送数据报,不管网络是否拥塞。

UDP 报文段 (Segment) 结构 - 极其精简

UDP数据报由头部 (Header) 和数据 (Data) 两部分组成。头部固定为 8 字节,包含4个字段,每个字段2字节:

 0               16              31
+---------------+---------------+---------------+
|    源端口号    |    目的端口号   |               |
|   (Source Port) | (Destination Port)|               |
+---------------+---------------+---------------+
|     长度       |    校验和      |               |
|   (Length)     |   (Checksum)  |               |
+---------------+---------------+---------------+
|                                               |
|                   数据...                     |
|                                               |
+-----------------------------------------------+
  1. 源端口号 (Source Port, 16 bits): 标识发送数据的应用进程。可选字段,如果发送方应用不需要回复,可以设为0。主要用于接收方回复时知道发给谁。

  2. 目的端口号 (Destination Port, 16 bits): 必需字段。标识接收主机上目标应用进程(如DNS服务监听53端口)。

  3. 长度 (Length, 16 bits): 整个UDP数据报的长度(包括8字节头部 + 数据部分),以字节为单位。最小值是8(只有头部,没有数据)。

  4. 校验和 (Checksum, 16 bits): 可选字段(但实际实现中几乎总是启用),用于检测UDP头部和数据在传输过程中是否出错。

    • 计算范围: 不仅计算UDP头部和数据,还包含一个伪头部(Pseudo-Header)。伪头部包含源IP、目的IP、协议号(UDP=17)、UDP长度。引入伪头部的目的是为了验证数据报确实到达了正确的目的主机和正确的传输层协议。

    • 工作原理: 发送方计算校验和并填入该字段。接收方重新计算校验和,如果与收到的值不匹配,则静默丢弃该数据报(通常不会产生错误消息)。如果校验和字段为0,表示发送方没有计算校验和(不推荐)。

UDP 的关键特性总结

  1. 无连接: 减少建立/维护连接的开销和延迟。

  2. 不可靠: 不保证交付、顺序或完整性。

  3. 无拥塞控制: 发送速率由应用决定,可能加剧网络拥塞。

  4. 面向报文: 应用层交给UDP多长的报文,UDP就发送多长的报文(一次发送一个完整的报文)。UDP不会对应用层报文进行拆分或合并(IP层可能会分片,但那是IP层的行为)。接收方UDP一次交付一个完整的报文给应用层。应用层需要自己处理报文边界。

  5. 轻量级:

    • 头部开销极小(仅8字节),相比TCP至少20字节的头部更高效。

    • 发送方和接收方无需维护复杂的连接状态信息。

    • 协议处理逻辑简单,速度快,延迟低。

  6. 支持一对一、一对多、多对一、多对多通信: 利用IP层的单播、广播、多播功能,UDP可以轻松实现多种通信模式。

UDP 的优势 (为什么选择它?)

UDP的“缺点”(不可靠、无连接)在特定场景下恰恰是其优势所在:

  1. 极低的延迟和抖动:

    • 无连接建立开销(三次握手),数据立即可发。

    • 无确认、重传机制,数据持续流动。

    • 应用场景: 实时音视频通话(VoIP如Skype, Zoom)、在线游戏、实时流媒体(直播)、视频会议。少量丢包导致的短暂卡顿或杂音比TCP重传导致的严重延迟或缓冲更容易被用户接受。

  2. 简单高效,开销小:

    • 协议处理简单,CPU和内存资源占用少。

    • 头部开销小,有效载荷占比高。

    • 应用场景: 简单查询-响应协议(DNS - 通常第一个查询用UDP)、SNMP(网络管理)、DHCP(动态主机配置)、TFTP(简单文件传输,常用于网络设备固件更新)。

  3. 细粒度的应用层控制:

    • 应用开发者可以在应用层根据需要实现自己所需的可靠性机制、流量控制、拥塞控制或顺序保证,更加灵活定制化。例如:

      • 音视频应用:选择性重传关键帧,忽略不重要的中间帧。

      • 金融行情推送:只发送最新数据,丢弃旧数据。

      • 在线游戏:实现自定义的、对延迟敏感的状态同步和预测机制。

  4. 支持广播和多播:

    • UDP天然支持向多个接收者发送数据(广播:同一子网所有主机;多播:订阅了特定组的主机)。

    • 应用场景: 服务发现(如mDNS/Bonjour)、路由协议更新(如RIP)、多媒体分发(IPTV)、实时数据分发(股票行情)。

UDP 的缺点与挑战

  1. 不可靠性: 数据可能丢失、乱序、重复。应用层必须自行处理这些问题(如果需要可靠性)。

  2. 缺乏拥塞控制: 如果应用设计不当,大量发送UDP流量可能淹没网络,导致严重拥塞,影响自身和其他协议(如TCP)的性能。这是使用UDP最大的风险和责任。 现代应用(如QUIC)在UDP之上实现了自己的拥塞控制来解决这个问题。

  3. 报文大小限制: UDP数据报最大长度为65535字节(包括8字节头部)。但实际受限于下层协议:

    • IPv4: 受限于MTU(通常是1500字节以太网MTU)。如果UDP数据报长度(IP层载荷)超过路径MTU,IP层会进行分片。分片会降低效率,增加丢失风险(一个分片丢失,整个IP数据报失效)。

    • IPv6: 不支持中间路由器分片。如果UDP数据报长度超过路径MTU,且发送方没有使用路径MTU发现(PMTUD),数据报会被丢弃,并可能产生ICMPv6 “Packet Too Big” 错误。

  4. 无连接状态: 防火墙和NAT设备更难跟踪和管理UDP“流”,可能带来安全或穿越问题(需要应用层保活或辅助协议如STUN/TURN/ICE)。

典型使用 UDP 的应用层协议

  • DNS (Domain Name System): 域名解析查询(通常优先使用UDP,响应太大或需要TCP时切TCP)。

  • DHCP (Dynamic Host Configuration Protocol): 动态获取IP地址。

  • SNMP (Simple Network Management Protocol): 网络设备监控和管理。

  • TFTP (Trivial File Transfer Protocol): 简单文件传输(如无盘启动)。

  • RTP (Real-time Transport Protocol): 承载实时音视频数据流(通常运行在UDP之上)。

  • QUIC (Quick UDP Internet Connections): 新一代传输协议,在UDP之上实现可靠、安全、低延迟的传输,用于HTTP/3。

  • 在线游戏协议: 大量实时多人在线游戏使用UDP或其变种进行状态同步。

  • VoIP (Voice over IP): 如SIP信令(有时用TCP/UDP)和RTP媒体流(主要用UDP)。

  • 自定义协议: 许多对延迟敏感或有特殊需求的应用会基于UDP开发自己的协议。

总结:UDP 的本质

UDP是传输层协议中的“轻骑兵”。它放弃了TCP的可靠性、顺序保证、流量控制和拥塞控制等复杂机制,换取了极致的简单、高效和低延迟。这种设计哲学使得UDP在以下场景中成为首选:

  • 对延迟和抖动极其敏感的应用(实时音视频、游戏)。

  • 简单高效的查询-响应模型(DNS, SNMP)。

  • 需要广播或多播的应用

  • 应用层自身需要实现定制化传输逻辑的场景

  • 能容忍一定程度数据丢失的场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2400688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神经符号AI的企业应用:结合符号推理与深度学习的混合智能

&#x1f4a1; 技术前沿&#xff1a; 神经符号AI代表了人工智能发展的新阶段&#xff0c;它将深度学习的模式识别能力与符号推理的逻辑分析能力有机结合&#xff0c;创造出更加智能、可解释且可靠的AI系统。这种混合智能技术正在重塑企业的智能化应用&#xff0c;从自动化决策到…

VSCode 中 C/C++ 安装、配置、使用全攻略:小白入门指南

引言 本文为Windows系统下安装配置与使用VSCode编写C/C代码的完整攻略&#xff0c;示例机器为Windows11。 通过本文的指导&#xff0c;你可以成功在Windows 机器上上使用VSCode进行C/C开发。 在文章开始之前&#xff0c;你可以先阅读下面这段话&#xff0c;以便于对步骤有个大…

重温经典算法——希尔排序

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本原理 希尔排序是插入排序的改进版&#xff0c;通过按增量分组并逐步缩小增量实现排序。时间复杂度取决于增量序列&#xff0c;平均约为 O(n log n) 到 O(n^(3/2))&…

CortexON:开源的多代理AI系统无缝自动化和简化日常任务

简介 CortexON是一个开源的多代理AI系统&#xff0c;灵感来自Manus和OpenAI DeepResearch等高级代理平台。CortexON旨在无缝自动化和简化日常任务&#xff0c;擅长执行复杂的工作流程&#xff0c;包括全面的研究任务、技术操作和复杂的业务流程自动化。 技术架构 CortexON的技…

海信IP810N-海思MV320芯片-安卓9-2+16G-免拆优盘卡刷固件包

海信IP810N-海思MV320芯片-安卓9-216G-免拆优盘卡刷固件包 线刷方法&#xff1a;&#xff08;新手参考借鉴一下&#xff09; 1.准备一个优盘&#xff0c;最佳是4G&#xff0c;卡刷强刷刷机&#xff0c;用一个usb2.0的8G以下U盘&#xff0c;fat32&#xff0c;2048块单分区格式化…

2025年6月4日收获

Authorization Authorization是一种通用的、标准化的权限控制和认证的通用框架&#xff0c;它能够使跨系统和跨域的身份验证和授权管理更容易&#xff0c;使不同应用程序之间能够更轻松地实现单点登录&#xff08;SSO&#xff09;、用户身份验证和授权控制等。 在前端使用 axi…

leetcode hot100 链表(二)

书接上回&#xff1a; leetcode hot100 链表&#xff08;一&#xff09;-CSDN博客 8.删除链表的倒数第N个结点 class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* currhead;int len0;while(curr){currcurr->next;len;}int poslen-n…

6. MySQL基本查询

1. 表的增删改查 Create(创建), Retrieve(读取), Update(更新), Delete(删除) 2. Create & Insert 语法: insert [info] table_name () values () 2.1. 案例: 创建一个学生表 指定列单行插入, 如果values前省略, 则默认是全属性插入多行指定列插入, 中间分隔符为, 3. 插入替…

CMS32M65xx/67xx系列CoreMark跑分测试

CMS32M65xx/67xx系列CoreMark跑分测试 1、参考资料准备 1.1、STM32官方跑分链接 1.2、官网链接 官方移植文档&#xff0c;如下所示&#xff0c;点击红框处-移植文档: A new whitepaper and video explain how to port CoreMark-Pro to bare-metal 1.3、测试软件git下载链接 …

中国区域30m/15天植被覆盖度数据集(2010-2022)

时间分辨率&#xff1a;日空间分辨率&#xff1b;&#xff1a;10m - 100m共享方&#xff1a;式开放获取数据大小&#xff1a;2.98 TB数据时间范围&#xff1a;2010-01-01 — 2022-12-31元数据更新时间&#xff1a;2024-12-23 数据集摘要 高时空分辨率的植被覆盖度产品存在着广…

力扣HOT100之二分查找:74. 搜索二维矩阵

这道题直接a了&#xff0c;我们可以参考上一道题&#xff1a;35.搜索插入位置的思路&#xff0c;详情见我的上一篇博客。将每一行的第一个元素当作一个数组中的元素&#xff0c;然后对这个数组进行二分查找&#xff0c;如果直接找到了target&#xff0c;则直接返回true&#xf…

编程技能:格式化打印04,sprintf

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;编程技能&#xff1a;格式化打印03&#xff0c;printf 回到目录…

R语言基础| 下载、安装

在此前的单细胞教程中&#xff0c;许多小伙伴都曾因为R语言基础不足而十分苦恼。R语言是一种开源的编程语言和软件环境&#xff0c;专门用于统计分析、图形表示和数据挖掘。它最初由Ross Ihaka和Robert Gentleman在1993年创建&#xff0c;旨在为统计学家和数据分析师提供一个广…

微软的新系统Windows12未来有哪些新特性

在今年即将到来的重大设计升级中,苹果计划对其全线操作系统统一按年份命名,作为另一巨头微软的win12还远吗?win11和win10是微软现在正在用的主流版本,win11系统发布于2021年6月24日,win10系统发布于2015年7月29日。预计win12尝鲜版可能在2025年下半年或明年。 尽管win12还…

在虚拟宇宙中低语——进程间通信,Linux命名管道的前世今生

文章目录 &#x1f30c; 序章&#x1f320; 一、命名管道的宿命与哲学1.1、创建及简单使用1.2、命名管道的工作原理1.3、命名管道与匿名管道的区别 2、命名管道的特点及特殊场景2.1、特点2.2、四种特殊场景 3、命名管道实操3.1、实现文件拷贝3.2、实现进程控制 小结 &#x1f3…

STM32的ADC简介

一、ADC简介 STM32的ADC是一种12位逐次逼近型模拟数字转换器。它具备18个通道&#xff0c;能够测量16个外部信号源以及2个内部信号源。各通道的A/D转换可以执行单次、连续、扫描或间断模式。转换结果可采用左对齐或右对齐的方式&#xff08;12位&#xff09;存储于16位数据寄存…

Bash shell四则运算

文章目录 四则运算1. ‌expr 命令‌2. ‌$(( )) 表达式&#xff08;推荐&#xff09;‌3. ‌$[ ] 表达式&#xff08;已弃用&#xff09;‌4. ‌let 命令‌小数运算i 和 i 区别 四则运算 算术运算&#xff1a; - * / %&#xff08;取模&#xff0c;求余数&#xff09; Bash sh…

(javaSE)Java数组进阶:数组初始化 数组访问 数组中的jvm 空指针异常

数组的基础 什么是数组呢? 数组指的是一种容器,可以用来存储同种数据类型的多个值 数组的初始化 初始化&#xff1a;就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程。 数组初始化的两种方式&#xff1a;静态初始化&#xff0c;动态初始化 数组的静态初始化 初始化…

力扣刷题Day 70:在排序数组中查找元素的第一个和最后一个位置(34)

1.题目描述 2.思路 方法1&#xff08;自己写的&#xff09;&#xff1a;一次二分查找找到等于target的一个元素索引axis&#xff0c;然后向左右延伸找边界。 方法2&#xff08;灵茶山艾府佬的闭区间二分查找写法&#xff09;&#xff1a;定义一个lower_bound()函数找到第一个…

图片压缩工具 | 图片属性详解及读取解析元数据

ℹ️ 图片信息及属性 基本属性 格式类型&#xff1a;JPEG、PNG、GIF、WEBP、BMP、TIFF等文件大小&#xff1a;以KB、MB等为单位的存储空间占用创建/修改日期&#xff1a;文件的元数据时间戳 视觉属性 尺寸/分辨率 宽度&#xff08;像素&#xff09;高度&#xff08;像素&…