【网络】——UDP复习笔记

2023-11-17

目录

1.UDP报文结构

2.UDP缓冲区

3.UDP特点

4.课后题


1.UDP报文结构

 

 

2.UDP缓冲区

  • UDP没有真正意义上的发送缓冲区,应用层调用sendto()函数直接将数据应用层的数据拷贝给传输层,传输层再构建UDP报头,然后再交付给网络层执行发送数据的动作。
  • UDP具有接收缓冲区,但是这个缓冲区不能保证收到的UDP数据与发送的UDP数据顺序是一致的,例如:如果发送端发送“123”给接收端,接收端收到的数据可能是"132",并且如果这个缓冲区满了以后,再到达的数据就丢弃掉。

3.UDP特点

  • 1.无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接。UDP中的发件人会在没有提前联系对方的情况下,单方面地发送数据。这种通信叫做无连接
  • 2.不可靠:没有确认机制和重传机制,主机A给主机B发送的数据因为在网络中丢包了,主机A和主机B是都不知道的,而且UDP不能收到的数据与发送的数据是一致的。

  • 3.面向数据报:不能灵活的控制读写数据的次数和数量。应用层交给UDP多长的数据,UDP原样发送,既不会拆分,也不会合并。例如:
如果发送端调用一次 sendto, 发送 100 个字节 , 那么接收端也必须调用对应的一次 recvfrom, 接收 100 个 字节; 而不能循环调用 10 recvfrom, 每次接收 10 个字节 ;
  •  4.UDP是全双工通信,它既能读也能写
  •  5.UDP可以给多个接收端发送数据。

4.课后题

问题一:UDP怎样将报头和和有效载荷分离?

UDP的报头固定是8个字节,UDP报文的前8个字是UDP报头,剩下的字节是就有效载荷,如果一个UDP报文是20个字节,那么它的有效载荷是12个字节。

问题二:UDP怎样把数据传递到应用层的协议呢?

通过报头中的目的端口号就可以直接将数据交给上层应用。

问题三: UDP协议属于内核协议栈(c语言),用c语言如何表示报头?

 

