UDP的详细解析

news2024/11/16 19:39:07

UDP的详细解析

文章目录

  • UDP的详细解析
    • UDP 概述
    • UDP的首部格式
      • 检验和的计算
    • 抓包测试
    • 参考

TCP/IP运输层的两个主要协议都是互联网的正式标准,即:

  1. 用户数据报协议UDP (User Datagram Protocol)
  2. 传输控制协议TCP (Transmission Control Protocol)

按照OSI的术语,两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元 TPDU.但在TCP/IP体系中,根据所使用的协议是TCP或UDP,分别称之为TCP报文段或UDP用户数据报。

UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式。

下表为一些应用和应用层协议主要使用的运输层协议。

应用应用层协议运输层协议
名字转换DNS(域名系统)UDP
文件传送TDTP(简单文件传送协议)UDP
路由选择协议RIP(路由选择协议)UDP
IP地址配置DHCP(动态主机配置协议)UDP
网络管理SNMP(简单网络管理协议)UDP
远程文件服务NFS(网络文件系统)UDP
IP电话专用协议UDP
流式多媒体通信专用协议UDP
多播IGMP(网际组管理协议)UDP
电子邮件SMTP(简单邮件传送协议)TCP
远程终端接入TELNET(远程终端协议)TCP
万维网HTTP(超文本传送协议)TCP
文件传送FTP(文件传送协议)TCP

UDP 概述

用户数据报协议UDP只在IP的数据服务之上加了很少一点功能,这就是复用和分用的功能以及差错检测的功能。UDP的主要特点是:

  1. UDP是无连接的,即数据发送之前不需要建立连接

  2. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。

  3. UDP是面向报文的。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这就是说应用层交给UDP多长的报文,UDP就照样发送,UDP一次交付一个完整的报文。若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片。

    IMG_20230213_135141

  4. UDP没有拥塞控制 网络出现拥塞不会使源主机的发送速率降低。这对某些实时应用使很重要的。

  5. UDP 支持一对一、一对多、多对一和多对多的交互通信

  6. UDP 的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

UDP的首部格式

用户数据报UDP有两个字段:数据字段和首部i段。首部字段只有8个字节,由四个字段组成,每个字段的长度都是两个字节

  • 源端口 源端口号。在需要对方回信时选用。不需要时可用全0
  • 目的端口 目的端口号。这在终点交付报文时必须使用
  • 长度 UDP 用户数据报的长度,其最小值时8(仅有首部)
  • 检验和 检测UDP用户数据报在传输中是否有错。有错就丢弃。

当接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。

IMG_20230213_140313

检验和的计算

UDP用户数据报首部中检验和的计算方法有些特殊。在计算检验和时要在UDP用户数据报之前加12个字节的伪首部。伪首部既不向下传送也不向上递交,而仅仅是为了计算检验和。通过上面那幅图我们可以看到伪首部中的字段信息:

  1. 32位源IP地址
  2. 32位目的IP地址
  3. 8位保留字节(置0)
  4. 8位传输层协议号(TCP是6,UDP是17)
  5. 16位报文长度(首部+数据)

检验和是如何工作的,我们可以通过观察下图:

IMG_20230213_143250

我们对应着上面这副图看,其实计算这个检验和的过程其实就是,将加上伪首部后的数据按照每16位相加求和。将求和后的结果取反与UDP自带的检验和相与,若得到的结果是全1的则说明数据传输无误。(刚好这里的检验和在UDP是以2字节存储的,刚好是12位)。

若在求16位求和结果时发生进位,那么需要进行回卷。计算的过程可以参考这篇 回卷计算。

读到这里不知道大家会不会有问题,就是为什么UDP在计算检验和的时候需要加上伪首部。

对于这个问题最简单的回答就是:出于历史原因。如下图David P. Reed的解释:

image-20230213151257589

前面这个不好翻译,在StackOverflow中找到了一个相关的解答:

image-20230213151419658

抓包测试

UDP有着很广泛的应用场景。它的特点就像上面看到的很简单,没有流量控制以及差错重传等特点,作为传输层的协议常常被拿来和tcp协议比较。所以广泛应用于qq聊天,视频,网络电视,迅雷等场景。缺点就是容易丢包。

我拿qq聊天来抓个UDP数据包试试。

首先通过终端查看本机的ip地址和物理地址:

image-20230213153811220

我们首先打开抓包工具然后,用qq给自己的Android手机发送聊天,可以发现抓包工具成功捕获信息,如下图。

image-20230213153424813

我们查看一下第二条记录中的详细信息

image-20230213154303273

现在我们再去看看所有qq是否有占用52652这个端口。用netstat -ano列出所有占用的端口号,同时用任务管理器查看qq的PID。查看的结果如下图,发现52652这个端口确实被qq所占用。

image-20230213155030303

参考

  • UDP 检验和原理

  • 为什么校验时要加上IP信息的伪首部

  • UDP/TCP 中使用伪标头的意义是什么

  • 《计算机网络 第7版》

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

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

相关文章

【汽车电子】什么是ADAS?

文章目录ADAS——先进驾驶辅助系统ADAS——商用车安全性能提升的利器总结ADAS——先进驾驶辅助系统 ADAS,全称Advanced Driver Assistance Systems ,“先进驾驶辅助系统”,adas是汽车上面的一种系统,中文名叫做高级驾驶辅助系统&…

Java集合框架常见面试题

