UDP协议全面实验分析详解

2023-11-05

Thank For LYJ&...

目录

☀️| 一、实验目的

☀️| 二、实验环境

☀️| 三、实验原理

☀️| 四、实验内容

⭐️练习1——编辑并发送UDP数据报

⭐️练习2——UDP单播通信

⭐️练习3——UDP广播通信

☀️| 五、实验结果

❥练习1:

❥练习2:

❥练习3:

 ☀️| 六、思考题

1. UDP协议的“校验和”要包含伪首部?

2. 观察UDP报文,说明其首部包含哪些字段?


☀️| 一、实验目的

  1. 掌握UDP协议的报文格式
  2. 掌握UDP协议校验和的计算方法
  3. 理解UDP协议的优缺点

☀️| 二、实验环境

  1. 吉林中软计算机网络教学平台
  2. 每6台计算机为一个实验组。
  3. 使用网络拓扑一,如图6-1所示。

图6-1 网络拓扑一


☀️| 三、实验原理

UDP(用户数据报协议),主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似的协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。

UDP协议直接位于IP协议的上层。根据OSI参考模型,UDP和TCP都属于传输层协议。UDP协议不提供端到端的确认和重传功能,它不保证数据包一定能到达目的地,因此是不可靠协议。

UDP协议有以下特点:

     ●  UDP是面向事务的协议,它用最少的传输量为应用程序向其它程序发送报文提供了一个途径。

     ●  UDP是无连接的、不可靠的传输机制。在发送数据报前,UDP在发送和接收两者之间不建立连接。

     ●  UDP让应用程序能直接访问网络层的数据报服务,例如分段和重组等网络层所提供的数据报服务。

     ●  UDP使用IP协议作为数据传输机制的底层协议。

     ●  UDP报头和数据都以与最初传输时相同的形式被传送到最终目的地。

     ●  UDP不提供确认,也不对数据的到达顺序加以控制。因此UDP报文可能会丢失。

     ●  不实现数据包的传送和重复检测。

     ●  当数据包在传送过程中发生错误时,UDP不能报告错误。

     ●  吞吐量不受拥塞控制算法的调节,只受应用程序生成数据的速率、传输带宽、发送端和接收端主机性能的限制。

图6-2下图显示了UDP报文格式。每个UDP报文称为一个用户数据报(User Datagram),用户数据报分为两个部分:UDP首部和UDP数据。首部被分为四个16位的字段,分别代表源端口号﹑目的端口号﹑报文的长度以及UDP校验和。

图6-2  UDP报文格式

     ●  源端口:该字段表示发送端的端口号。如果源端口没有使用,那么此字段的值就被指定为0。这是一个可选的字段。不同的应用程序使用不同的端口号,UDP协议使用端口号为不同的应用程序保留其各自的数据传输通道,从而实现了同一时间段内多个应用程序可以一起使用网络进行数据的发送和接收。

     ●  目的端口:该字段表示数据包被发往的目的端的端口号。

     ●  有效负载长度:该字段表示包括UDP首部和UDP数据在内的整个用户数据报的长度。该字段的最小值是8。数据报的最大尺寸随操作系统的不同而不同。在两字节字段中,理论上数据报最多可达65535字节。然而,一些UDP实现将数据报的大小限制到了8192字节。

     ●  校验和:UDP的校验的校验范围包括伪首部(IP首部一部分字段)、UDP首部和UDP数据,该字段是可选的。如果该字段值为零就说明不进行校验。

当进程有报文要通过UDP发送时,它就把这个报文连同一对套接字地址以及数据的长度传递给UDP。UDP收到数据后就加上UDP首部。然后UDP就把这用户数据报连同套接字地址一起传递给IP。IP加上自己的首部,在高层协议类型字段使用值17,指出该数据是从UDP协议来的。这个IP数据报再传递给数据链路层。数据链路层接收到IP数据报后,加上自己的首部(可能还有尾部),再传给物理层。物理层把这些位编码为电信号或光信号,把它发送到远程的主机。如图6-3所示:

图6-3  UDP封装


☀️| 四、实验内容

