共计 1263 个字符,预计需要花费 4 分钟才能阅读完成。
UDP 概述
用户数据报协议 UDP 只在 IP 的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及查错检测的功能
UDP 的主要特点
UDP 是无连接的,即发送数据之前不需要建立连接 (发送数据结束时也没有连接可释放),减少了开销和发送数据之前的时延
UDP 使用尽最大努力交付,即不保证可靠交付,主机不需要维持复杂的连接状态表
UDP 是面向报文的,发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界
UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的
UDP 支持一对一、一对多、多对一和多对多的交互通信
UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短
《PHP 面试问答》https://github.com/colinlet/P… 结合实际 PHP 面试,系统的汇总面试中的各种各样的问题,尝试提供简洁准确的答案。如果你在 PHP 面试中遇到问题,欢迎提 Issues 交流。包含网络协议、数据结构与算法、PHP、Web、MySQL、Redis、Linux、安全、设计模式、架构、自我介绍、离职原因、职业规划、准备问题等部分 如果觉得不错欢迎 star 关注,正在不断持续更新中~~
存在问题
某些实时应用需要使用没有拥塞控制的 UDP,但很多的源主机同时都向网络发送高速率的实时视频流时,网络就有可能发生拥塞,导致大家都无法正常接收。
还有一些使用 UDP 的实时应用,需要对 UDP 的不可靠传输进行适当的改进,以减少数据的丢失。应用进程可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错或重传已丢失的报文
UDP 的首部格式
用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段很简单,只有 8 个字节,由四个字段组成,每个字段都是两个字节
首部字段
源端口 源端口号。在需要对方回信时。不需要时可用全 0
目的端口 目的端口号。这在终点交付报文时必须使用
长度 UDP 用户数据报的长度,其最小值是 8(仅有首部)
检验和 检测 UDP 用户数据报在传输中是否有错。有错就丢弃
端口分用
当运输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口,上交最后的终点——应用进程
如果接受方 UDP 发现收到的报文中的目的端口号不正确 (即不存在对应于该端口号的应用程序),就丢弃该报文,并由网际控制报文协议 ICMP 发送“端口不可达”差错报文给发送方
伪首部
UDP 用户数据报首部中检验和的计算方法有些特殊。在计算检验和时,要在 UDP 用户数据报之前增加 12 个字节的伪首部。所谓“伪首部”是因为这种伪首部并不是 UDP 用户数据报真正的首部。只是在计算检验和时,临时添加在 UDP 用户数据报前面,得到一个临时的 UDP 用户数据报。检验和就是按照这个临时用户数据报来计算的。伪首部既不向下传也不向上递交,而仅仅是为了计算检验和
本文转载自 枫叶林博客,《用户数据报协议 UDP》https://blog.maplemark.cn/201…