UDP

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

    1. UDP是无连接的,即在发送数据报之前不需要建立连接(当然发送数据结束的时候也不会有连接释放),因此减少了开销和发送数据之前的时延。

    2. UDP是尽自己最大努力交付,且并不提供可靠服务,因此主机并不需要维持复杂的链接状态表。

    3. UDP是面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部之后就可以交付给IP层。UDP对于应用层交付下来的报文,既不拆分,也不合并,只是只是保留这些报文的边界。意思就是,不管上层传给UDP多长的报文,UDP照样发送,至于是否进行切片处理等等,那是IP层的事情。

    4. UDP没有拥塞控制,因此网络上出现拥塞不会使得源主机的发送速率降低。这种就特别的适合实时场景的使用。例如视频通话,语音通话等等。

    5. UDP支持一对一,一对多,多对一,多对多的交互通信。

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

  2. UDP首部的格式:

    1. 源端口(两个字节):源端口号。不需要的时候用全0
    2. 目的端口(两个字节):目的端口号。
    3. 长度(两个字节):UDP用户数据报的长度,其最小值为8(仅含首部)。
    4. 检验和(2字节):检测UDP用户数据包在传输中是否出错。有错就丢弃。
  3. 当运输层从IP层接收到UDP数据报的时候,就根据首部中的目的端口,把UDP数据报通过响应的端口,最终交付给相应的用用进程处理。如图

  4. 如果接收方UDP接收到的目的端口号不明确(即不存在相应的目的端口号),就丢弃这个UDP报文,并由网际控制协议(ICMP)发送端口不可达差错报文给发送方。

  5. 请注意,虽然在UDP之间的通信需要使用到端口号,但由于UDP通信是无连接的,因此并不需要使用socket(TCP之间就要必须使用socket建立连接)。

  6. UDP用户数据报首部中校验和的计算方法有些特殊。在计算校验和的时候,要在UDP用户数据报之前加上12字节的伪首部(伪首部的第三个字段全是0,第四个字段是IP首部中的协议字段,以前讲过,对于UDP,就是17;第五个字段是UDP用户数据包的长度。因此检验和,既检查了UDP用户数据报的源端口号和目的端口号以及检查了UDP用户数据包的数据部分,又检查了IP数据报的源IP地址和目的IP地址)。所谓的伪长度是因为者追踪伪长度并不是UDP用户数据真正的首部。只是在校验和的时候,临时加到UDP数据报的前面,得到一个临时的UDP用户数据报,检验和就是根据这个UDP临时数据报来计算的,伪长度既不向下传送也不向上递交,而仅仅是为了计算校验和。,至于怎么校验呢?其实UDP计算校验和的方法和计算IP数据报的首部校验和的方法类似。但不同的是:IP数据报的检验和只校验IP数据报的首部,但是UDP检验和是把首部和数据部分一起校验。在发送方,首先把全0放到校验和字段中。再把伪首部UDP用户数据报看成是由许多16位的字符拼接起来的。若UDP用户数据报的数据部分不是偶数字节,则要填入一个全零字节(但此字节不发送),然后按照二进制反码计算出这些16位字的和,将此和的二进制反码写入校验和字段后,就发送这样的UDP用户数据报。在接收方,把收到的UDP用户数据报连同伪首部一起,按二进制反码求出16位字的和,当无差错时,其结果为1,否则就是出现差错,接收方就应该丢弃这个UDP报文,并把错误信息通过ICMP(网际控制协议)差错报告给上层。

  7. 这种简单的差错检测方法能力并不强,但它的好处是简单,处理起来比较快。

UDP用户数据报的更多相关文章

  1. 【RL-TCPnet网络教程】第16章 UDP用户数据报协议基础知识

    第16章      UDP用户数据报协议基础知识 本章节为大家讲解UDP(User Datagram Protocol,用户数据报协议),需要大家对UDP有个基础的认识,方便后面章节UDP实战操作. ...

  2. udp用户数据报协议

    UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层 ...

  3. 【TCP/IP详解 卷一:协议】第十一章 UDP 用户数据报协议

    11.1 引言 UDP 是一个简单的 面向数据报 的运输层协议:进程的每个 输出操作 都正好产生一个 UDP数据报,并且组装成一份待发送的IP数据报. 这与 TCP 不一样,它是 面向流字符 的协议, ...

  4. TCP/IP详解学习笔记(8)-- UDP:用户数据报协议

    1.UDP概述 UDP是一种无连接的, 即发送数据前不需要建立连接,因此减小的开销和发送数据的延迟. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表. UDP是面向报文 ...

  5. 运输层2——用户数据报协议UDP

    目录 1. UDP概述 2. UDP首部格式 3. UDP首部检验和计算方法 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议U ...

  6. 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  7. 《TCP/IP具体解释卷2:实现》笔记--UDP:用户数据报协议

    用户数据报协议.即UDP,是一个面向数据报的简单运输层协议:进程的每次输出操作仅仅产生一个UDP数据报,从而发送 一个IP数据报. 进程通过创建一个Internet域内的SOCK_DGRAM类型的插口 ...

  8. UDP:用户数据报协议

    UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报.这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数 ...

  9. TCP/IP详解 卷一(第十一章 UDP:用户数据报协议)

    UDP是一个简单的面向数据报的运输层协议. UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地. UDP首部的个字段如下图所示

随机推荐

  1. C# 中的异步问题 Task

    public class SharedData { public int Value { get; set; } } public class Test { async Task ModifyValu ...

  2. spring加载Bean的解析过程(二)

    1.例如: BeanFactory bf = new XmlBeanFactory(new ClassPathResource("spring.xml")); User user ...

  3. 传统JIT和java9新特性AOT理解

    java慢的原因 1.  除了少量基本类型用栈存储外,所有对象都使用堆存储.堆的性能低于栈. 2.  很多强制类型转换(cast)或加查,耗用内存大.java运行时对类型检测,如果类型不正确会抛出Cl ...

  4. MySQL高可用主从复制新增slave

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 基础环境 二 新增slave2方案 2.1 方案1:-复制主库 2.2 方案2 ...

  5. MeteoInfo-Java解析与绘图教程(四)

    MeteoInfo-Java解析与绘图教程(四) 上文我们说到,将地图叠加在色斑图上,但大部分都是卫星绘图,现在开始讲解micaps数据绘图,同样也是更多自定义配置 首先我们解析micaps数据,将之 ...

  6. (七)羽夏看C语言——模板(C++)

    写在前面   由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...

  7. OSS对象存储的文件上传、解冻、下载与查看

    上传文件 cp命令用于上传.下载.拷贝文件. # 语法 ./ossutil cp [-r] file_url cloud_url # 例如 ossutil64 cp -r /remote/closed ...

  8. TreeView和ListView数据库查询数据联动操作

    好久不用了,重新整理下放这里以备需要使用,功能见图 数据库表结构 定义TreeView addObject中data存储的记录集 type PNode = ^TNode; TNode = record ...

  9. Vue+element基本增删改查

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  10. API:获取当前用户的公网IP

    在vue项目根目录下" public " 文件夹中的index.html,也就是根节点所在的文件引入JS,vue项目中静态文件需要在这里引入,用 script 标签规避跨域 < ...