推广做网站南充,程序开发环境,泰安网络安全工程师培训,免费个人建站空间UDP的详细解析 文章目录UDP的详细解析UDP 概述UDP的首部格式检验和的计算抓包测试参考TCP/IP运输层的两个主要协议都是互联网的正式标准#xff0c;即#xff1a;用户数据报协议UDP (User Datagram Protocol)传输控制协议TCP (Transmission Control Protocol)
按照OSI的术语…UDP的详细解析 文章目录UDP的详细解析UDP 概述UDP的首部格式检验和的计算抓包测试参考TCP/IP运输层的两个主要协议都是互联网的正式标准即用户数据报协议UDP (User Datagram Protocol)传输控制协议TCP (Transmission Control Protocol)
按照OSI的术语两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元 TPDU.但在TCP/IP体系中根据所使用的协议是TCP或UDP,分别称之为TCP报文段或UDP用户数据报。
UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP报文后不需要给出任何确认。虽然UDP不提供可靠交付但在某些情况下UDP却是一种最有效的工作方式。
下表为一些应用和应用层协议主要使用的运输层协议。
应用应用层协议运输层协议名字转换DNS域名系统UDP文件传送TDTP简单文件传送协议UDP路由选择协议RIP路由选择协议UDPIP地址配置DHCP动态主机配置协议UDP网络管理SNMP简单网络管理协议UDP远程文件服务NFS网络文件系统UDPIP电话专用协议UDP流式多媒体通信专用协议UDP多播IGMP网际组管理协议UDP电子邮件SMTP简单邮件传送协议TCP远程终端接入TELNET远程终端协议TCP万维网HTTP超文本传送协议TCP文件传送FTP文件传送协议TCP
UDP 概述
用户数据报协议UDP只在IP的数据服务之上加了很少一点功能这就是复用和分用的功能以及差错检测的功能。UDP的主要特点是 UDP是无连接的即数据发送之前不需要建立连接 UDP使用尽最大努力交付即不保证可靠交付因此主机不需要维持复杂的连接状态表。 UDP是面向报文的。UDP对应用层交下来的报文既不合并也不拆分而是保留这些报文的边界。这就是说应用层交给UDP多长的报文UDP就照样发送UDP一次交付一个完整的报文。若报文太长UDP把它交给IP层后IP层在传送时可能要进行分片。 UDP没有拥塞控制 网络出现拥塞不会使源主机的发送速率降低。这对某些实时应用使很重要的。 UDP 支持一对一、一对多、多对一和多对多的交互通信 UDP 的首部开销小只有8个字节比TCP的20个字节的首部要短。
UDP的首部格式
用户数据报UDP有两个字段数据字段和首部i段。首部字段只有8个字节由四个字段组成每个字段的长度都是两个字节。
源端口 源端口号。在需要对方回信时选用。不需要时可用全0目的端口 目的端口号。这在终点交付报文时必须使用长度 UDP 用户数据报的长度其最小值时8仅有首部检验和 检测UDP用户数据报在传输中是否有错。有错就丢弃。
当接收方UDP发现收到的报文中的目的端口号不正确即不存在对应于该端口号的应用进程就丢弃该报文并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。 检验和的计算
UDP用户数据报首部中检验和的计算方法有些特殊。在计算检验和时要在UDP用户数据报之前加12个字节的伪首部。伪首部既不向下传送也不向上递交而仅仅是为了计算检验和。通过上面那幅图我们可以看到伪首部中的字段信息
32位源IP地址32位目的IP地址8位保留字节置08位传输层协议号TCP是6UDP是1716位报文长度首部数据
检验和是如何工作的我们可以通过观察下图 我们对应着上面这副图看其实计算这个检验和的过程其实就是将加上伪首部后的数据按照每16位相加求和。将求和后的结果取反与UDP自带的检验和相与若得到的结果是全1的则说明数据传输无误。刚好这里的检验和在UDP是以2字节存储的刚好是12位。
若在求16位求和结果时发生进位那么需要进行回卷。计算的过程可以参考这篇 回卷计算。
读到这里不知道大家会不会有问题就是为什么UDP在计算检验和的时候需要加上伪首部。
对于这个问题最简单的回答就是出于历史原因。如下图David P. Reed的解释 前面这个不好翻译在StackOverflow中找到了一个相关的解答 抓包测试
UDP有着很广泛的应用场景。它的特点就像上面看到的很简单没有流量控制以及差错重传等特点作为传输层的协议常常被拿来和tcp协议比较。所以广泛应用于qq聊天视频网络电视迅雷等场景。缺点就是容易丢包。
我拿qq聊天来抓个UDP数据包试试。
首先通过终端查看本机的ip地址和物理地址 我们首先打开抓包工具然后用qq给自己的Android手机发送聊天可以发现抓包工具成功捕获信息如下图。 我们查看一下第二条记录中的详细信息 现在我们再去看看所有qq是否有占用52652这个端口。用netstat -ano列出所有占用的端口号同时用任务管理器查看qq的PID。查看的结果如下图发现52652这个端口确实被qq所占用。 参考 UDP 检验和原理 为什么校验时要加上IP信息的伪首部 UDP/TCP 中使用伪标头的意义是什么 《计算机网络 第7版》