⭐️练习1——编辑并发送UDP数据报

  1. 各主机打开协议分析器,进入相应的网络结构并验证网络拓扑的正确性,如果通过拓扑验证,关闭协议分析器继续进行实验,如果没有通过拓扑验。
  2. 本练习将主机A和B作为一组,主机C和D作为一组,主机E和F作为一组。现仅以主机A、B所在组为例,其它组的操作参考主机A、B所在组的操作。
  3. 主机A打开协议编辑器,编辑发送给主机B的UDP数据报。
        MAC层:
             目的MAC地址:接收方MAC地址
             源MAC地址:发送方MAC地址
             协议类型或数据长度:0800,即IP协议
        IP层:
             总长度:包括IP层、UDP层和数据长度
             高层协议类型:17,即UDP协议
             首部校验和:其它所有字段填充完毕后填充此字段
             源IP地址:发送方IP地址
             目的IP地址:接收方IP地址
        UDP层:
             源端口:1030
             目的端口:大于1024的端口号
             有效负载长度:UDP层及其上层协议长度
         其它字段默认,计算校验和。
         ●  UDP在计算校验和时包括哪些内容?
  4. 在主机B上启动协议分析器捕获数据,并设置过滤条件(提取UDP协议)。
  5. 主机A发送已编辑好的数据报。
  6. 主机B停止捕获数据,在捕获到的数据中查找主机A所发送的数据报。

⭐️练习2——UDP单播通信

  1. 本练习将主机A、B、C、D、E、F作为一组进行实验。
  2. 主机B、C、D、E、F上启动“实验平台工具栏中的UDP工具”,作为服务器端,监听端口设置为2483,“创建”成功。
  3. 主机C、E上启动协议分析器开始捕获数据,并设置过滤条件(提取UDP协议)。
  4. 主机A上启动“实验平台工具栏中的UDP工具”,作为客户端,以主机C的IP为目的IP地址,以2483为端口,填写数据并发送。
  5. 察看主机B、C、D、E、F上的“UDP工具”接收的信息。
         ●  哪台主机上的“UDP工具”能够接收到主机A发送的UDP报文?
  6. 察看主机C协议分析器上的UDP报文,并回答以下问题:
         ●  UDP是基于连接的协议吗?阐述此特性的优缺点。
         ●  UDP报文交互中含有确认报文吗?阐述此特性的优缺点。
  7. 主机A上使用协议编辑器向主机E发送UDP报文,其中:
         目的MAC地址:E的MAC地址
         目的IP地址:主机E的IP地址
         目的端口:2483
         校验和:0
         发送此报文,并回答以下问题:
         ●  主机E上的UDP通信程序是否接收到此数据包?UDP是否可以使用0作为校验和进行通信?
  8. 主机B、C、D、E、F关闭服务端,主机A关闭客户端。
        MAC层:
             目的MAC地址:C的MAC地址。
             源MAC地址:A的MAC地址。
             协议类型或数据长度:0800。
        IP层:
             总长度:包含IP层和ICMP层长度。
             高层协议类型:1。
             校验和:在其它字段填充完毕后计算并填充。
             源IP地址:A的IP地址。
             目的IP地址:C的IP地址。
        ICMP层:
             类型:13。
             代码字段:0。
             校验和:在ICMP层其它字段填充完毕后,计算并填充。
         其它字段使用默认值。
  9. 主机C启动协议分析器进行数据捕获,并设置过滤条件(提取ICMP协议)。
  10. 主机A发送已编辑好的数据帧。
  11. 主机C停止捕获数据。察看主机C捕获到的数据,并填写下表:

表6-1  实验结果

⭐️​​​​​​​练习3——UDP广播通信

本练习将主机A、B、C、D、E、F作为一组进行实验。

1.  主机B、C、D、E、F上启动“实验平台工具栏中的UDP工具”,作为服务器端,监听端口设为2483。
2.  主机B、C、D、E、F启动协议分析器捕获数据,并设置过滤条件(提取UDP协议)。
3.  主机A上启动“实验平台工具栏中的UDP工具”,作为客户端,以255.255.255.255为目的地址,以2483为端口,填写数据并发送。
4.  察看主机B、C、D、E、F上的“UDP工具”接收的信息。
     ●  哪台主机能够接收到主机A发送的UDP报文?
5.  察看协议分析器上捕获的UDP报文,并回答以下问题:
     ●  主机A发送的报文的目的MAC地址和目的IP地址的含义是什么?


☀️| 五、实验结果

练习1:

UDP的校验和需要计算UDP首部加数据荷载部分,但也需要加上UDP伪首部。这个伪首部指,源地址、目的地址、UDP数据长度、协议类型(0x11),协议类型就一个字节,但需要补一个字节的0x0,构成12个字节。伪首部+UDP首部+数据一起计算校验和。

练习2:

UDP是基于连接的协议吗?阐述此特性的优缺点。

不是,优点:传输效率高,不需进行编码,不必进行连接建立和连接终止;缺点:使用UDP的进程不能向UDP发送数据流,也不能期望UDP将这个数据流分割成许多不同的相关联的用户数据报。相反,每个请求必须足够小,才能让其装入到用户数据报中。

