当前位置: 首页 > news >正文

中科大计网学习记录笔记(十四):多路复用与解复用 | 无连接传输: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 的报文段包含如下的数据

  1. 源端口号(Source Port):占用2个字节,用于标识发送方的端口号。
  2. 目标端口号(Destination Port):占用2个字节,用于标识接收方的端口号。
  3. 长度(Length):占用2个字节,表示UDP报文段的长度,包括头部和数据部分。
  4. 校验和(Checksum):占用2个字节,用于检测UDP报文段在传输过程中是否发生了错误。
  5. 数据(Data):占用可变长度,包含了传输的实际数据。

❓ 为什么要有 UDP?

  • UDP 不建立连接,前面学到的 TCP 三次握手过程来建立连接毫无疑问会增加延迟
  • 状态较为简单,发送端和接收端没有链接的状态
  • 报文段的头部很小,只包含上面提到的四种内容,相比于 TCP 的十一种提升很大
  • 没有拥塞控制和流量控制,UDP 可以尽可能快的发送报文段
    • 应用传输的速率近似登录主机向网络中的传输速率
3.3.3 UDP 校验和

💡 UDP校验和(Checksum)是为了检测在传输过程中数据报文是否出现差错而设立的一种机制。它通过计算特定的数据序列的二进制反码求和,并确保在网络中传递时数据的完整性。

👉 下面是形成 UDP 校验和的步骤

  1. 构造伪首部:伪首部(Pseudo Header)是TCP和UDP在计算校验和时临时构造的一个数据结构,它并不实际存在于网络传输的数据包中,而是在发送方和接收方计算校验和时分别创建并使用的。
    • 伪首部由以下部分组成,其结构类似于IP头部的一部分:源IP地址、目的IP地、协议字段、UDP长度
  2. 准备数据:将UDP首部(8字节,包含源端口号、目的端口号、长度和校验和字段,但此时校验和字段应置为0)与UDP数据载荷一起考虑进来。
  3. 逐16位相加:将所有16位数据单元(包括伪首部、UDP首部以及数据载荷中的每一对字节)按照网络字节顺序(大端序)进行二进制相加。
  4. 补溢出:如果在累加过程中产生了进位(即结果超过16位),则将高16位与低16位相加,直到没有进位为止。
  5. 取反:最终得到一个无进位的16位数字,对该16位数求取反码,得到的结果就是UDP校验和。
  6. 设置到首部:将计算得出的校验和写入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版本的回显服务器 客户端和服务器 在网络中&#xff0c;主动发起通信的一方是客户端&#xff0c;被动接受的这一方…...

w28DVWA-csrf实例

DVWA-csrf实例 low级别 修改密码&#xff1a;修改的密码通过get请求&#xff0c;暴露在url上。 写一个简单的html文件&#xff0c;里面伪装修改密码的文字&#xff0c;代码如下&#xff1a; <html><body><a href"http://dvwa:7001/vulnerabilities/csr…...

子网络划分与互通,上网行为审计

网络环境需求:在办公网络环境中,由于公司部门的划分,以及服务器、电脑、手机等设备类型,一般都需要划分多个网段,便于进行网络管理,并提升网络通信效率。各个子网段管理员控制设备的接入,子网段之间需要进行局域网通信,发送消息和文件,通常使用飞秋。服务器网段,禁止…...

如何快速删除node_module依赖包

利用npm&#xff1a;输入 npm install rimraf -g rimraf node_modules...

async/await 的用法

一、async和await定义 async 是异步的意思&#xff0c;而 await 是等待的意思&#xff0c;await 用于等待一个异步任务执行完成的结果。 1.async/await 是一种编写异步代码的新方法&#xff08;以前是采用回调和 promise&#xff09;。 2. async/await 是建立在 promise 的基础…...

JAVA面试汇总总结更新中ing

