ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

UDP 协议详解:从非连接传输原理到 DNS 使用 UDP 的底层原因(tech-interview-for-developer)

UDP 协议详解:从非连接传输原理到 DNS 使用 UDP 的底层原因(tech-interview-for-developer) 教程知识库【免费下载链接】tech-interview-for-developer 신입 개발자 전공 지식 기술 면접 백과사전 项目地址https://gitcode.com/GitHub_Trending/te/tech-interview-for-developer点击查看免费下载本文源自 tech-interview-for-developer 仓库中 Computer Science/Network/UDP.md 的技术笔记系统讲解 UDPUser Datagram Protocol的定义、诞生背景、报文头结构与适用场景并重点剖析DNS 为什么宁可放弃可靠性也要使用 UDP这一高频面试题。读完本文你将能够完整回答 UDP 与 TCP 的本质差异、UDP 报文头的四个字段含义以及 DNS 在 53 号端口选择 UDP、又在何种情况下退回 TCP 的完整逻辑。UDP 是什么定义与基本特征UDP 是User Datagram Protocol用户数据报协议的缩写是一种以数据报datagram为单位处理数据的传输层协议。特征说明全称User Datagram Protocol用户数据报协议处理单位数据报Datagram连接方式非连接型Connectionless通信前无需建立连接可靠性不可靠Unreliable不保证送达、顺序与去重所属层次传输层Transport Layer即 OSI 7 层模型中的第 4 层由于必须把数据拆分成数据报datagram后再逐段发送UDP 属于传输层协议与 TCP 一同工作在 OSI 7 层模型 的传输层。该层通过 TCP / UDP 协议激活通信负责打开端口Port为上层应用程序提供数据传输通道。一句话概括UDP 是非连接型、无可靠性保证的传输层协议以数据报为最小传输单位。TCP 与 UDP 为何诞生IP 与 ICMP 的局限要理解 UDP首先要回答一个根本问题为什么在 IP 之上还需要 TCP 和 UDP1. IP 只支持 Host to Host设备到设备IP 协议的角色仅限于设备到设备Host to Host的寻址与转发。设备之间的移动由 IP 解决但一个设备内部往往运行着大量程序它们同时需要网络通信。此时仅靠 IP 无法区分这份数据到底该交给设备里的哪个程序IP 的能力存在明显边界。2. ICMP 只能通知错误无法处理错误当 IP 传输过程中发生错误时由ICMPInternet Control Message Protocol互联网控制消息协议向运行在网络计算机上的操作系统发送错误消息。但 ICMP 的职责仅限于告知它本身不具备任何应对、补救能力因此必须在比 IP 更高的层次对错误进行实际处理。解决方案端口号 上层协议针对问题 1引入了端口号Port Number用IP 地址 端口号唯一标识设备内的某个应用程序解决了进程级寻址问题针对问题 2引入 IP 之上的上层协议TCP 与 UDP由它们负责错误处理与可靠性补偿。TCP 与 UDP 如何分别处理错误既然 IP 不负责可靠性那么上层协议就要承担这一职责而 TCP 与 UDP 选择了完全不同的路线协议错误处理方式TCP自动补偿数据的丢失分失、重复、乱序等问题保证收发数据的准确送达UDP仅提供与 IP 大致同级的服务是一个简单置于 IP 之上的协议数据可能出错、可能被重传、顺序也可能颠倒这些都需要应用程序Application Layer自行处理TCP 通过一整套机制来实现这种自动补偿——包括 3 way handshake 连接建立 以及 流控制Flow Control与拥塞控制Congestion Control.md)通过接收窗口防止接收端缓冲区溢出、通过拥塞窗口应对网络拥塞从而实现不信任网络上的可靠传输。而 UDP 刻意放弃了这些机制——不做握手、不维护连接状态、不做拥塞控制代价是错误由应用层兜底收益则是极致的轻量与低延迟。为什么要使用 UDP速度与典型场景既然 UDP 不可靠为什么还要用它答案是数据的迅捷性Speed。UDP 的决定性优点是数据处理速度比 TCP 更快正因为快它被广泛用于实时广播Real-time Streaming与在线游戏Online Gaming可以这样理解在网络环境恶劣时UDP 应用如直播、游戏会出现画面卡顿、断连的现象——这正是 UDP 放弃重传、顺序保证等纠错开销所换来的实时性代价。在需要数据最新状态优先于数据完整性的场景如音视频通话、游戏位置同步中旧数据的重传没有意义UDP 的丢就丢了、只要最新的哲学反而更合适。UDP 报文头Header结构UDP 报文头的结构极其精简整个头只有8 字节4 个 16 位字段字段含义说明Source port源端口发送方端口号Destination port目的端口接收方端口号Length长度UDP 报文总长度头部 数据Checksum校验和错误检测Error Detection其中Checksum校验和是一种重复校验Redundancy Check手段通过简单的校验算法保护传输数据的完整性使接收端能够发现传输过程中发生的错误。正是因为头部如此精简UDP 相比 TCP容量更轻TCP 头部通常为 20 字节以上UDP 仅 8 字节发送速度更快协议处理开销更小但无法进行确认应答ACK因此可靠性低于 TCP。可以用一句话定义两者的本质区别UDP 是非连接性Connectionless的TCP 是连接性Connection-oriented的。DNS 为什么使用 UDP应用层协议的传输层选择背景应用层协议必须二选一DNS 是典型的应用层Application Layer协议而根据分层原则所有应用层协议都必须选择 TCP 或 UDP 中的一种作为其传输层协议。表面上看DNS 服务看起来应该可靠而 TCP 可靠Reliable、UDP 不可靠Not Reliable——那么 DNS 为什么反而选用 UDP 呢这正是面试官最常追问的问题。DNS 使用 UDP 的三个核心原因1. 无需维持连接省去 3-way handshake 开销TCP 在正式传输数据前必须通过 3 way handshake 建立连接而 UDP 是无连接的不需要维持连接状态。如果用 TCP那么在真正发送 DNS 数据之前要先完成会话建立Session Establishment的处理发送后还要检查数据是否被接收方收到——这些流程带来的Protocol Overhead协议开销远大于 UDP。2. DNS 请求足够小可以完整放进一个 UDP 报文DNS 请求Request的体量很小完全能够承载在一个 UDP Segment 中。典型的 DNS 查询由**一次 UDP 请求Single UDP Request 服务器的一次 UDP 响应Single UDP Reply**构成一收一发即可完成无需为小数据维护一个完整会话。3. 可靠性可以在应用层补充UDP 本身虽然不可靠Not Reliable但 DNS 所需的可靠性完全可以在应用层自行实现——例如在应用层加入超时Timeout机制、失败后重发Resend请求等。这样既保住了 UDP 的低开销又不牺牲最终的功能正确性。端口号DNS 使用 UDP 的 53 号端口DNS 通过 53 号端口使用 UDP 进行通信。53 号端口也因此成为网络面试与排障中必须记忆的关键端口。什么情况下 DNS 必须改用 TCP虽然 DNS 默认使用 UDP但存在两种必须退回 TCP 的场景Zone Transfer区域传送DNS 服务器之间同步、传输数据时必须使用 TCP。Zone Transfer 指 DNS 服务器之间请求并传递区域数据的过程数据量较大且要求完整可靠数据超过 512 字节当响应数据超过 512 字节经典 DNS 对 UDP 报文的尺寸限制时或响应未被收到时需要改用 TCP 完成传输。这也侧面印证了前文结论UDP 适合小请求、一收一发的场景而大体积、高可靠性的数据传输最终仍要交给 TCP。TCP 与 UDP 核心差异速查表对比维度UDPTCP全称User Datagram ProtocolTransmission Control Protocol连接性非连接型Connectionless连接型Connection-oriented可靠性不可靠错误由应用层处理可靠自动补偿丢失/重复/乱序传输单位数据报Datagram分段Segment连接建立无需握手3-way handshake协议开销小头部 8 字节大头部 ≥20 字节含流控制/拥塞控制典型应用实时广播、在线游戏、DNS 查询网页HTTP、文件传输、邮件等延伸阅读仓库中的相关资源本文是 tech-interview-for-developer 网络知识体系中的一环建议结合以下仓库文档形成完整认知OSI 7 层模型传输层TCP / UDP的定位TCP 3 way handshake 4 way handshakeUDP 为什么不需要连接建立TCP 流控制与拥塞控制UDP 放弃的可靠性机制全貌.md)DNS 解析流程从 hosts 文件、各级缓存到递归查询以上文档共同构成传输层协议主题的完整面试复习链路先用 OSI 模型确定 TCP/UDP 的层次归属再用 TCP 的握手、流控、拥塞控制反衬 UDP 的轻量设计最后通过 DNS 案例理解应用层如何在实际工程中权衡可靠性与性能。赞分享教程知识库【免费下载链接】tech-interview-for-developer 신입 개발자 전공 지식 기술 면접 백과사전 项目地址https://gitcode.com/GitHub_Trending/te/tech-interview-for-developer点击查看免费下载相关推荐Netty框架下UDP数据包丢失问题的分析与解决Netty框架下UDP数据包丢失问题的分析与解决 问题背景 在使用Netty框架开发UDP服务时开发者经常会遇到数据包接收不全的问题。本文通过一个典型场景展开后端通信网络异步编程CANN ops-math 算子开发指南aclnnAddcdiv 与 aclnnInplaceAddcdiv 两段式接口详解CANN ops math 算子开发指南aclnnAddcdiv 与 aclnnInplaceAddcdiv 两段式接口详解 aclnnAddcdiv 与 a教程知识库如何用FinMind快速获取台股数据从安装到实战的完整教程如何用FinMind快速获取台股数据从安装到实战的完整教程 FinMind是一款强大的开源金融数据工具提供超过50种台股相关数据集涵盖技术面、基本面、筹码金融科技数据分析上一篇Dust3D网格生成原理深入理解自动建模算法下一篇vps-comparison项目揭秘如何用Python脚本自动生成专业测试报告创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表