一、栗子
补充一下上一期写到的IP协议中的首部校验值的计算,直接举栗子吧
注意一下,计算的时候是16位计算的不是我们想象的8位计算的!
16'h4500+16'h0032+16'h0000+16'h4000(这里注意计算,标志是高三位,不是高四位)+16'h1011+16'h0000(首部校验和在计算的时候是置零计算的)+16'hc0a8+16'h017b+16'hc0a8+16'h0166=16'h24974
由于是16进制计算所以需要把高位再拿回来进行一次计算,如此重复,直至只有16位
16'h0002+16'h4974=16'h4976
然后就是将得到的结果进行取反就是IP首部校验位了
~16'h4976=16'hb689
二、UDP数据格式
讲到这里就会有点犯懵,为什么udp现在才出现。那我们就看看整个数据的格式就明白了
首先大体上数据格式如下
前导码 | 帧开始 | 目标MAC地址 | 源MAC地址 | 帧类型 | IP数据段 | FCS | 帧间距 |
然后就是在IP数据段划分为
IP报头 | IP报文 |
IP报头就是上面讲的东西,IP报文就是udp协议中对udp的设定和数据的传输,也划分两个部分
udp报头 | udp报文 |
udp报头就是对udp协议的设定,udp报文就是我们所说的数据
源端口 | 目的端口 |
长度 | 校验位 |
udp报文(数据) |
源端口:这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口。
目的端口:接收端计算机上 UDP 软件使用的端口,占据 16 位。
长度:该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8。
校验值:该字段占据 16 位,可以检验数据在传输过程中是否被损坏。16位UDP校验和。UDP计算校验和的方法和计算IP数据报首部校验和的方法相似,但不同的是IP数据报的校验和只检验IP数据报的首部,而UDP校验和包含三个部分:UDP伪首部,UDP首部和UDP的数据部分。伪首部的数据是从IP数据报头和UDP数据报头获取的,包括源IP地址,目的IP地址,协议类型和UDP长度,其目的是让UDP两次检查数据是否已经正确到达目的地,只是单纯为了做校验用的。在大多数使用场景中接收端并不检测UDP校验和,由于UDP本身就不在意安全性,所以一般不会进行校验,感兴趣的就上网查查我就不多述了。
三、结束
好了,UDP就讲完了,那就说说他的优缺点之类的话题吧。
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的协议,用于简单、快速地发送和接收数据包。它不保证数据包的顺序或可靠性,但提供了一种基本的传输服务,可以在网络上进行简单的数据传输。
UDP的主要特点包括:
- 无连接:UDP不建立和维持连接,可以直接发送数据,不需要事先建立连接。
- 不可靠性:UDP不保证数据的可靠传输,可能会出现数据丢失、重复或乱序的情况。
- 简单快速:UDP协议简单,没有复杂的连接和传输控制机制,因此处理速度快。
- 面向数据报:UDP的数据传输单位是数据报,数据报具有固定长度,并且独立发送。
- 尽最大努力交付:UDP尽力而为地传送数据报,但不会对数据的传输做出任何承诺。
UDP的应用场景包括:
- 实时应用:如音频、视频流、游戏等需要快速传输的场景。
- 高速数据传输:一些需要高速传输数据的应用,如文件传输、远程登录等。
- 多播和广播:UDP支持多播和广播通信,可以用于实现一对多或一对多的通信。
- 简单服务:一些简单的服务,如DNS查询、SNMP管理等,也可以使用UDP协议。
总的来说,UDP协议适用于对实时性要求较高、对数据的可靠性和顺序性要求较低的应用场景。