CN_UDP协议

news2024/11/14 15:20:00

文章目录

  • UDP协议
    • UDP概述
    • UDP的首部格式
      • UDP数据报封装入IP数据报
    • UDP校验
      • 伪首部
      • 真首部
      • UDP数据报处理
    • UDP vs TCP

UDP协议

  • User Datagram Protocol - Wikipedia
    • 1Attributes
    • 2Ports
    • 3UDP datagram structure
    • 4Checksum computation
      • 4.1IPv4 pseudo header
      • 4.2IPv6 pseudo header
    • 5Reliability and congestion control

UDP概述

  • UDP仅在IP的数据报服务之上增加了两个最基本的服务:复用和分用以及差错检测

    • 如果应用开发者选择UDP而非TCP,那么应用程序几乎直接与IP打交道

    • 主要因为UDP具有如下优点:

  • 1)UDP无须建立连接

    • 因此UDP不会引入建立连接的时延 试想如果DNS运行在TCP而非UDP上,那么DNS的速度会慢很多 HTTP使用TCP而非UDP,是因为对于基于文本数据的Wb网页来说,可靠性是至关重要的
  • 2)无连接状态

    • TCP需要在端系统中维护连接状态 此连接状态包括接收和发送缓存,拥塞控制参数和序号与确认号的参数 而UDP不维护连接状态,也不跟踪这些参数 因此,某些专用应用服务器使用UDP时,一般都能支持更多的活动客户机
  • 3)分组首部开销小

    • TCP有20B的首部开销,而UDP仅有8B的开销
  • 4)应用层能更好地控制要发送的数据和发送时间 UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率 某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而UDP正好满足这些应用的需求

  • UDP支持一对一,一对多,多对一和多对多的交互通信

    • UDP常用于一次性传输较少数据的网络应用,如DNS,SNMP等,因为对于这些应用,若采用TCP,则将为连接创建,维护和拆除带来不小的开销 UDP也常用于多媒体应用(如IP电话,实时视频会议,流媒体等),显然,可靠数据传输对这些应用来说并不是最重要的,但TCP的拥塞控制会导致数据出现较大的延迟,这是它们不可容忍的
  • UDP不保证可靠交付,

    • 但这并不意味着应用对数据的要求是不可靠的,所有维护可靠性的工作可由用户在应用层来完成 应用开发者可根据应用的需求来灵活设计自己的可靠性机制
  • UDP是面向报文的

    • 发送方UDP对应用层交下来的报文,在添加首部后就向下交付给IP层,一次发送一个报文,既不合并,也不拆分,而是保留这些报文的边界;接收方UDP对P层交上来UDP数据报,在去除首部后就原封不动地交付给上层应用进程,一次交付一个完整的报文
    • 因此报文不可分割,是UDP数据报处理的最小单位
    • 因此,应用程序必须选择合适大小的报文,
      • 若报文太长,UDP把它交给IP层后,可能会导致分片:
      • 若报文太短,UDP把它交给IP层后,会使P数据报的首部的相对长度太大,
      • 两者都会降低IP层的效率

UDP的首部格式

  • UDP数据报包含两部分:
    • 用户数据
    • UDP首部
      • UDP首部有8B,由4个字段组成,每个字段的长度都是2B:
      • 1)源端口
        • 源端口号 在需要对方回信时选用,不需要时可用全0.
      • 2)目的端口
        • 目的端口号 这在终点交付报文时必须使用到
      • 3)长度
        • UDP数据报的长度(包括首部(不包括伪首部,只含真首部的8B)和数据),其最小值是8(仅有首部)
        • 首部长度是没有必要的
          • UDP报文的首部长度总是8B
      • 4)校验和
        • 检测UDP数据报在传输中是否有错 有错就丢弃
        • 校验和可以校验伪首部 ,UDP报文,应用层数据
        • 该字段是可选的,当源主机不想计算校验和时,则直接令该字段为全0
        • 当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口上交给应用进程
        • 如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于端口号的应用进程),那么就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方

UDP数据报封装入IP数据报

  • IP数据报
    • 首部
    • 数据(UDP数据报)
      • 首部
        • 伪首部(12B)(不向下传送又不向上递交🎈;包含了IP分组报头的一部分)
          • 源IP地址(4B)
          • 目的IP地址(4B)
          • 0(1B)
          • 17(1B)
          • UDP长度(2B)
        • 真首部(8B)🎈
          • 源端口
          • 目的端口
          • 长度
          • 校验和
      • 数据

UDP校验

伪首部

  • 在计算校验和时,要在UDP数据报之前增加12B的伪首部,伪首部并不是UDP的真正首部
  • 只是在计算校验和时,临时添加在UDP数据报的前面,得到一个临时的UDP数据报
  • 校验和就是按照这个临时的UDP数据报来计算的
    • 伪首部既不向下传送又不向上递交,而只是为了计算校验和
  • 在这里插入图片描述

