Linux学习笔记——UDP协议

news/2024/5/18 13:38:23 标签: udp, linux, 网络, 网络协议, 计算机网络

文章目录

  • UDP协议端格式
  • UDP的特点
  • 面向数据报
  • UDP的缓冲区
  • 基于UDP的应用层协议
  • UDP使用注意事项
  • 16位的UDP校验和的校验原理

UDP协议端格式

在这里插入图片描述

  • 16位源端口号:数据从哪一个端口发出来的,也就是数据从哪一个进程发送出来的。在编写应用层代码的时候,用uint16_t是因为协议的端口号是16位。
  • 16位目的端口号:数据想要到哪一个端口去,也就是数据想要去往哪一个进程。
  • 16位UDP长度:表示整个数据报(UDP头部+UDP数据)的最大长度。通过16位的UDP固定长度的报头,UDP可以正确的提取完整的报文信息。
  • 16位的UDP校验和:校验数据在传输过程中是否失真,数据在传输的过程中需要经过很多链路设备,如果在转发过程中有某个字节损坏,就相当于整个这个数据失真了,如果UDP接收方校验和出错,就会直接将数据丢弃掉,且不会通知发送方。
  • 16位能够表示的数据最大位长度位2^16=65536—>指的是UDP数据的最大长度。

UDP的特点

  • UDP传输的过程类似于寄信
  1. 无连接: 知道对端的IP和端口号就直接进行传输,不需要建立连接。
  2. 不可靠: 没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。
  3. 面向数据报: 不能够灵活的控制读写数据的次数和数量。

面向数据报

    应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。例如:用UDP协议传输100个字节的数据,如果发送端调用一次sendto,发送100个字节;那么接收端也必须调用对应的一次recvfrom,接收100个字节,而不能循环调用10次recvfrom,每次接收10个字节。


UDP的缓冲区

    UDP没有真正意义上的发送缓冲区,调用sendto函数会直接将数据交给内核,由内核将数据传给网络层协议进行后续的传输动作,在网络中进行数据的收发,本质上就是拷贝函数,将数据拷贝给OS内核。即UDP协议会将应用层的数据打上UDP报头后直接递交给网络层。

    UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃。即UDP协议会将去掉UDP报头后的数据递交给应用层,但是UDP协议不能保证数据的有效到达。

    UDP的socket接口既能读也能写,属于全双工通信。


基于UDP的应用层协议

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

UDP使用注意事项

   UDP数据长度是用16位表示,即16位能够表示的数据最大位长度位2^16=65536约等于64K(包含UDP首部),然而64K在当今的互联网环境下, 是一个非常小的数字。如果我们需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。

   当数据在应用层会被打上应用层的报头,在报头中会有数据的长度和两个标识,一个标识用来标识是否属于同一条数据,另一个标识用来标识当前数据在整个完整的数据的什么位置,相当于偏移量。
在这里插入图片描述


16位的UDP校验和的校验原理

   16位的UDP校验和用来检验数据在传输的过程中是否失真,发送方进行填充,接收方进行校验。

   发送填充是将除了校验和的16位比特位,其余的按照16个比特位相加,在相加的过程中如果出现比特位超过16位的情况需要进行回卷,回卷的策略:最高位+低16位计算出来的新值。加完的结果进行反码运算,将反码运算的结果放到16位的校验和当中。接收方是如果校验成功,会将数据交给应用层;如果校验失败,即使数据已经到达了接收方传输层的UDP协议,也会被丢弃,有可能在传输的过程中失真。
在这里插入图片描述


http://www.niftyadmin.cn/n/236051.html

相关文章

uniapp-使用uni.$emit和this.$Router.push跳转传参

刚开始用uniapp,使用uni.$emit和this.$Router.push跳转传参。 有点懵,百度查完一起记录一下(参考好多就不单独放参考链接了)。 一、this.$router三种跳转方式: (1)this.$router.push //向 hist…

GeoDataFrame 应用:公园分布映射至subzone

0 问题描述 我们知道新加坡的monument分布:Monuments-Data.gov.sg 我们又知道新加坡的subzone信息: Master Plan 2019 Subzone Boundary (No Sea) - Datasets - Dataportal.asia 我们希望生成一个 dataframe,表示每一个subzone有几个monumen…

C语言之 单链表1(simply linked list)

单链表 链表优点: 1.按需申请空间,需要就申请,不需要就释放 2.头部或中间插入数据,不需要挪动数据 3.不存在空间浪费 缺点: 1.每次存放一个数据,到要存一个指针去链接后面的数据节点 2.不支持随机访问&a…

根据身份证号码判断是否是未成年人

/**** * 根据身份证号计算年龄 * param str * param currDate * return */ public boolean calcYear(String str, Date currDate){ DateFormat dateFormat new SimpleDateFormat("yyyyMMdd"); Long year Long.par…

Ubuntu 20.04下全新替换Python环境(以python 3.8.12为例)

1、先来看一下安装了那些版本的python python --version #查看python安装版本 python2 --version #查看python2安装版本 python3 --version #查看python3安装版本 2、看一下不同版本python对应的路径 which python which python3 3、卸载python(以免有些同学没有卸载干…

免费图片素材网站收集

本文收集了30多个免费图片素材网站,大部分都可免费下载并商用。 一、PNG图片素材 网址推荐说明51yuansu.com👍👍觅元素,需要登录才可下载588ku.com👍千库网,大部分都需要VIPaigei.com👍&#x…

跟寻智能色选机,一起探索神秘的色彩世界

色选机,一种基于物料颜色、形状或质地差异,再通过光电检测、图像处理等手段来实现物料分选和净化的工业化应用终端,可满足特种物料等多种产品的色选要求,如大米、茶叶、豆类、药材、种子、虾皮、坚果、各类干货、塑料、珠宝、矿石…

【Unity VR开发】结合VRTK4.0:瞬移点

语录: 如果把童年再放映一遍,我们一定会先大笑,然后放声痛哭,最后挂着泪,微笑着睡去。 前言: 移动的限制除了设置移动区域,也可以使用瞬移点:Locomotors.TeleportTargets.Point。 正…