UDP-复用分用

核心思想:多路复用与多路分用

想象一下,一栋大楼(主机 )里有很多个房间(应用程序/进程 ),每个房间都有一个唯一的门牌号(端口号 )。邮递员(传输层 )负责接收和发送信件(数据报)。

  • 复用:大楼里不同房间的人要把信寄出去,他们都把信交给同一个邮递员。邮递员收集所有信件,统一从大楼的出口寄出。

  • 分用 :邮递员从外面收到一大堆信件,他查看每个信封上写的目标房间号,然后准确地将信件投递到对应的房间里。

这就是复用和分用的直观比喻。


1. UDP 分用

定义 :当主机接收到一个UDP数据报时,传输层(这里是UDP)根据数据报头部的目的端口号,将数据正确地交付给指定套接字(Socket),进而传递给对应应用程序的过程。

过程详解

  1. 主机从网络层接收到一个IP数据报,其载荷是一个UDP数据报。

  2. 操作系统(传输层)会解析UDP数据报的头部,提取出目的端口号字段。

  3. 系统会检查当前是否有应用程序创建了套接字并绑定(Bind)到了这个目的端口号。

  4. 如果找到 :系统将UDP数据报的应用数据部分(即报文载荷)放入该套接字的接收缓冲区,等待应用程序来读取。

  5. 如果没找到:系统通常会丢弃这个数据报,并可能(取决于系统配置)向发送方回复一个"端口不可达"的ICMP错误消息。

关键点

  • 分用的依据是目的端口号

  • UDP套接字是由一个二元组全面标识的:(目的IP地址,目的端口号)。这意味着,对于UDP来说,只要目的IP和目的端口相同,无论数据来自哪个源IP或源端口,都会被交付到同一个套接字。这与TCP的四元组标识不同。

分用示例

假设你的主机(IP: 192.168.1.100)正在运行:

  • 一个DNS客户端(使用端口号 53

  • 一个视频播放器(正在从网络接收视频流)

当一个UDP数据报到达你的主机,其头部信息为:

  • 目的端口:5353

    系统检查后发现端口 5353 被DNS客户端进程绑定,于是将数据交给DNS客户端处理。

当另一个UDP数据报到达,其头部信息为:

  • 目的端口:60000

    系统检查后发现端口 60000 被视频播放器进程绑定,于是将数据交给视频播放器。

这个过程就是分用------将来自网络的数据流正确地分发给不同的应用程序。


2. UDP 复用

定义:当主机上的多个应用程序需要发送UDP数据时,它们都将数据交给传输层(UDP)。UDP为每个数据包封装上头部信息(主要是源端口号和目的端口号),然后交给网络层,由同一个IP协议发送出去的过程。

过程详解

  1. 应用程序(如浏览器、游戏客户端)通过系统调用(如 sendto)将数据和目标地址(IP和端口)传递给UDP。

  2. UDP会为每个数据块创建一个UDP数据报。

    • 在数据报头部填入应用程序指定的目的端口号

    • 填入数据来源的源端口号(这个端口号通常是应用程序绑定的端口,如果没绑定,则由系统自动分配一个)。

    • 计算校验和等其他字段。

  3. 将这个封装好的UDP数据报交给网络层(IP层)。

  4. IP层会进一步封装成IP数据报,并通过底层的网络接口发送出去。

关键点

  • 复用的体现是多个应用进程使用同一个传输层协议(UDP)和同一个IP协议发送数据

  • 源端口号非常重要,它告诉接收方"谁发送的",以便接收方能够回复消息。

复用示例

你的主机(IP: 192.168.1.100)上同时运行着:

  • 一个浏览器(系统为其分配了源端口 54321),正在向DNS服务器(IP: 8.8.8.8, 端口 53)发送查询。

  • 一个在线游戏(绑定了源端口 7777),正在向游戏服务器(IP: 1.2.3.4, 端口 8888)发送位置数据。

浏览器进程和游戏进程都会调用UDP。UDP会为它们分别创建数据报:

  • 数据报A(来自浏览器)

    • 源端口:54321

    • 目的端口:53

    • 数据:DNS查询内容

  • 数据报B(来自游戏)

    • 源端口:7777

    • 目的端口:8888

    • 数据:游戏位置数据

然后,这两个数据报都被交给IP层。IP层不管它们来自哪个应用,只是将它们都从同一个网络接口(比如你的网卡)发送到互联网上。

这个过程就是复用------多个应用程序的数据流共享底层的传输层和网络层服务。


总结与对比TCP

特性 UDP TCP
分用依据 目的端口号 四元组:(源IP,源端口,目的IP,目的端口)
套接字标识 二元组:(目的IP,目的端口) 四元组:(源IP,源端口,目的IP,目的端口)
核心特点 无连接。来自不同客户的数据,只要目的IP和端口相同,就进入同一个套接字。 面向连接。每个TCP连接都由一个独立的套接字处理,即使目的IP和端口相同,来自不同源的数据也会进入不同的套接字。

一个形象的比喻来区分UDP和TCP的分用

  • UDP像一个公共信箱:所有人都把寄给"A公司"(目的IP和端口)的信扔进同一个大信箱里。A公司的人从信箱里取信时,只看信是寄给"A公司"的,不关心是谁寄的。

  • TCP像公司的前台接待:每个来访者(客户端连接)都会被分配一个专门的接待员(套接字)。前台(TCP)会严格区分张三的接待员和李四的接待员,即使他们都是来找"A公司"的

相关推荐
此生只爱蛋2 小时前
【Linux】自定义协议+序列和反序列化
linux·服务器·网络
huangyuchi.2 小时前
【Linux网络】Socket编程实战,基于UDP协议的Dict Server
linux·网络·c++·udp·c·socket
jenchoi4133 小时前
【2025-11-05】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·安全·web安全·网络安全
爱编程的鱼6 小时前
403 是什么意思?一文读懂 HTTP 状态码 403 及解决方法
网络·网络协议·http
Unstoppable226 小时前
八股训练营第 8 天 | TCP连接三次握手的过程?TCP连接四次挥手的过程?HTTP的Keep-Alive是什么?
网络·tcp/ip·http·八股
_dindong6 小时前
Linux网络编程:应用层协议HTTP
网络·网络协议·http
Jerry2505097 小时前
什么是HTTPS?对网站有什么用?
网络·网络协议·http·网络安全·https·ssl
0和1的舞者7 小时前
网络的奥秘:HTTPS详解(八)
网络·网络协议·tcp/ip·http·https·四大件
ue星空9 小时前
UE核心架构概念
网络·c++·ue5