问题四:UDP不保证可靠性?为什么会有UDP协议的存在?
UDP不保证可靠性,是一个中性词。TCP保证可靠性,那么它就会做更多的工作,付出的时间成本和空间成本就越高,效率不高。TCP协议和UDP协议是互补的,不存在TCP协议比UDP协议好,只是TCP和UDP的应用场景不一样的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【网络】——UDP复习笔记 的相关文章

  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 适合Python入门的5本基础书籍

    Python 3标准库 对程序员而言 标准库与语言本身同样重要 它好比一个百宝箱 能为各种常见的任务提供完美的解决方案 所以本书是所有Python程序员都必备的工具书 全书以案例驱动的方式讲解了标准库中数百个模块的使用方法 如何工作 和工作
  • Java Web 远程调试

    Java Web 远程 调试 Tomcat 下载压缩版服务器 环境 Tomcat Eclipse 做远程调试我们并不需要其他特殊插件 1 配置Tomcat bin startup bat 在前面增加代码 SET CATALINA OPTS
  • linux三剑客awk命令详解之函数

    awk函数 在awk命令中 可以自定义函数 awk也有内置的函数 本篇文章主要介绍awk中的内置函数 awk内置函数分类 在awk中 内置函数主要分为算数函数 字符串函数 时间函数 其他函数等 以下列出一些常用的内置函数 算数函数 常用的主
  • html无法导入,如何修复“ImportError:无法导入名称'HTMLParseError'”?

    我正在尝试导入BeautifulGroup 但运行脚本时遇到错误 Traceback most recent call last File LinkCrawler py line 5 in from bs4 import Beautiful
  • CH9-网络编程

    案例9 2 模拟微信聊天 案例介绍 1 案例描述 在如今 微信聊天已经人们生活中必不可少的重要组成部分 人们的交流很多都是通过微信来进行的 本案例要求 将多线程与UDP通信相关知识结合 模拟实现微信聊天小程序 通过监听指定的端口号 目标IP
  • matlab模糊控制工具箱使用和模糊控制pid实例参考

    Matlab模糊控制工具箱为模糊控制器的设计提供了一种非常便捷的途径 通过它我们不需要进行复杂的模糊化 模糊推理及反模糊化运算 只需要设定相应参数 就可以很快得到我们所需要的控制器 而且修改也非常方便 下面将根据模糊控制器设计步骤 一步步利
  • 4-2 背包问题(贪心)

    4 2 背包问题 贪心 与0 1背包问题类似 所不同的只是在选择物品i装入背包时 可以选择物品的一部分而不一定要全部 1 i n 用贪心算法解背包问题的基本步骤是 首先计算每种物品单位重量的价值vi wi 然后 依贪心选择策略 将尽可能多的
  • html css 粗略浏览笔记

    1 HTML 不是一种编程语言 而是一种标记语言 元素是 HTML 页面的根元素 HTML 链接是通过标签 来定义的 HTML 图像是通过标签 来定义的 换行 br HTML 元素可以设置属性 属性总是以名称 值对的形式出现 比如 name
  • idea+sbt

    1 idea新建sbt scala项目 https blog csdn net aliceyangxi1987 article details 76423334 2 自己下载sbt集成到idea项目里 https www cnblogs c
  • LeetCode-1325. Delete Leaves With a Given Value

    Given a binary tree root and an integer target delete all the leaf nodes with value target Note that once you delete a l
  • Linux安装oracle 19C

    一 下载软件 我这边下的是ZIP Linux x86 64 二 安装依赖 yum install compat libcapl elfutils libelf devel fontconfig devel gliba devel kshli
  • Windows 10使用WSL部署Chatgpt_academic

    目录 一 在windows10中安装Ubuntu系统 二 在Ubuntu系统中安装anaconda3和GPT Academic 本文主要介绍windows10使用WSL安装Ubuntu系统 然后通过安装anaconda3来部署chatgpt
  • Unity——虚拟轴

    1 虚拟轴的概念 简单来说 虚拟轴就是一个数值在之间的数轴 其中最重要的数值为 1 0 1 2 虚拟轴的模拟 以按键模拟为例 用按键模拟虚拟轴需要2个按键 一个为负轴按键 按键1 一个为正轴按键 按键2 在没有按下任何按键的时候 虚拟轴的数
  • NRF52832学习笔记(1)—— 添加自有service(基于SDK15.3)

    前言 SDK版本15 3 评估板 pca10040 在uart的例程中添加battery service 添加之前 手机连上设备之后扫描到的service如下 一 分配ram空间 softdevice的flash code是确定 但ram是
  • WIKIOI – 1083 Cantor表

    题目描述 Description 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的 他是用下面这一张表来证明这一命题的 1 1 1 2 1 3 1 4 1 5 2 1 2 2 2 3 2 4 3 1 3 2 3 3 4
  • 2021上半年

    转眼间 2021年已经过去了一半 按照记账惯例 每逢月底 要对当月的财务状况进行结算 6月的话 还要再额外增加一轮年中结算 同时 受到近期一系列调整的影响 记录表也相应进行比较大的变更 以适应复杂度的增加 以至于 例行结算迟了两天才完成 但
  • 【matplotlib】AttributeError: Unknown property figsize

    AttributeError Unknown property figsize 属性错误 未知属性figsize 原代码 var YearBuilt data pd concat df train SalePrice df train va
  • Kafka【命令行操作】

    Kafka 命令行操作 Kafka 主要包括三大部分 生产者 主题分区节点 消费者 1 Topic 命令行操作 也就是我们 kafka 下的脚本 kafka topics sh 的相关操作 常用命令行操作 参数 描述 bootstrap s
  • Java中的IO流系统详解

    摘要 Java 流在处理上分为字符流和字节流 字符流处理的单元为 2 个字节的 Unicode 字符 分别操作字符 字符数组或字符串 而字节流处理单元为 1 个字节 操作字节和字节数组 Java 内用 Unicode 编码存储字符 字符流处
  • 【网络】——UDP复习笔记

    目录 1 UDP报文结构 2 UDP缓冲区 3 UDP特点 4 课后题 1 UDP报文结构 2 UDP缓冲区 UDP没有真正意义上的发送缓冲区 应用层调用sendto 函数直接将数据应用层的数据拷贝给传输层 传输层再构建UDP报头 然后再交