【计算机网络】认识传输层UDP协议

📎 前言

传输层可以负责数据能够从发送端传输接收端. 其中有两个特别重要的协议, 一个是UDP协议, 一个是TCP协议. 本文我们介绍其中的UDP协议.


1. UDP协议的特点

学习一个协议, 当然要掌握这个协议的特性. UDP传输的过程类似于寄信. 特点大概可以分为以下几点.

1.1 无连接

知道对端的IP和端口号就直接进行传输,不需要建立连接

1.2 不可靠

没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;

1.3 面向数据报

应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并

如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节. 而不能循环接收10次,每次接收10个字节。

1.4 全双工

数据传输时, UDP的socket面对双方既能被读取, 也能被写入.

1.5 缓冲区

UDP只有接收缓冲区,没有发送缓冲区.
UDP没有真正意义上的发送缓冲区. 发送的数据会直接交给内核, 由内核将数据传给网络层协议进行后续动作.

UDP具有接收缓冲区, 但是不能保证收到的数据报顺序与发送时的顺序一致; 而且如果缓冲区满了, 再到达的数据会自动丢弃.

1.6 传输时大小受限

UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部).

2. UDP协议端格式

  • 下图为UDP协议报文格式:
    在这里插入图片描述
  • 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度;
  • 如果校验和出错,就会直接丢弃;
  • 由于端口号是16bit长度, 因此合法的端口号长度也就是0~65535. 不会再长了. 而且实际开发中 0 也是不会实际使用的.
  • 而1-1024这些端口号也被系统赋予了特定的含义. 也就是知名端口号

3. UDP校验和实现方法

通过UDP协议报文格式我们看到UDP协议存放着校验数据是否准确的UDP校验和区域. 那么这是如何实现的呢?

UDP为了校验数据的准确性, 使用了一种简单粗暴的方式–CRC校验算法(循环冗余校验和).

简单来说就是把UDP数据报中的每个字节都依次进行累加. 把结果保存到2个字节的变量中得到校验和. 传输数据时与原始数据一起传递过去. 接受方收到数据后按照相同的方式算一遍, 将新的校验和与收到的校验和进行比对. 若相同则认为数据是正确的. 否则则认为传输过程中出错了.

注意: 用CRC校验算法判断校验和是否相同是不严谨的. 但是在实际工程中也是完全够用. 并且在得到数据不同时, UDP会直接丢弃掉. 这同时也是不可靠性的一种体现.

4. 基于UDP协议的应用层相关协议

  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议(用于无盘设备启动)
  • DNS:域名解析协议

当然也包括我们写代码时自定义的协议.


🎉 总结

🎇到这里本篇文章就结束了,感谢大家的阅读。非常希望大家可以提出宝贵的建议!!
这篇文章主要介绍了网络协议中传输层的相关协议–UDP协议。 后续还会介绍到更多关于网络中的相关协议与知识.
🎇本篇文章是博主对自己学习中所学知识的个人理解。日后我也将不断更新自己学习过程以达到温故知新。更多相关知识请关注博主其他文章.
🎇希望大家可以点赞+收藏+评论支持一下噢!
🎇继续保持关注~

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jester.F

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值