UDP报文交互中含有确认报文吗?阐述此特性的优缺点。

无,优点: 提高传输效率;缺点: 在传输过程中可能有丢失、重复、乱序。    

练习3:


 ☀️| 六、思考题

1. UDP协议的“校验和”要包含伪首部?

答:收到的UDP包只有源和目的的UDP端口号,并没有IP地址信息,所以要重新构造个伪头部,加上源IP和目的IP(从IP包中拿来),再计算校验和以确定数据包的正确性。

2. 观察UDP报文,说明其首部包含哪些字段?

首部字段很简单,只有8个字节,由4个字段组成,每个字段的长度都是2个字节。
UDP报头结构:携带数据大小长度 -8

  1. 源端口号:在需要对方回信时选用,不需要时可全用0
  2. 目的端口号:在终点交付时使用
  3. 长度:UDP用户数据报的长度,最小值是8
  4. 检验和:检测UDP用户数据报在传输中是否有错,有错就丢弃
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UDP协议全面实验分析详解 的相关文章

  • 如何用C语言创建UDP服务器?

    我正在尝试用 C 语言 在 Linux 下 编写一个 UDP 服务器 我知道在socket 我必须使用的功能SOCK DGRAM并不是SOCK STREAM if list s socket AF INET SOCK DGRAM IPPRO
  • 如何在 Docker 上发布 UDP 端口?

    如何将 UDP 端口从 Docker 容器转发到主机 使用 p 标志并添加 udp端口号的后缀 p 53160 53160 udp 完整命令 sudo docker run p 53160 53160 p 53160 53160 udp p
  • 我应该对 UDP 使用(非阻塞)NIO 吗?

    根据这个帖子 https stackoverflow com questions 569555 non blocking udp i o vs blocking udp i o in java UDP 只是不阻塞 使用 非阻塞 NIO AP
  • GCDAsyncUDPSocket源地址返回null

    谷歌代码问题镜像 https groups google com forum topic cocoaasyncsocket grhjZSMLr3U https groups google com forum topic cocoaasync
  • C# UDP广播和接收示例

    问题 我正在尝试将 udp 套接字绑定到特定地址 我会广播一条消息 同一个套接字需要能够接收消息 当前代码 static void Main UdpClient Configuration new UdpClient new IPEndPo
  • Android 上的 UDP 视频流

    我有一个 Android 项目 需要构建一个客户端应用程序来接收 UDP 或 RTP 单播视频流并播放它们 不幸的是 我似乎无法使其正常工作 并且已经广泛搜索了解决方案 我已经在 Xoom Android 3 2 和 Nexus S And
  • C++ 反序列化通过 UDP 从 C# 应用程序发送的对象

    我有一个申请c 它连接到另一个应用程序 编写为c 通过UDP 我更喜欢高性能的解决方案 因为我希望测量事件客户端 某些处理服务器端和客户端处理完成的响应之间的时间 本质上是 往返延迟 我有一个 C 对象 例如 public class Pa
  • 移动提供商无法进行 UDP 打洞

    实际上 我正在编写一个 Android 应用程序 该应用程序接收连接到 PC 的网络摄像头的图片 为了获得更多的 fps 我使用 udp 协议而不是 tcp 这个想法是 电脑将图片发送到手机的 IP 和端口 但电话提供商有不同的公共端口 所
  • 接收来自 N 个客户端的响应,以回复通过 UDP 的广播请求

    我正在为特定类型的网络多媒体设备实现一种 IP 查找器 我想找出 LAN 中该类型的所有活动设备及其 IP 地址和其他详细信息 设备有自己的设备发现方式 其工作原理如下 客户端通过 UDP 通过 LAN 发送广播请求 目的端口号是固定的 作
  • UDP sendto 上的 ECONNREFUSED 错误

    我在使用正在写入的应用程序时遇到一些无法解释的行为 使用 sendto 向多个端口发送 UDP 数据 所有端口均使用套接字 PF INET SOCK DGRAM 0 为了一组客户端读取进程的利益 这些 sendto 偶尔会不可预测地触发经济
  • 如何在QT中发送和接收UDP数据包

    我正在 QT 中编写一个小型应用程序 它通过本地网络发送广播 UDP 数据包 并等待来自网络上的一个或多个设备的 UDP 响应数据包 创建套接字并发送广播数据包 udpSocketSend new QUdpSocket this udpSo
  • 互联网上的 UDP 多播?

    我不确定如何最好地解决我的问题 我有一个在远程计算机上运行的服务 用于接收和处理 UDP 数据包 我希望该服务能够将这些数据包重新发送给任何需要它们的人 可能是任何人 通常是一台机器 但也可能更多 我认为 UDP 多播将是理想的 该服务可以
  • 对等网络应用程序的网络发现

    我希望有两个类 一个服务器类和一个客户端类 服务器类应该接收每个新客户端的 IP 地址和端口号并将它们存储在列表中 它应该为每个客户端提供已连接客户端及其 IP 地址的列表 然后 客户端可以使用 TCP 连接相互通信 问题是客户端不知道服务
  • 自 2012 年以来,WinSock 注册 IO 性能是否有所下降?

    我最近使用 MS 为该 API 提供的稍微可接受的文档编写了基于 WinSock Registered IO RIO 的 UDP 接收 最终的性能非常令人失望 单套接字性能有些稳定 约为每秒 180k 数据包 使用多个 RSS 队列 即多个
  • 在 macOS 10.12 上绑定到套接字时出现 NSPOSIXErrorDomain

    我正在玩CocoaAsyncSocket https github com robbiehanson CocoaAsyncSocket在 Swift 中绑定到 UDP 套接字并通过本地网络接收消息 我正在初始化一个套接字 并尝试绑定到一个端
  • Python UDP广播不发送

    我正在尝试从 Python 程序到两个 LabView 程序进行 UDP 广播 我似乎无法发送广播 我不确定我的套接字初始化错误在哪里 广播似乎足够简单 据我所知 其他电脑没有收到任何数据 另外 我将来还需要这个程序来接收来自其他电脑的数据
  • 您可以bind()和connect() UDP连接的两端吗

    我正在编写一个点对点消息队列系统 它必须能够通过 UDP 运行 我可以任意选择一侧或另一侧作为 服务器 但这似乎不太正确 因为两端都从另一端发送和接收相同类型的数据 是否可以绑定 和连接 两端 以便它们只能彼此发送 接收 这似乎是一种非常对
  • 为多线程 UDP 客户端执行“close ()”时套接字描述符未释放

    我在下面编写了 UDP 客户端 它基本上生成一个单独的线程来接收数据报 但是数据报仅在主线程中发送 现在 在 Linux 发行版上实例化 udpClient 1 UDP 客户端后按 ctrl D 实现退出循环 围绕 getline 调用 并
  • P2P网络游戏/应用程序:类似“战网”匹配服务器的不错选择

    我正在制作一个网络游戏 1v1 游戏中是 p2p 不需要游戏服务器 然而 为了让玩家能够 找到彼此 而不需要在另一种媒介中协调并输入IP地址 类似于网络游戏的现代时代 我需要有一个协调 匹配服务器 我无法使用常规网络托管 因为 客户端将使用
  • UDP 广播发送失败:在 Linux 2.6.30 上“网络无法访问”

    我用udp广播写了一个程序 代码段如下 struct sockaddr in broadcast addr socklen t sock len sizeof broadcast addr bzero broadcast addr sock

