要理解网络中的多路复用,以及它在 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 协议中端到端通信的核心,直接解决了 "同一主机上多个应用如何共享网络连接" 的问题。
具体逻辑:
- 发送端(复用) :
电脑上同时运行的浏览器、微信、QQ 等应用,都会产生数据需要发送。操作系统的传输层(TCP 或 UDP 模块)会给每个应用分配一个端口号(如 HTTP 默认 80,HTTPS 默认 443,微信用随机动态端口),然后将应用数据封装成 "TCP 段" 或 "UDP 报",并打上对应的端口号标识。最终,所有应用的 TCP/UDP 数据包会共用同一 IP 协议栈和物理链路发送。
- 接收端(分解) :
接收端的传输层收到数据包后,会解析 TCP/UDP 头部中的目标端口号,然后根据端口号将数据交付给对应的应用程序(比如端口 443 的数据交给浏览器,动态端口的数据交给微信)。
总结
- 多路复用的本质:用 "唯一标识" 给数据流 "打标签",实现共享链路的高效利用。
- TCP/IP 中的核心层次 :传输层(通过端口号区分应用)是最典型的多路复用场景,直接支撑了多应用同时联网;网络层(IP 地址区分主机)、数据链路层(MAC 地址区分局域网设备)也会用到复用逻辑,但服务对象更偏向 "设备" 而非 "应用"。