文章目录
前言
在传输层中, 有两个知名协议是需要我们必知必会的, 一个是UDP协议, 一个是TCP协议, 本文我们来主要讲解一下UDP协议, 讲一下UDP报文格式, UDP协议的特点, 以及一些注意事项.
关注收藏, 开始学习吧🧐
1. UDP 的特点
我们可以将 UDP 传输的过程, 想象成寄一封信.
1.1 无连接
知道对端的 IP 地址和端口号就直接进行传输不需要建立连接.
1.2 不可靠传输
没有任何安全机制, 发送端发送数据报以后, 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息.
1.3 面向数据报
应用层交给 UDP 多长的报文, UDP 原样发送, 既不会拆分, 也不会合并. 如果发送端一次发送100个字节, 那么接收端也必须一次接收100个字节. 而不能循环接收10次, 每次接收10个字节.
1.4 缓冲区
UDP 只有接收缓冲区, 没有发送缓冲区.
- UDP 没有真正意义上的 发送缓冲区, 发送的数据会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作.
- UDP 具有接收缓冲区, 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃.
1.5 全双工
UDP 的 socket 既能读, 也能写, 这个概念叫做全双工.
1.6 传输数据大小受限
UDP 协议首部中有一个两个字节 (16位) 的最大长度. 也就是说一个UDP能传输的数据最大长度是64K (包含UDP首部).
那么接下来我们就来学习一下 UDP 的报文格式. 学习一个协议, 我们不仅要了解它的这些特点, 也要了解它的格式是什么.
2. UDP 协议端格式
此处协议格式, 需要发送端, 接收端, 双方都遵守才有用!!!
- 这个图为了排版方便而做了妥协, 真正的 UDP 报文格式应该连续不断的.
- 实际上的报文格式如下图所示.
- 由于端口号只有两个字节来表示, 合法的端口号有效范围就是 0 ~ 65535 不能再大了, 而在实际中, 0 也不会做为一个端口号.
- 而 1 ~ 1024 这个范围的端口号, 系统都赋予了特定的含义, 也不建议我们在开发中使用.
- 16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度. 也就是 64 kb.
- 校验和用来检验数据在网络传输过程中是否出错, 如果校验和出错, 就会直接丢弃.
3. UDP 是如何校验的
那么在进行网络传输时, UDP 是如何进行传输的报文数据是否正确, 没有受到信号干扰之类的呢? 在前文我们讲了, UDP 报文格式中, 有两个字节的的位置留给了校验和, 其作用就是用来检验传输数据是否正确的.
那么 UDP 的校验和具体是怎么实现的? 这里 UDP 是使用了一种简单粗暴的 CRC 校验算法 (循环冗余校验和).
简单来说, 就是将 UDP 数据报中的每个字节, 都依次进行累加. 然后将累加结果, 保存到两个字节的变量中(校验和). 当传输数据时, 就会把原始数据和校验和一起传递过去. 接收方收到数据后, 同时也收到发送端送过来的校验和, 接收端按照同样方式再算一遍, 得到新的校验和, 并与旧的校验和进行比较, 如果正确, 则可以视为数据传输过程中, 没有被干扰, 数据正确.
4. 基于 UDP 的应用层协议
- NFS:网络文件系统
- TFTP:简单文件传输协议
- DHCP:动态主机配置协议
- BOOTP:启动协议(用于无盘设备启动)
- DNS:域名解析协议
当然,也包括你自己写UDP程序时自定义的应用层协议.
总结
✨ 本文主要讲解了 UDP 协议的一些知识, 主要有 UDP 协议特点, UDP 协议报文格式.
✨ 想了解更多计算机网络的知识, 可以收藏一下本人的计算机网络学习专栏, 里面会持续更新本人的学习记录, 跟随我一起不断学习.
✨ 感谢你们的耐心阅读, 博主本人也是一名学生, 也还有需要很多学习的东西. 写这篇文章是以本人所学内容为基础, 日后也会不断更新自己的学习记录, 我们一起努力进步, 变得优秀, 小小菜鸟, 也能有大大梦想, 关注我, 一起学习.
再次感谢你们的阅读, 你们的鼓励是我创作的最大动力!!!!!