【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

为什么 UDP 头只有 8 个字节(一)

  • 2020-01-13
  • 本文字数:1267 字

    阅读完需:约 4 分钟

为什么 UDP 头只有 8 个字节(一)

为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。


UDP 与 TCP 两种传输协议是 IP 协议簇的核心成员,1980 年发布的 RFC 768 定义了 UDP 协议1,我们可以通过它在多个计算机连接构成的网络中传递数据。常见的 DNS 协议就可以使用 UDP 协议获取域名解析的结果2,我们在这一系列前面的 为什么 DNS 使用 UDP 协议 中曾经讨论过 DNS 使用的传输协议。


UDP 是能够传输数据的最简单的协议,它的协议首部(也称作协议头)只有 8 个字节,很多人,尤其是应届毕业生都能通过死机硬背暂时记住 UDP 协议头包含的内容,但是知道协议头的内容不代表我们真正理解背后的原因。本文会分析为什么只有 8 个字节的 UDP 协议能够传输数据,相信这篇文章能帮助你更好地理解 UDP 协议头中字段的作用。



图 1 - UDP 协议头


UDP 协议头中只包含 4 个字段,分别是源端口、目的端口、长度和校验码,其中每一个字段都占 16 比特,即 2 字节,这 4 个字段的作用如下:


  • 源端口是一个可选字段,它表示发送方进程的端口号,接收方可以使用该字段(不一定准确)向发送方发送信息;

  • 目的端口是数据报接收方的端口号,它只在目标的 IP 地址下才有意义;

  • 长度是协议头和数据报中数据长度的总和,表示整个数据报的大小;

  • 校验码使用 IP 首部、UDP 首部和数据报中的数据进行计算3,接收方可以通过校验码验证数据的准确性,发现传输过程中出现的问题;


通过 Wireshark 抓包来查看实际使用中 UDP 协议首部的值。当我们执行 dig baidu.com 命令时,本地就会向 DNS 服务器发送 DNS 查询,下面就是一个 DNS 查询中 UDP 首部的例子:


0000   ff 7c 00 35 00 23 c2 6e
复制代码


上述 UDP 首部中四个字段对应的值如下:


字段数据
源端口0xff7c = 65404
目的端口0x0035 = 53
长度0x0023 = 35
校验码0xc26e


由于 DNS 协议使用的端口是 534,所以上述 UDP 首部中的目的端口就是 53。源端口就是本地发出 DNS 请求的端口,该端口也用来接收 DNS 响应。


定义 UDP 协议的 RFC 768 文档只有 3 页,由于 UDP 协议既不需要保证送达,也不需要保证顺序,所以它没有 TCP 协议那么复杂。TCP 协议中的三次握手5、拥塞控制算法和重传策略等机制都是为了提供可靠性所付出的必要代价,但是 UDP 协议不需要这些策略,它只尽力保证数据报的送达。


我们今天来分析一下为什么首部只有 8 个字节的 UDP 协议能够将数据传输到目的地并由特定的服务接收和处理。我们可以将应用到应用之间的传输过程分成两个部分:主机到主机的数据传输和主机到应用的数据转发。


  • UDP 协议底层的网际协议(Internet Protocol,IP)会负责数据包在主机之间的传输;

  • UDP 协议首部的端口号用于定位处理数据的具体进程并转发数据;


我们都说 UDP 协议是传输层协议,但是真正在主机间完成『数据传输』工作的是 IP 协议,UDP 协议只起到了定位具体进程的作用。


本文转载自 Draveness 技术博客。


原文链接:https://draveness.me/whys-the-design-udp-minimum-header


2020-01-13 17:48935

评论

发布
暂无评论
发现更多内容

linux重要的目录之etc

入门小站

Linux

听说版本会说话,你相信吗?

程序那些事

版本控制 程序那些事 版本管理 版本升级 11月日更

使用MRS CDL实现实时数据同步的极致性能

华为云开发者联盟

延迟 实时数据 MRS CDL 吞吐 实时数据复制

数字人民币的基础:共识与信任!

CECBC

大厂算法面试之leetcode精讲7.双指针

全栈潇晨

LeetCode 算法面试

Android C++系列:Linux信号(一)

轻口味

c++ android jni 11月日更

HBase 调优详细剖析

五分钟学大数据

11月日更

人脸检测实战进阶:使用 OpenCV 进行活体检测

AI浩

Java开发之集成开发环境

@零度

JAVA开发 Java学习 IED

35岁程序员创业,为何选择云原生赛道

行云创新

云计算 创业 程序员 云原生 CEO

Pulsar 在2.8升级过程中需要注意的TopicPolicy问题

Zike Yang

Apache Pulsar 11月日更

【死磕Java并发】-----J.U.C之重入锁:ReentrantLock

chenssy

11月日更 死磕 Java 死磕 Java 并发

Linux 中的 15 个强大的 firewall-cmd 命令,牛牛牛!

Ethereal

Linux 运维 防火墙 Firewalld防火墙

历史上最伟大的一次 Git 代码提交

沉默王二

git

区块链将掀开人类的伟大时代

CECBC

Prometheus Exporter (十一)Kafka Exporter

耳东@Erdong

kafka Prometheus exporter 11月日更

路由器或交换机配置中line vty 0 4到底是什么意思?

Ethereal

交换机 路由器 网络技术

Hadoop、Spark、Hive到底是什么,做算法要不要学?

编程江湖

大数据

对元宇宙 我们期待什么?

CECBC

.NET6新东西--插值字符串优化

喵叔

11月日更

“元宇宙”究竟是什么

华为云开发者联盟

云计算 AI AR vr 云宇宙

什么是IS-IS中间系统到中间系统?网工、运维必看!

Ethereal

网络技术

坐标东京,诚招IT工程师~

马农驾驾驾

软件 软件开发 日本 IT 日语

TMF国际大奖技术揭秘:5G智能动态步长

鲸品堂

5G 计费模式 通信运营商

spark2.0笔记

Clarke

在线文本对比工具

入门小站

工具

Flutter - TabController监听index

坚果

flutter 11月日更

Java中对象的初始化生成过程

编程江湖

Java JAVA开发 java编程

Flutter 异常监控、符号解析及聚合分流实践

贝壳大前端技术团队

flutter 监控 异常 符号化

Webpack 性能之使用 Cache 提升构建性能

编程江湖

大前端 webpack

还有人不知道鸿蒙智联设备认证咋搞?|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

为什么 UDP 头只有 8 个字节(一)_语言 & 开发_Draveness_InfoQ精选文章