真首部

  • 在这里插入图片描述

UDP数据报处理

  • UDP校验和的计算方法和IP数据报首部校验和的计算方法相似

    • 但不同的是,IP数据报的校验和只检验IP数据报的首部,但UDP的校验和则检查首部和数据部分
  • 发送方首先把全零放入校验和字段并添加伪首部

    • 若UDP数据报的数据部分不是偶数个字节,则要在数据部分末尾填入一个全零字节(但此字节不发送)
    • 把UDP数据报视为许多16位的字串接起来
    • 按二进制反码计算出这些16位字的和,将此和的二进制反码写入校验和字段,并发送
  • 接收方把收到的UDP数据报加上伪首部

    • 如果不为偶数个字节,那么还需要补上全零字节)后,按二进制反码求这些16位字的和
    • 当无差错时其结果应为全1
    • 否则就表明有差错出现,接收方就应该丢弃这个UDP数据报
  • 1)校验时,若UDP数据报部分的长度不是偶数个字节,则需填入一个全0字节

    • 但是此字节和伪首部一样,是不发送的
  • 2)如果UDP校验和校验出UDP数据报是错误的,那么可以丢弃,也可以交付给上层

    • 但是需要附上错误报告,即告诉上层这是错误的数据报
  • 3)通过伪首部,可以检查

    • 源端口号
    • 目的端口号
    • UDP用户数据报的数据部分
    • IP数据报的源IP地址和目的地址
    • 这种简单的差错校验方法的校错能力并不强,但它的好处是简单,处理速度快

  • 字段值(2B/16bit)
    (这里.表示点分十进制,而不表示小数点)
    分割两个字节而已
    二进制形式
    153.1910011001 00010010
    8.10400001000 01101000
    171.310101011 00000010
    14.1100001110 00001011
    0和1700000000 00010001
    1500000000 00001111
    108700000100 00111111
    1300000000 00001101
    1500000000 00000111
    0(校验和)00000000 00000000
    数据01010100 01000101
    数据01010011 01010100
    数据01001001 01001110
    数据和0(填充)01000111 00000000
    求和得出的结果T10010110 11101100
    校验和S(对T求反码)S= T ‾ \overline{T} T01101001 00010010

UDP vs TCP

  • Comparison of UDP and TCP
    • See also: Transport layer
  • Transmission Control Protocol is a connection-oriented protocol and requires handshaking to set up end-to-end communications. Once a connection is set up, user data may be sent bi-directionally over the connection.
    • Reliable – TCP manages message acknowledgment, retransmission and timeouts. Multiple attempts to deliver the message are made. If data gets lost along the way, data will be re-sent. In TCP, there’s either no missing data, or, in case of multiple timeouts, the connection is dropped.
    • Ordered – If two messages are sent over a connection in sequence, the first message will reach the receiving application first. When data segments arrive in the wrong order, TCP buffers the out-of-order data until all data can be properly re-ordered and delivered to the application.
    • Heavyweight – TCP requires three packets to set up a socket connection before any user data can be sent. TCP handles reliability and congestion control.
    • Streaming – Data is read as a byte stream, no distinguishing indications are transmitted to signal message (segment) boundaries.
  • User Datagram Protocol is a simpler message-based connectionless protocol. Connectionless protocols do not set up a dedicated end-to-end connection. Communication is achieved by transmitting information in one direction from source to destination without verifying the readiness or state of the receiver.
    • Unreliable – When a UDP message is sent, it cannot be known if it will reach its destination; it could get lost along the way. There is no concept of acknowledgment, retransmission, or timeout.
    • Not ordered – If two messages are sent to the same recipient, the order in which they arrive cannot be guaranteed.
    • Lightweight – There is no ordering of messages, no tracking connections, etc. It is a very simple transport layer designed on top of IP.
    • Datagrams – Packets are sent individually and are checked for integrity on arrival. Packets have definite boundaries which are honored upon receipt; a read operation at the receiver socket will yield an entire message as it was originally sent.
    • No congestion control – UDP itself does not avoid congestion. Congestion control measures must be implemented at the application level or in the network.
    • Broadcasts – being connectionless, UDP can broadcast - sent packets can be addressed to be receivable by all devices on the subnet.
    • Multicast – a multicast mode of operation is supported whereby a single datagram packet can be automatically routed without duplication to a group of subscribers.

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

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

相关文章

百度安全查询,查询网址是否存在百度安全风险的方法

如果网站被百度安全识别为风险网站,或者是提示该页面可能存在虚假信息,该页面可能已被非法篡改,那么就不妙了。 怎样才能知道自己的网是否存在百度安全风险? 查询网站百度安全的方法: 第一步、打开SEO综合查询工具 第二步、添加…

[附源码]Python计算机毕业设计SSM基于的校园失物招领平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

