中科大计网学习记录笔记(十四):多路复用与解复用 | 无连接传输: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,检验较为简单。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/693385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人形机器人专题:传感器,人形机器人实现“具身感知”的关键

今天分享的是人形机器人系列深度研究报告:《人形机器人专题:传感器,人形机器人实现“具身感知”的关键》。 (报告出品方:浙商证券股份有限公司) 报告共计:44页 来源:人工智能学派…

大模型量化方法总结

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

TCP/IP 三次握手四次挥手详解,以及异常状态分析

目录 1.TCP/IP 三次握手TCP/IP 三次握手过程为什么是三次握手?半连接队列和全连接队列ISN(initial sequence number)是否是固定的吗?三次握手过程能携带数据?SYN 攻击 TCP/IP 四次挥手TCP/IP 四次挥手过程为什么是 2MSL 时间才进入到 close 状…

Redis篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、Redis 集群如何选择数据库?二、怎么测试 Redis 的连通性?三、怎么理解 Redis 事务?四、Redis 事务相关的命令有哪几个?五、Redis key 的过期时间和永久有效分别怎么设置?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易…

备考2025年AMC8数学竞赛:2000-2024年AMC8真题练一练

对于想了解或者加AMC8美国数学竞赛的孩子来说,熟悉AMC8的历年考试真题,既可以了解考试的内容、形式、难度,还可以看看自己的掌握程度,发现自己的短板查漏补缺,毕竟,这个比赛考察的知识点相对固定&#xff0…

14. rk3588自带的RKNNLite检测yolo模型(python)

首先将文件夹~/rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/下的文件librknnrt.so复制到文件夹/usr/lib/下(该文件夹下原有的文件librknnrt.so是用来测试resnet50模型的,所以要替换成yolo模型的librknnrt.so),如下图所示&am…

【Python爬虫】requests库get和post方法使用

requests库是一个常用于http请求的模块,性质是和urllib,urllib2是一样的,作用就是向指定目标网站的后台服务器发起请求,并接收服务器返回的响应内容。 1. 安装requests库 使用pip install requests安装 如果再使用pip安装python…

数据结构——时间复杂度

前言: 当谈到数据结构和算法时,时间复杂度是一个至关重要的概念。时间复杂度是衡量算法执行时间随输入规模增长而变化的度量,它指示了算法的效率和性能。在本篇博客中,我们将深入探讨时间复杂度的相关知识,并结合C语言…

kali linux出现添加源无法更新的问题:更新时显示签名无效和没有数字签名

kali linux更新源时显示签名无效和没有数字签名 一、出现显示签名无效和没有数字签名二、 解决办法三、几种开源镜像站 一、出现显示签名无效和没有数字签名 原因:因为没有下载签名,所以显示签名无效和没有数字签名 二、 解决办法 wget archive.kali.o…

OpenCV边缘检测与视频读写

原理 OpenCV中的边缘检测原理主要基于图像梯度的计算,包括一阶梯度和二阶梯度。 一阶梯度:它反映了图像亮度变化的速度。Sobel算法就是一种以一阶梯度为基础的边缘检测算法。它通过计算图像在水平和垂直方向上的梯度来检测边缘。这种方法简单有效&…

mysql connect unblock with mysqladmin flush-hosts

原因 同一个ip在短时间内产生太多(超过max_connect_errors的最大值)中断的数据库连接而导致的阻塞。 查看 max_connect_errors show variables like max_connect_errors; 解决 前提:需要换一个IP地址连接 方法一 增大 max_connect_err…

命令行窗口文本复制到 Word 格式保持不变

命令行窗口文本复制到 Word 格式保持不变 References 标题栏右键 -> 编辑 -> 标记 / 全选 标题栏右键 -> 编辑 -> 复制 粘贴到 Notepad 中,语言栏设置对应语言,格式可以保持不变 复制文本粘贴到 Excel 中 选中 Excel 中文本复制&#xf…

基于qt的图书管理系统----01数据库设计

参考b站:视频连接 目录 1、数据库设计2、数据库增删改查2.1 book表操作2.2 user表操作2.3 record表的操作(重点) 3、数据表导出 1、数据库设计 使用sqlite3,新建一个book的表,并且都让主键自增 NmaeValuebookid书本…

编程笔记 Golang基础 010 常量和变量

编程笔记 Golang基础 010 常量和变量 一、常量二、变量小结 在 Go 语言中,常量(Constant)是一个固定的值,在程序运行期间不可被修改。它们通常用来表示那些在整个程序执行过程中不会变化的数值或其他类型的数据。在 Go 语言中&…

GIN框架介绍以及使用

Gin是一个用Go语言编写的web框架。它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍。 如果你是性能和高效的追求者, 你会爱上Gin,而且现在大多数企业都在使用Gin框架,反正学一学总没有错。 1、 GIn框…

赞:java使用easy-excel导入数据的通用模板思路

我们在项目中都会有导入导出的功能&#xff0c;这篇文章主要是讲导出的&#xff0c;导入我会在另外一篇博客文章中讲解。 现在我们开始。 首先&#xff1a;需要在项目中的pom.xml中导入easy-excel的依赖 <!--使用esay-excel进行导入导出 --> <dependency> &…

实习日志26 捷通打印机交接

概要 捷通打印机的研究和使用需要下载一些软件 打印机驱动下载说明 驱动&#xff1a;选择DL-721Z 端口选择&#xff1a;USB002 智能助手&#xff1a;&#xff08;连接&#xff0c;设置打印机&#xff09; 打印机显示 rfid未校准 时可以在这里点RFID标签校验 LabelEditor编译…

unity学习(31)——跳转到角色选择界面(打勾?手滑挂错脚本)

There are 2 audio listeners in the scene. Please ensure there is always exactly one audio listener in the scene. 是因为后来创建了一个camera&#xff0c;因为camera中自带一个组件Audio Listener。所以有两个camera就有两个audio listener导致报错。 一个简单的解决…

超声波清洗机大测评!希亦、洁盟、德国ODI、苏泊尔哪款性价比高?

眼镜逐渐已经成为现在大部分都离不开的一个视线辅助&#xff0c;但是很多朋友对于眼镜的清洗从开始佩戴眼镜时&#xff0c;就没有重视起来。其实清洗眼镜的方法有很多种&#xff0c;手动清洗跟超声波清洗机&#xff0c;后者的清洗相对来说会更加方便快捷一点&#xff0c;且清洗…

Unity【角色/摄像机移动控制】【1.角色移动】

本文主要总结实现角色移动的解决方案。 1. 创建脚本&#xff1a;PlayerController 2. 创建游戏角色Player&#xff0c;在Player下挂载PlayerController脚本 3. 把Camera挂载到Player的子物体中&#xff0c;调整视角&#xff0c;以实现相机跟随效果 3. PlayerController脚本代码…