本人面试积累面试题 基础RocketMQSpring登录技能操作线程事务微服务JVMKAFKAMYSQLRedislinux 基础 1.面向对象的三个特征 封装&#xff0c;继承&#xff0c;多态&#xff0c;有时候也会加上抽象。 2.多态的好处 允许不同类对象对同一消息做出响应&#xff0c;即同一消息可以根…...

vue-利用属性(v-if)控制表单(el-form-item)显示/隐藏

表单控制属性 v-if 示例&#xff1a; 通过switch组件作为开关&#xff0c;控制表单的显示与隐藏 <el-form-item label"创建数据集"><el-switch v-model"selectFormVisible"></el-switch></el-form-item><el-form-item label&…...

数据结构-邻接矩阵

介绍 邻接矩阵&#xff0c;是表示图的一种常见方式&#xff0c;具体表现为一个记录了各顶点连接情况的呈正方形的矩阵。 假设一共有以下顶点&#xff0c;其连接关系如图所示 那么&#xff0c;怎么表示它们之间的连接关系呢&#xff1f; 我们发现&#xff0c;各条边所连接的都…...

基于CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 CNN&#xff08;卷积神经网络&#xff09;部分 4.2 GRU&#xff08;门控循环单元&#xff09;部分 4.3 Attention机制部分 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版…...

Docker部署Halo容器并结合内网穿透实现公网访问本地个人博客

文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤&#xff1a;1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 本文主要介绍如何在CentOS 7系统使…...

纯css实现文字左右循环滚动播放效果

思路&#xff1a;由两个span模块组成&#xff0c;第一个为空的span内容&#xff0c;为的是实现第二个span内容缓慢出现的效果。 代码如下&#xff1a; <div class"scrollingStyle"><span class"first-marquee"></span><span class&q…...

【Java EE初阶二十二】https的简单理解

1. 初识https 当前网络上,主要都是 HTTPS 了,很少能见到 HTTP.实际上 HTTPS 也是基于 HTTP.只不过 HTTPS 在 HTTP 的基础之上, 引入了"加密"机制&#xff1b;引入 HTTPS 防止你的数据被黑客篡改 &#xff1b; HTTPS 就是一个重要的保护措施.之所以能够安全, 最关键的…...

系统学习Python——装饰器:类装饰器-[跟踪对象接口:基础知识]

分类目录&#xff1a;《系统学习Python》总目录 文章《系统学习Python——装饰器&#xff1a;类装饰器-[单例类&#xff1a;基础知识]》的单例示例阐明了如何使用类装饰器来管理一个类的所有实例。类装饰器的另一个常用场景是为每个生成的实例扩展接口。类装饰器基本上可以在实…...

go-redis 使用 redis 6.0.14 版本错误: consider implementing encoding.BinaryMarshaler

使用方法 err : bp.data.redis.Get(ctx, policyKey).Scan(&result)起初在 redis 5.x.x 版本并没有遇到错误&#xff0c;但是在切换 redis 实例之后就出现了错误&#xff08;他们之间只是版本不同&#xff09;。 修复方法 看错误日志的描述&#xff0c;大概含义就是需要我们…...

计网 - 域名解析的工作流程

文章目录 Pre引言1. DNS是什么2. 域名结构3. 域名解析的工作流程4. 常见的DNS记录类型5. DNS安全6. 未来的发展趋势 Pre 计网 - DNS 域名解析系统 引言 在我们日常使用互联网时&#xff0c;经常会输入各种域名来访问网站、发送电子邮件或连接其他网络服务。然而&#xff0c;我…...

普中51单片机学习(EEPROM)

EEPROM IIC串行总线的组成及工作原理 I2C总线的数据传送 数据位的有效性规定 I2C总线进行数据传送时&#xff0c;时钟信号为高电平期间&#xff0c;数据线上的数据必须保持稳定&#xff0c;只有在时钟线上的信号为低电平期间&#xff0c;数据线上的高电平或低电平状态才允许…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"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&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;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. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

用鸿蒙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 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...