《TCP/IP 详解 卷1:协议》第 10 章:用户数据报协议
引言
UDP 稍微扩展了IP协议,使得包可以在进程间传送,而不仅仅是在主机件。——《CSAPP》
IP 数据报是指 IP 层端到端的传输单元。分组(packet)是 IP 层和链路层的传输单元。一个分组可以是一个完整的数据报,也可以是一个分片。——《TCP/IP协议详解卷一 第一版》
UDP 是一种保留消息边界(与TCP的区别中容易忽略的一点)的简单的面相数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制、拥塞控制。它提供端到端差错检测,也就是传输层端到端校验和,也不保证报文一定能到达目的地。一般来说,每个被应用程序请求的 UDP 输出操作只产生一个 UDP 数据报,从而发送一个 IP 数据报,这一点不同于 TCP 面相数据流的特征。
UDP 本身是提供最小功能的传输层协议:它把应用程序传给 IP 层的数据发送出去。【RFC0768】是 UDP 30 多年来未改变的标准。虽然可靠性和保护性有所缺失,但 UDP 不是一无是处的。因为它的简单,因为它的无连接性,UDP 比其他的传输层协议的开销要小得多。另外,组播和广播操作更多使用 UDP 这样无连接的传输。
UDP header
| 字段 | 长度(bytes) | 含义 |
|---|---|---|
| 源端口号 | 2 | 见下文“端口号” |
| 目的端口号 | 2 | 见下文“端口号” |
| 长度 | 2 | UDP头部和数据的总长度,以字节为单位 |
| 检验和 | 2 | 见下文“UDP检验和” |
端口号
- 端口号相当于电话号码之后的扩展码,帮助协议辨认进程。
- 它们是抽象的,即不与任何主机、任何物理实体相关。
- 在 UDP 中,端口号是 16 位的特殊数字(0~65535)。
- 源端口号是可选择的,如果发送者不要求回复的话,可以设置源端口号为 0.
- IP 层根据协议字段或 IPv6头部中的下一个头部字段分离到特定的传输协议,这意味着端口号在不同的传输层协议之间是独立的。TCP 端口号只能被 TCP 使用,UDP 亦然。(尽管如此,但如果某个众所周知的服务同时由 TCP 和 UDP 提供,那么这两个端口号通常被分配成一样的)
UDP 检验和
- UDP 校验和是我们遇到的第一个传输层端到端检验和(ICMP 是网络层第一个端到端校验和)。UDP 校验和覆盖 UDP 头部、UDP 数据和 UDP 伪头部。端到端是指由发送方计算得到,由最终的接收方检验,途中不会被修改(除非是通过 NAT)。
- 对比只覆盖头部的 IPv4 检验和,经过每一跳路由器都要修改。传输层协议检验和覆盖传输层协议头部和数据。
- “UDP 伪头部”是指UDP数据报长度可以是奇数长字节,而检验和算法只相加 16 位字(偶数字节),因此对于奇数字节长度的数据报,UDP 会在末尾添加一个都为 0 的填充。仅为了计算校验和,不会被传递出去。
UDP 和 IP 分片
在链路层中有介绍,链路层对可传输帧长度有一个最大上限。IP 引入分片和重组。IP 转发时,做出的判断,不仅根据路由表,也根据要求的 MTU 是多少。如果数据报太大则进行分片。
- 分片可以在发送方到目的地上的端到端路径上任何中间路由器进行。
- 重组直到它到达最终目的地才会被重组。原因有二:一、网络中不进行重组减轻路由器的负担。二、不同分片可能经过不同路径到达目的地,这样的话路由器没有能力来重组。
总结
UDP 是一个简单的协议。它给 IP层之上的用户进程提供了端口号和检验和机制。没有流量控制、拥塞控制、差错纠正。有差错检测和消息边界保留。
我们看到了 UDP 用于IP 分片、路径 MTU 发现。当出现如下情况,最常用的就是 UDP 了:
- 要避免建立连接的开销。
- 多端点传送(组播、广播)
- 不需要 TCP 相对笨重的可靠
UDP 的主要用途之一是 DNS(域名系统)。UDP 占据了观察到的互联网流量的 10% - 40%,随着点对点应用数量的增加,UDP 的使用仍在上升,虽然 TCP 在稳定性方面占据了统治地位。网络分片流量大多数 UDP 的,尽管总体流量中只有极少数是分片。分片中的流量类型主要有基于 UDP 的多媒体流量、VPN 隧道中封装的隧道流量。
《TCP/IP 详解 卷1:协议》第 10 章:用户数据报协议的更多相关文章
- TCP/IP详解 卷1 第十九章 TCP的交互数据流
19.1 引言 成块数据:比如ftp.电子邮件.Usenet新闻 交互数据:Telnet.Rlogin 成块数据的报文段基本上都是满长度(full-size)的,而交互数据小的多(Telnet和Rlo ...
- 《TCP/IP详解卷1:协议》第1章 概述-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第3章 IP:网际协议(2)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第4章 ARP:地址解析协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
随机推荐
- PHPCMS v9 手机端栏目绑定模板
phpcms的手机端,模块是有了,但是有些地方用的还不是很舒服,其中移动端栏目无法绑定模板就不是很方便.如图,所有的栏目绑定的模板是固定的. 这次咱们就来处理下,移动端如何设置相应的模板.这里说是设置 ...
- 20145202马超 2016-2017-2 《Java程序设计》第9周学习总结
20145202马超 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交 ...
- ZJOI2018 round^2 游记
Day0 一早起来6点左右,吃完早饭去班里拿了书包就来机房,说实话怕被打[手动滑稽]. 在车上大约经历了3个半小时的车程,终于到达了目的地:余姚.当然基本上大家的设备电量都不多了,除了某些上车睡觉的大 ...
- c++ 字符串转换
字符分类函数 转换字符函数 字符串转换成数值 需清加#include<ctype.h> 函数名 功能 islower 测试是否小写字母, 是返回非零,否则返回零. isupper 测试是否 ...
- JavaScript之字符串的常用操作函数
字符串的操作在js中非常繁琐,但也非常重要.在使用过程中,也会经常忘记,今天就对这个进行一下整理. String 对象 String 对象用于处理文本(字符串). new String(s); // ...
- CentOS7 初始化配置
一.在安装的时候配置网卡名称的参数 . 选择“Install Centos ” . 按Tab,打开kernel启动选项后,增加 net.ifnames= biosdevname= 二.最小化安装完成之 ...
- 非局部均值滤波算法的python实现
如题,比opencv自带的实现效果好 #coding:utf8 import cv2 import numpy as np def psnr(A, B): return 10*np.log(255*2 ...
- 洛谷 P4026 [SHOI2008]循环的债务
水水的dp 设f[i][a][b]表示交换完前i种面值的钞票,第一个人有a元,第二个人有b元的最小代价 直接转移就行了 需要注意的是算的式子 第1个人\(\Delta A\),第二个人\(\Delta ...
- JZOJ5371 组合数问题
Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数. 举个例子,将{1,2,3}拆分成2 个集合有({1},{2,3}),({2},{1,3}),({ ...
- Python: C扩展初体验
前言 使用 Python 毋庸置疑减少了很多规则约束和开发成本,让我们能够更加专注于逻辑而非语法.但是得此失彼,开发效率提高了,却带来了运行性能的问题,所以就常常被其他门派追着暴打. 身为一个 pyt ...