中科大计网学习记录笔记(十四):多路复用与解复用 | 无连接传输:UDP
前言:
学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程
该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信息量过大,有太多无法理解的地方,在我第一次点开的时候也有相同的感受,但经过了一段时间项目的学习,对计网有了更多的了解,所以我准备在这次学习的时候做一些记录并且加入一些我的理解,希望能够帮助到大家。
往期笔记可以看专栏中的内容😊😊😊
文章目录
- 3.2 多路复用与解复用
- 3.2.1 TCP 的多路复用与解复用
- 3.2.2 UDP 的多路复用与解复用
- 3.3 无连接传输:UDP
- 3.3.1 基本概念
- 3.3.2 UDP 报文段格式
- 3.3.3 UDP 校验和
3.2 多路复用与解复用
💡 在了解多路复用之前先要知道端口的概念:
- 在TCP/IP协议中,端口用于 标识应用程序的通信终点,允许 多个应用程序在同一台计算机上同时进行网络通信。
- 端口分为两种类型:TCP端口和UDP端口。
3.2.1 TCP 的多路复用与解复用

👉 在上面 socket 编程了解到:TCP 协议会将 源IP、源端口 和 目标 IP、目标端口封装到 socket 中
- 封装了这些信息的 TCP 报文段(Segment)被作为 SDU 交给下一层,网络层
- 通过对等实体的传输到对方主机的网络层
- 对方主机通过传输过来的四元组信息找到对应的
socket来达到解复用,将信息传输给不同的应用进程。
💡
sock其实就是socket的简称,指的是套接字。
3.2.2 UDP 的多路复用与解复用
💡 UDP 的 socket 与 TCP 不同,其中只封装了本主机的信息,也就是源 IP 和 源端口
- 目标 IP 和目标端口作为调用 API 的参数传入

👉 通过 UDP 的 socket 同样也可以实现多路复用
- 解复用即当信息通过网络层传输到对方的主机,对方主机从网络层中获取到 源 IP 和 源端口 以及 本主机的 IP 和 端口,由此可以找到本主机的进程来实现解复用。
💡 多路复用就是通过本机的不同端口来使得信息分流传输
- 解复用就是通过传输来的信息找到请求的是哪个端口(port)
3.3 无连接传输:UDP
3.3.1 基本概念
💡 UDP:User Datagram Protocol(用户数据数据报协议)
👉 与 TCP 不同的是,UDP 在网络层端到端传输的基础上只是简单的将数据封装成数据报,实现了进程之间的通信而没有像 TCP 那样做拥塞控制、流量控制等的操作。
- 所以 UDP 提供的是一种 “尽力而为” 的服务,报文段可能会丢失或者乱序
- 但是需要注意的是,并不是说 UDP 无法实现可靠的传输,通过 应用层 自身是可以实现可靠传输的。
👉 UDP 被用于:
- 流媒体(对于丢失不敏感而对于速率敏感,应用可控制传输速率)
- DNS
- SNMP
💡 应用可控制传输速率
- 因为没有 TCP 提供的控制服务,UDP 接收到应用传输的数据就直接将其通过 IP 发送出去,所以使用 UDP 应用是可以控制传输速率的,这对流媒体来说非常重要。
3.3.2 UDP 报文段格式
💡 报文段是指在传输层使用该协议时,从发送端到接收端单次传输的数据单元,也就是前面提到的 PDU。
👉 UDP 的报文段包含如下的数据

