UDP用户数据报
UDP
用户数据报协议UDP只在IP的数据报服务之上增加了很少的一个功能,就是复用,分用,差错检测功能。UDP的主要特点是:
UDP是无连接的,即在发送数据报之前不需要建立连接(当然发送数据结束的时候也不会有连接释放),因此减少了开销和发送数据之前的时延。
UDP是尽自己最大努力交付,且并不提供可靠服务,因此主机并不需要维持复杂的链接状态表。
UDP是面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部之后就可以交付给IP层。UDP对于应用层交付下来的报文,既不拆分,也不合并,只是只是保留这些报文的边界。意思就是,不管上层传给UDP多长的报文,UDP照样发送,至于是否进行切片处理等等,那是IP层的事情。
UDP没有拥塞控制,因此网络上出现拥塞不会使得源主机的发送速率降低。这种就特别的适合实时场景的使用。例如视频通话,语音通话等等。
UDP支持一对一,一对多,多对一,多对多的交互通信。
UDP的首部开销小,相比TCP的20字节,只有8字节。
UDP首部的格式:
- 源端口(两个字节):源端口号。不需要的时候用全0
- 目的端口(两个字节):目的端口号。
- 长度(两个字节):UDP用户数据报的长度,其最小值为8(仅含首部)。
- 检验和(2字节):检测UDP用户数据包在传输中是否出错。有错就丢弃。
当运输层从IP层接收到UDP数据报的时候,就根据首部中的目的端口,把UDP数据报通过响应的端口,最终交付给相应的用用进程处理。如图
如果接收方UDP接收到的目的端口号不明确(即不存在相应的目的端口号),就丢弃这个UDP报文,并由网际控制协议(ICMP)发送端口不可达差错报文给发送方。
请注意,虽然在UDP之间的通信需要使用到端口号,但由于UDP通信是无连接的,因此并不需要使用socket(TCP之间就要必须使用socket建立连接)。
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(网际控制协议)差错报告给上层。
这种简单的差错检测方法能力并不强,但它的好处是简单,处理起来比较快。
UDP用户数据报的更多相关文章
- 【RL-TCPnet网络教程】第16章 UDP用户数据报协议基础知识
第16章 UDP用户数据报协议基础知识 本章节为大家讲解UDP(User Datagram Protocol,用户数据报协议),需要大家对UDP有个基础的认识,方便后面章节UDP实战操作. ...
- udp用户数据报协议
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层 ...
- 【TCP/IP详解 卷一:协议】第十一章 UDP 用户数据报协议
11.1 引言 UDP 是一个简单的 面向数据报 的运输层协议:进程的每个 输出操作 都正好产生一个 UDP数据报,并且组装成一份待发送的IP数据报. 这与 TCP 不一样,它是 面向流字符 的协议, ...
- TCP/IP详解学习笔记(8)-- UDP:用户数据报协议
1.UDP概述 UDP是一种无连接的, 即发送数据前不需要建立连接,因此减小的开销和发送数据的延迟. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表. UDP是面向报文 ...
- 运输层2——用户数据报协议UDP
目录 1. UDP概述 2. UDP首部格式 3. UDP首部检验和计算方法 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议U ...
- 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP具体解释卷2:实现》笔记--UDP:用户数据报协议
用户数据报协议.即UDP,是一个面向数据报的简单运输层协议:进程的每次输出操作仅仅产生一个UDP数据报,从而发送 一个IP数据报. 进程通过创建一个Internet域内的SOCK_DGRAM类型的插口 ...
- UDP:用户数据报协议
UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报.这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数 ...
- TCP/IP详解 卷一(第十一章 UDP:用户数据报协议)
UDP是一个简单的面向数据报的运输层协议. UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地. UDP首部的个字段如下图所示
随机推荐
- [Kotlin Tutorials 19] Kotlin Flows, SharedFlow and StateFlow in Android
Kotlin Flows 本文包含的内容: Flow是什么, 基本概念和用法. Flow的不同类型, StateFlow和SharedFlow比较. Flow在Android中的使用 安全收集. 操作 ...
- JOB状态与并发
由于job每次被执行时都会创建一个新的实例, jobDetail实例时,要进行数据存储或者,特殊字段操作,需要每次schedul执行job时保留之前的数据, 那么就需要job在有状态下保持之前的数据信 ...
- ES6扩展——模板字符串
${ } 模板字符串占位符 需要用反引号` ` 1.模板字符串 `${变量}` const xiaoming = { name:'xiaoming', age:14, say1:function(){ ...
- 三大操作系统对比使用之·Windows10
时间:2018-10-29 记录:byzqy 本篇是一篇个人对Windows系统使用习惯.技巧和应用推荐的文档,在此记录.分享和后续查询备忘. 打开终端: Win+R,调出"运行" ...
- Dapper同时操作任意多张表的实现
1:Dapper的查询帮助类,部分代码,其它新增更新删除可以自行扩展 using Microsoft.Extensions.Configuration; using System; using Sys ...
- 手撕LRU缓存了解一下
面试官:来了,老弟,LRU缓存实现一下? 我:直接LinkedHashMap就好了. 面试官:不要用现有的实现,自己实现一个. 我:..... 面试官:回去等消息吧.... 大家好,我是程序员学长,今 ...
- D3之svg transform 与 css3 transform 区别与联系
D3就不用多介绍了,在数据可视化界属于大佬级别的js库.在这里主要想记录一下在写程序期间遇到的一个问题. 如下图所示,想完成主视图在小地图上的映射,小地图的白色矩形框用来代表当前主视图可见区域,主视图 ...
- JavaScript高级程序设计(读书笔记)之函数表达式
定义函数的方式有两种:一种是函数声明,另一种就是函数表达式. 函数声明的一个重要特征就是函数声明提升(function declaration hoisting),意思是在执行代码前会先读取函数声明. ...
- skynet 开启 https 配置
修改 Makefile Mac 下: # https : turn on TLS_MODULE to add https support TLS_MODULE=ltls TLS_LIB="$ ...
- Sentry For React 完整接入详解(2021 Sentry v21.8.x)前方高能预警!三万字,慎入!
内容源于:https://docs.sentry.io/platforms/javascript/guides/react/ 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - ...