tcp/ip 中的多路复用

要理解网络中的多路复用,以及它在 TCP/IP 协议栈中的位置,我们可以从概念定义、核心逻辑,再到分层应用逐步拆解。

当然,应用层 L7 http 层也是有的:比如多个 DNS 可以复用同一个端口

一、什么是 "多路复用"(Multiplexing)?

多路复用 是指:在一条共享的传输介质 (如网线、光纤、无线信道)上,同时传输多个独立的数据流 (或信号)的技术。其核心目的是提高传输资源的利用率------ 避免一条物理链路仅为一个应用 / 设备服务,从而降低成本、提升效率。

与多路复用对应的是多路分解(Demultiplexing):接收端根据数据流的 "唯一标识",将混合传输的数据流拆分并交付给对应的应用 / 设备。两者是同一过程的 "发送端 - 接收端" 对应操作,通常合称为 "复用 / 分解"。

二、核心逻辑:用 "唯一标识" 区分数据流

多路复用的关键是给每个数据流分配一个唯一标识(类似 "快递单号")。发送端给每个数据包打上标识,接收端通过标识 "分拣",确保数据不会 "送错门"。

三、TCP/IP 协议栈中,多路复用在哪些层次使用?

TCP/IP 协议栈自上而下分为应用层、传输层、网络层、数据链路层、物理层 。多路复用并非某一层的专属技术,而是贯穿多个层次的核心逻辑 ------ 只是不同层次的 "唯一标识" 和服务对象不同。其中,传输层的多路复用最具代表性,直接服务于端到端的应用程序。

下表清晰梳理了各层的多路复用逻辑:

协议层 复用的 "唯一标识" 服务对象(区分什么) 典型场景举例
传输层 TCP/UDP 端口号(Port) 同一主机上的不同应用程序 浏览器(80/443 端口)、微信(随机端口)、FTP(21 端口)的数据流共用同一 IP 链路
网络层 IP 地址(IPv4/IPv6) 不同的主机 / 网络设备 电脑(192.168.1.100)和手机(192.168.1.101)的数据包共用同一家庭路由器链路
数据链路层 MAC 地址(物理地址) 同一局域网内的不同设备 办公室内的电脑、打印机、交换机的帧(Frame)共用同一网线传输
物理层 频率 / 时间 / 波长(如 FDM/TDM) 不同的电信号 / 光信号 有线电视网用不同频率传输多个频道,光纤用不同波长传输多路光信号

四、重点:传输层的多路复用(最关键、最典型)

传输层的多路复用是 TCP/IP 协议中端到端通信的核心,直接解决了 "同一主机上多个应用如何共享网络连接" 的问题。

具体逻辑:

  1. 发送端(复用)

电脑上同时运行的浏览器、微信、QQ 等应用,都会产生数据需要发送。操作系统的传输层(TCP 或 UDP 模块)会给每个应用分配一个端口号(如 HTTP 默认 80,HTTPS 默认 443,微信用随机动态端口),然后将应用数据封装成 "TCP 段" 或 "UDP 报",并打上对应的端口号标识。最终,所有应用的 TCP/UDP 数据包会共用同一 IP 协议栈和物理链路发送。

  1. 接收端(分解)

接收端的传输层收到数据包后,会解析 TCP/UDP 头部中的目标端口号,然后根据端口号将数据交付给对应的应用程序(比如端口 443 的数据交给浏览器,动态端口的数据交给微信)。

总结

  • 多路复用的本质:用 "唯一标识" 给数据流 "打标签",实现共享链路的高效利用。
  • TCP/IP 中的核心层次传输层(通过端口号区分应用)是最典型的多路复用场景,直接支撑了多应用同时联网;网络层(IP 地址区分主机)、数据链路层(MAC 地址区分局域网设备)也会用到复用逻辑,但服务对象更偏向 "设备" 而非 "应用"。
相关推荐
你的人类朋友4 小时前
【Node】认识一下Node.js 中的 VM 模块
前端·后端·node.js
weixin_419658315 小时前
Spring 的统一功能
java·后端·spring
小许学java6 小时前
Spring AI-流式编程
java·后端·spring·sse·spring ai
canonical_entropy6 小时前
对《DDD本质论》一文的解读
后端·架构·领域驱动设计
码事漫谈6 小时前
我用亲身经历告诉你,为什么程序员千万别不把英语当回事
后端
码事漫谈6 小时前
C++ const 用法全面总结与深度解析
后端
间彧6 小时前
分布式单例模式在微服务架构中的实际应用案例
后端
间彧7 小时前
分布式系统中保证单例唯一性的Java解决方案
后端
间彧7 小时前
为什么避免在单例中保存上下文状态
后端
间彧7 小时前
单例模式防御反射与序列化攻击的意义与实践
后端