- 源端口号(Source Port):占用2个字节,用于标识发送方的端口号。
- 目标端口号(Destination Port):占用2个字节,用于标识接收方的端口号。
- 长度(Length):占用2个字节,表示UDP报文段的长度,包括头部和数据部分。
- 校验和(Checksum):占用2个字节,用于检测UDP报文段在传输过程中是否发生了错误。
- 数据(Data):占用可变长度,包含了传输的实际数据。
❓ 为什么要有 UDP?
- UDP 不建立连接,前面学到的 TCP 三次握手过程来建立连接毫无疑问会增加延迟
- 状态较为简单,发送端和接收端没有链接的状态
- 报文段的头部很小,只包含上面提到的四种内容,相比于 TCP 的十一种提升很大
- 没有拥塞控制和流量控制,UDP 可以尽可能快的发送报文段
- 应用传输的速率近似登录主机向网络中的传输速率
3.3.3 UDP 校验和
💡 UDP校验和(Checksum)是为了检测在传输过程中数据报文是否出现差错而设立的一种机制。它通过计算特定的数据序列的二进制反码求和,并确保在网络中传递时数据的完整性。
👉 下面是形成 UDP 校验和的步骤
- 构造伪首部:伪首部(Pseudo Header)是TCP和UDP在计算校验和时临时构造的一个数据结构,它并不实际存在于网络传输的数据包中,而是在发送方和接收方计算校验和时分别创建并使用的。
- 伪首部由以下部分组成,其结构类似于IP头部的一部分:源IP地址、目的IP地、协议字段、UDP长度
- 准备数据:将UDP首部(8字节,包含源端口号、目的端口号、长度和校验和字段,但此时校验和字段应置为0)与UDP数据载荷一起考虑进来。
- 逐16位相加:将所有16位数据单元(包括伪首部、UDP首部以及数据载荷中的每一对字节)按照网络字节顺序(大端序)进行二进制相加。
- 补溢出:如果在累加过程中产生了进位(即结果超过16位),则将高16位与低16位相加,直到没有进位为止。
- 取反:最终得到一个无进位的16位数字,对该16位数求取反码,得到的结果就是UDP校验和。
- 设置到首部:将计算得出的校验和写入UDP首部的校验和字段。
💡 为什么要取反码?
- 接收方接收到的的首部是是取反码构建的,其再通过相同的步骤对上述内容求和再与反码进行相加,得到的就是 16 位的全 1,检验较为简单。
相关文章:
中科大计网学习记录笔记(十四):多路复用与解复用 | 无连接传输:UDP
前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…...
机器学习 | 实现图像加密解密与数字水印处理
目录 实现窗口可视化 数字图像加密 窗口布局设置 基于混沌Logistic的图像加密 基于三重DES的图像加密 数字图像解密 窗口布局设置 基于混沌Logistic的图像解密 基于三重DES的图像解密 基于LSB的数字水印提取 窗口布局设置 水印的嵌入与提取 实现窗口可视化 这里…...
AJAX.
概念:AJAX:异步的 JavaScript 和 XML AJAX作用: 1.与服务器进行数据交换: 通过AJAX可以给服务器发送请求,并获取服务器响应的是数据 使用了AJAX和服务器进行通讯,就可以使用HTML和AJAX来替换JSP页面了 2.异步交互:可以在不重新加载整个页面的…...
Win32 获取EXE/DLL文件版本信息
CFileVersion.h #pragma once#include <windows.h> #include <string> #include <tchar.h>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 版本号辅助类 class CVersionNumber { public:// 无参构造CVersionN…...
回显服务器的制作方法
文章目录 客户端和服务器TCP和UDP的特点UDP socket api的使用DatagramSocketDatagramPacketInetSocketAddress API 做一个简单的回显服务器UDP版本的回显服务器TCP版本的回显服务器 客户端和服务器 在网络中,主动发起通信的一方是客户端,被动接受的这一方…...
w28DVWA-csrf实例
DVWA-csrf实例 low级别 修改密码:修改的密码通过get请求,暴露在url上。 写一个简单的html文件,里面伪装修改密码的文字,代码如下: <html><body><a href"http://dvwa:7001/vulnerabilities/csr…...
子网络划分与互通,上网行为审计
网络环境需求:在办公网络环境中,由于公司部门的划分,以及服务器、电脑、手机等设备类型,一般都需要划分多个网段,便于进行网络管理,并提升网络通信效率。各个子网段管理员控制设备的接入,子网段之间需要进行局域网通信,发送消息和文件,通常使用飞秋。服务器网段,禁止…...
如何快速删除node_module依赖包
利用npm:输入 npm install rimraf -g rimraf node_modules...
async/await 的用法
一、async和await定义 async 是异步的意思,而 await 是等待的意思,await 用于等待一个异步任务执行完成的结果。 1.async/await 是一种编写异步代码的新方法(以前是采用回调和 promise)。 2. async/await 是建立在 promise 的基础…...
JAVA面试汇总总结更新中ing
本人面试积累面试题 基础RocketMQSpring登录技能操作线程事务微服务JVMKAFKAMYSQLRedislinux 基础 1.面向对象的三个特征 封装,继承,多态,有时候也会加上抽象。 2.多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根…...
vue-利用属性(v-if)控制表单(el-form-item)显示/隐藏
表单控制属性 v-if 示例: 通过switch组件作为开关,控制表单的显示与隐藏 <el-form-item label"创建数据集"><el-switch v-model"selectFormVisible"></el-switch></el-form-item><el-form-item label&…...
数据结构-邻接矩阵
介绍 邻接矩阵,是表示图的一种常见方式,具体表现为一个记录了各顶点连接情况的呈正方形的矩阵。 假设一共有以下顶点,其连接关系如图所示 那么,怎么表示它们之间的连接关系呢? 我们发现,各条边所连接的都…...
基于CNN-GRU-Attention的时间序列回归预测matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 CNN(卷积神经网络)部分 4.2 GRU(门控循环单元)部分 4.3 Attention机制部分 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版…...
Docker部署Halo容器并结合内网穿透实现公网访问本地个人博客
文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤:1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 本文主要介绍如何在CentOS 7系统使…...
纯css实现文字左右循环滚动播放效果
思路:由两个span模块组成,第一个为空的span内容,为的是实现第二个span内容缓慢出现的效果。 代码如下: <div class"scrollingStyle"><span class"first-marquee"></span><span class&q…...
【Java EE初阶二十二】https的简单理解
1. 初识https 当前网络上,主要都是 HTTPS 了,很少能见到 HTTP.实际上 HTTPS 也是基于 HTTP.只不过 HTTPS 在 HTTP 的基础之上, 引入了"加密"机制;引入 HTTPS 防止你的数据被黑客篡改 ; HTTPS 就是一个重要的保护措施.之所以能够安全, 最关键的…...
系统学习Python——装饰器:类装饰器-[跟踪对象接口:基础知识]
分类目录:《系统学习Python》总目录 文章《系统学习Python——装饰器:类装饰器-[单例类:基础知识]》的单例示例阐明了如何使用类装饰器来管理一个类的所有实例。类装饰器的另一个常用场景是为每个生成的实例扩展接口。类装饰器基本上可以在实…...
go-redis 使用 redis 6.0.14 版本错误: consider implementing encoding.BinaryMarshaler
使用方法 err : bp.data.redis.Get(ctx, policyKey).Scan(&result)起初在 redis 5.x.x 版本并没有遇到错误,但是在切换 redis 实例之后就出现了错误(他们之间只是版本不同)。 修复方法 看错误日志的描述,大概含义就是需要我们…...
计网 - 域名解析的工作流程
文章目录 Pre引言1. DNS是什么2. 域名结构3. 域名解析的工作流程4. 常见的DNS记录类型5. DNS安全6. 未来的发展趋势 Pre 计网 - DNS 域名解析系统 引言 在我们日常使用互联网时,经常会输入各种域名来访问网站、发送电子邮件或连接其他网络服务。然而,我…...
普中51单片机学习(EEPROM)
EEPROM IIC串行总线的组成及工作原理 I2C总线的数据传送 数据位的有效性规定 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...