线程池 (通俗易懂)

线程池一、线程池是什么二、标准库中的线程池三、实现线程池3.1 思路与细节3.2 完整代码四、标准库里的构造方法一、线程池是什么 之前我们已经认识过"池":String,字符串常量池;MySQL JDBC,数据库连接池(DataSource)……

【案例实践】EKMA曲线及大气O3来源解析

【查看原文】EKMA曲线及大气O3来源解析实践技术应用 目前,大气臭氧污染成为我国“十四五”期间亟待解决的环境问题。臭氧污染不仅对气候有重要影响,而且对人体健康、植物生长均有严重损害。为了高效、精准地治理区域大气臭氧污染,首先需要了…

【OpenCV学习】第14课:边缘检测与自定义线性滤波(卷积, Rebert算子, Sobel算子, 拉普拉斯算子)

仅自学做笔记用,后续有错误会更改 参考文章:http://t.zoukankan.com/whw1314-p-12007928.html 理论 卷积的概念: 在图像上使用卷积的目的:模糊图像, 提取边缘轮廓, 图像锐化等 卷积如何工作: 下边给出…

MATLB|基于燃料电池混合动力汽车双层凸优化

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清…

算法基础篇-01-时间复杂度和空间复杂度

1. 用什么表示算法的运行快慢? n 代表是算法里面的问题规模,n越大,运算越慢,比如n1和n100肯定是不一样的;机器不一样,相同的算法代码运行所消耗的时间也不一样; 2. 借用生活中的案例 类比生活中…

[附源码]Python计算机毕业设计SSM基于的校园卡管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

鸿蒙开发初体验以及遇到的几点坑

今天尝试了一下鸿蒙开发,有一些经验跟大家进行分享。建议大家先看完我的文章,再去尝试鸿蒙。 我安装好了开发工具,并且跑通了Hello World程序。同时,我还跑通了小鸿网课Java版本项目: 感觉,还好吧… 操作…

[附源码]Python计算机毕业设计SSM基于的小型房屋租赁平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

WordPress后台添加顶级菜单add_menu_page()函数的用法及实例代码

WordPress后台管理页面包括文章、多媒体、链接、页面、评论、外观、插件......等等主菜单选项,我们在开发主题和插件的时候经常需要在后台添加菜单。 目录 一、WordPress后台添加顶级菜单 概述 一、add_menu_page()函数介绍 三、参数详解 四、Wordpress默认菜…

零基础怎么入门Python?

“零基础可以学习Python吗?” 这是很多初学者经常问的一个问题,我的回答是可以! 现在很多小学、初中也开始学习编程语言,选择的入门语言就是Python。 Python其实和学中文没什么区别,学习中文是为了更好的和人沟通&a…

【redis事务】@Transactional对Redis事务起作用(包含redis+lua)

【redis事务】Transactional对Redis事务起作用(包含redislua)一、前言二、准备三、StringRedisTemplate 开启事务四、关键代码(验证Transactional对redis事务是否生效)五、关键代码(验证Transactional对redislua是否生…

回顾Redis之对象与数据结构

引言 Redis是一款基于键值对的数据结构存储系统,它的特点是基于内存操作、单线程处理命令、IO多路复用模型处理网络请求、键值对存储与简单丰富的数据结构等等 这篇文章主要围绕Redis中的对象与数据结构来详细说明键值对存储与简单丰富的数据结构这两大特点 Redi…

CSS 实现一个3d魔方

前言 👏CSS 实现一个3d魔方,速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 魔方的一面为九个圆角正方形,定义正方形的宽高为–w,九个正方形的直接的间距为–gap,…

Spring整合其他技术

Spring整合其他技术 1 Spring整合mybatis 1.1 思路分析 问题导入 mybatis进行数据层操作的核心对象是谁? 1.1.1 MyBatis程序核心对象分析 1.1.2 整合MyBatis 使用SqlSessionFactoryBean封装SqlSessionFactory需要的环境信息 使用MapperScannerConfigurer加载…

安卓玩机搞机技巧综合资源----手机显秒设置 多种方式【十一】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

电子学会2020年9月青少年软件编程(图形化)等级考试试卷(二级)答案解析

目录 一、单选题(共25题,每题2分,共50分) 二、判断题(共10题,每题2分,共20分) 三、编程题【该题由测评师线下评分】(共2题,共30分) 青少年软件…

软件安全设计(威胁建模实现)

目录 一、实验目的 二、实验软硬件要求 三、实验预习 四、实验内容(实验步骤、测试数据等) 实验步骤 确定安全目标 创建在线学习系统概况图 分解在线学习系统 确定威胁 威胁评估 确定威胁缓解计划或策略 验证和记录威胁 一、实验目的 熟悉软…

[附源码]JAVA毕业设计医院管理系统(系统+LW)

[附源码]JAVA毕业设计医院管理系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&…