1. 剖析面试最常见问题之 Java 集合框架 1.1. 集合概述 1.1.1. Java 集合概览1.1.2. 说说 List,Set,Map 三者的区别?1.1.3. 集合框架底层数据结构总结 1.1.3.1. List1.1.3.2. Set1.1.3.3. Map 1.1.4. 如何选用集合?1.1.5. 为什么要使用集合? 1.2. Colle…

促进关键软件高层次人才培养:平凯星辰与华东师范大学签订联合博士培养合作协议

2022 年年初,平凯星辰入选首批工信部教育部支持联合培养国家关键软件高层次人才计划。该计划旨在探索关键软件产教融合育人模式,超常规加快培养一批急需高层次人才,以及探索关键软件联合技术攻关新模式。2022 年年底,在该计划下 平…

算法 ——世界 一

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…

微服务实战--高级篇:RabbitMQ高级

服务异步通信-高级篇 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送…

2月14,情人节双语送祝福!

2月14日是圣瓦伦丁节,也叫情人节,是西方传统节日 Ebruary 14th is Saint Valentines Day, a traditional holiday in the west.在基督教传统中,有数个名叫Valentine或是Valentinus的殉难圣徒。根据传说,这些Valentine中其中一名是…

手把手教你解决传说中的NPE空指针异常

1. 前言最近有好几个初学java的小伙伴,甚至是学习到了JavaWeb、框架阶段的小伙伴也跑来问壹哥,该如何解决Java中的NullPointerException空指针异常。因为NPE是初学者特别常见的典型异常,所以壹哥在这里专门写一篇文章,来手把手地教…

企业需要ERP系统的6个必要原因

你的企业在月底核对财务交易的时间是否比应有的时间长?你是否依靠猜测而不是核心事实和数字来预测销售?你是否感觉到客户满意度下降了?如果是的话,那么这些都是你的企业迫切需要一个高效的ERP系统的信号。 这里有一些原因表明&am…

JSON数据格式【学习记录】

JSON介绍 JSON(JavaScript Objet Notation)是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它采用一种键:值对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是…

linux的三权分立设计思路和用户创建(安全管理员、系统管理员和审计管理员)

目录 一、三权分立设计思路 1、什么是三权 2、三员及权限的理解 3、三员之三权 4、权限划分 5、“三员”职责 6、“三员”配置要求 二、linux三权分立的用户创建 1、系统管理员 2、安全管理员 3、审计管理员 一、三权分立设计思路 1、什么是三权 三权指的是配置、…

小微企业真的需要CRM吗?

小型企业真的需要CRM吗?小型企业不需要CRM -它太贵了,不是必需品,对吧?错! 在本文中,我们将解释什么是小型企业CRM,小型企业何时应该实施CRM,哪些行业可以从CRM中受益,并…

MySQL数据库12——视图(VIEW)

视图概念 视图是一个虚拟表,称其为虚拟表的原因是:视图内的数据并不属于视图本身,而属于创建视图时用到的基本表。可以认为,视图是一个表中的数据经过某种筛选后的显示方式;或者多个表中的数据经过连接筛选后的显示方…

上手ElasticSearch必须了解的核心概念

ElasticSearch概述ElasticSearch(简称 ES) 是一个分布式的使用 REST 接口的搜索引擎,属于非关系型数据库。它是在 lucene 的基础上进行研发的,隐藏了 lucene 的复杂性,提供简单易用的 RESTful Api接口。ES 的分片相当于…

HTTP、WebSocket和Socket.IO

一、HTTP协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)。HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同, 用于客户端和服务器之间的通信。请求访问文本或图像等资源的一端称为客户端, 而提供资源响应的一端称…

七天实现一个go rpc框架

目录rpc协议目的关于RPC和框架服务端与消息编码确保接口的实现消息的序列化与反序列化通信过程服务端的实现main 函数支持并发与异步的客户端Call 的设计实现客户端服务注册(service register)通过反射实现 service集成到服务端超时处理创建连接超时Client.Call 超时服务端处理…

C语言(联合和枚举)

1.联合创建 联合是一种数据类型,它能在同一个内存空间中存储不同的数据类型(非同时存储) 创建联合和创建结构的方式相同,需要一个联合模板和联合变量。使用关键字union union hold{ int digit; double bigfl; char letter; } 以上…

十、STM32端口复用重映射

目录 1.什么是端口复用? 2.如何配置端口复用? 3.什么是端口重映射 ? 4.什么是部分重映射和完全重映射? 5.重映射的配置过程 1.什么是端口复用? STM32有很多外设,外设的外部引脚与GPIO复用。也就是说一…

Vue|初识Vue

Vue是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。 初识Vue1. Vue简介2. 开发准备3. 模板语法3.1 差值语法3.2 指令语法4. 数据绑定4.1 单向数据…

工厂模式详解

工厂模式 工厂模式顾名思义就是生产实例的工厂,使用工厂模式不会在程序中使用new关键字创建实例。而是将创建对象的细节隐藏,对外提供统一的方法,外部通过该方法获取实例。以此降低调用者与程序之间的耦合性,更加灵活 工厂模式可…

ccc-Brief Introduction of Deep Learning-李宏毅(6)

文章目录Three Steps for Deep LearningFully Connect Feedforward NetworkMatrix OperationOutput Layer as Multi-Class ClassifierExample ApplicationNeural NetworkGoodness of functionPick the best functionThree Steps for Deep Learning 与机器学习三步骤基本相同。 …