随机推荐

  • [深入研究4G/5G/6G专题-27]: 5G NR开机流程4.5 - RRC连接应答消息MSG4、PUCCH上行控制信道首次调度、UCI与HARQ应答

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 第1章 随机接入知识准备 1 1 逻辑信道 传输信道 物理信道的映射关系
  • Office CVE-2017-11882本地复现

    Office CVE 2017 11882本地复现 这两天 office又出名了 CVE 2017 11882成了圈里关注的热点 今年office爆出好几个漏洞 从CVE 2017 0199 CVE 2017 8570到现在的CVE 201
  • Linux服务器Shell批量巡检

    关键词 Linux shell 批量巡检 1 批量巡检流程 通过Linux shell脚本实现批量服务器巡检方案 通常脚本由三部分组成 包括 巡检脚本 实现对性能信息或指标的采集与回传 巡检脚本下发脚本 由主服务器通过Except工具分别根
  • 支持向量机基础

    支持向量机 也叫支持向量网络 可以继续有监督 半监督 无监督学习 有监督学习 线性二分类与回归 非线性二分类与回归 普通连续型变量的回归 概率型连续变量的回归 无监督学习 支持向量机的聚类 SVC 异常值检测 半监督学习 转导支持向量机 支
  • h5监听页面展示隐藏返回

    在开发中遇到了需要监听页面隐藏展示 比如切到后台又切回来 这个时候我立马想到onShow生命周期 不过反应过来这个是微信小程序的 如果想在h5里面监听的话 只需要加一个监听器 document addEventListener visibi
  • java线程锁与解锁,Java在不同的线程上锁定和解锁

    我有一个主线程和一个工作线程 主线程将任务添加到队列中 工作线程将其用于计算数据 在将对象放入队列之前 我在任务对象内的ReentrantLock对象 在主线程上 上调用锁 当工作线程完成从队列中的任务处理时 我称为解锁 在工作线程上 问题
  • 网络层的IP协议(一)

    TCP IP的核心是互联网层 这一层类比于OSI参考模型中的第三层 即网络层 该层成熟的技术主要有IP和ICMP两种协议 IP协议共有两个版本 分别为IPv4和IPv6 网络层的主要作用是实现终端节点之间的通信 这种端点之间的通信业称为点对
  • 经过负载均衡图片加载不出来_没有预热,这不叫高并发,叫并发高

    大家都知道 高并发系统有三把斧子 缓存 熔断和限流 但还有一把斧子 经常被遗忘在角落里 郁郁不得志 那就是预热 现象举例 先说两个现象 这些现象 只能在并发高的系统中出现 好吧 它已经引起了多个故障 一 DB重启后 瞬间死亡 一个高并发环境
  • Python随便练练

    定义一个变量 如果这个变量大于60就打印 恭喜您考试及格 如果这个变量小于60 兄dei再接再厉 a 70 if a gt 60 print 兄dei你及格啦 else print 兄dei你需要再接再厉 输出 兄dei你及格啦 交互式 a
  • pycharm中设置默认的python解释器/添加现有的虚拟环境

    问题描述 conda创建新的虚拟环境后 如何设置默认的python解释器 使模型调试和运行时能够自动调用默认的解释器 操作步骤 1 使用coda env list查看所有虚拟环境的路径 从而找到目标虚拟环境的路径 2 从设置中选择pytho
  • pppoe流程

    转载自http blog sina com cn s blog 4db83b6f01000apg html PPPoE的数据报文是被封装在以太网帧的数据域内的 以太网帧头包括 目的MAC地址 该阶段为ffffffffffff的广播地址 源M
  • LeetCode刷题总结 - 面试经典 150 题 -持续更新

    LeetCode刷题总结 面试经典 150 题 持续更新 其他系列 数组 字符串 88 合并两个有序数组 27 移除元素 26 删除有序数组中的重复项 80 删除有序数组中的重复项 II 169 多数元素 189 轮转数组 121 买卖股票
  • 计算机系统盘没用的东西怎么删除,怎么删除c盘没用的文件 方法有哪些【图文】...

    近几年我国的发展可是非常的迅速 现在的电脑已经不是稀罕的东西了 台式电脑和 笔记本电脑 很多家庭都有 使用电脑我们大家都知道 电脑是一个大工程 我们的每一步操作都会在电脑上留下痕迹 尤其是我们浏览一些网页或者下载一些视频 这些垃圾就会积存在
  • 正射影像、倾斜摄影测量相关软件汇总

    从事倾斜摄影测量相关工作的同事经常会用到一些三维建模软件 使用过程中会发现不同软件的优劣势也有一定的区别 以下列举的软件排名不分先后 大家可以根据自己的工作和学习要求进行选择 1 Pix4D Mapper Pix4Dmapper是一款专门用
  • js数组队列,算法

    后面添加 let arr1 1 2 3 4 5 6 7 8 arr1 push 9 console log arr1 前面添加 arr1 unshift 0 console log arr1 前面删除 arr1 shift console
  • vscode jupyter找不到系统默认的python解释器

    今天zaivscode上使用jupyter时 select kernel发现找不到我系统的默认python解释器了 只有两个conda环境 我的系统默认的是Anaconda 而且之前已经在vscode里配置过了 今天就发现在vscode里怎
  • Windows与Linux动态库的两种加载方式

    Windows上的动态库 dll 加载方式有两种 1 静态加载 运用 pargma comment lib xxx lib 方式 这种方式需要 头文件 lib文件和dll文件配合使用 运行时是直接将动态库加载到内存中的 运用起来也比较方便
  • linux下面用C语言设计实现一个计算器

    我们对于计算器的功能已经非常熟悉了 这个计算器包括 二进制 八进制 十进制 十六进制 四种格式 格式之间可以相互切换 能够实现的的运算有 加减乘除 最基本的功能 还有比如 tan sin cos Exp x y x 3 x 2 n log
  • Java 中String类型变量的使用

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 理解 String属于引用数据类型 翻译为 字符串 声明String类型变量时 使用一对 String可以和八种基本数据类型变量做运算
  • UDP协议全面实验分析详解

    Thank For LYJ 目录 一 实验目的 二 实验环境 三 实验原理 四 实验内容 练习1 编辑并发送UDP数据报 练习2 UDP单播通信 练习3 UDP广播通信 五 实验结果 练习1 练习2 练习3 六 思考题 1 UDP协议的 校