【Linux】网络基础之UDP协议

news2025/1/31 7:36:52

目录

  • 🌈前言
  • 🌸1、传输层
  • 🌺2、重谈端口号
    • 🍨2.1、端口号范围划分
    • 🍧2.2、认识知名端口号
  • 🍀3、UDP协议
    • 🍨3.1、UDP协议报文结构
    • 🍩3.2、UDP协议的特点
    • 🍪3.3、基于UDP的应用层协议

🌈前言

这篇文章给大家带来传输层种UDP协议学习!!!


🌸1、传输层

传输层是网络协议栈中重要的一层结构,前面所讲的应用层是调用下层协议来完成数据传输的

【传输层 – 百度百科】

  • 传输层:主要负责向两个主机进程之间的通信提供服务,负责数据能够从发送端传输接收端

  • 传输层常用的二个协议分别是UDP(用户数据报协议)TCP(传输控制协议)

  • 传输层提供逻辑连接的建立、传输层寻址、数据传输、传输连接释放、流量控制、拥塞控制、多路复用和解复用、崩溃恢复等服务

  • 传输层中的大部分服务都是由TCP提供的,而UDP无链接、不靠谱、面向数据报的,不用考虑超时重传、流量控制、拥塞控制等服务

在这里插入图片描述


🌺2、重谈端口号

端口号(Port)标识了一个主机上进行通信的不同的应用程序(进程)

端口号

  • 源端口号:标识发送主机上进行网络通信的某个进程(具有唯一性)

  • 目的端口号:标识接收主机上进行网络通信的某个进程(具有唯一性)

IP地址

IP地址是网络层IP协议中,用来标识网络中不同主机的地址(具有唯一性)

  • 源IP地址:标定广域网(公网)中主机唯一性的地址(发送数据方的IP地址)

  • 目的IP地址:标定广域网(公网)中主机唯一性的地址(接收数据方的IP地址)

  • 通过IP地址和端口号可以标定网络中某台主机上的某个进程(具有唯一性)

在这里插入图片描述


在TCP/IP协议中,用 “源IP”,“源端口号”,“目的IP”, “目的端口号”,“协议号” 这样一个五元组来标识识别一个通信

下图解析

  • 图中有三台主机,最左边这台是服务器,其余二台都是主机

  • 客户端A在浏览器中启动了二个网页,它们IP地址一样,但是每个网页的端口号都不同,服务器可以根据传输层报文中的端口号对网页进行区分,从而构建不同的线程对其进行服务

  • 客户端B只是单纯的起了一个网页,虽然它的端口号和客户端A的某个网页相同,但是它们的IP地址不同,说明它们不是相同的主机

在这里插入图片描述


🍨2.1、端口号范围划分

端口号分为:知名端口号和动态端口号

  • [0, 1023]:知名端口号HTTP, FTP, SSH等这些广为使用的应用层协议,他们的端口号都是固定的

  • [1024, 65535]:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围分配的

  • 注意:如果客户端程序绑定了知名端口号,可能会导致主机中的某些服务后续启动失败启动当前的客户端失败等问题,因为端口号具有唯一性


🍧2.2、认识知名端口号

有些服务器是非常常用的,为了使用方便,人们约定一些常用的服务器,都是用以下这些固定的端口号

  • ssh服务器,使用22端口号
  • ftp服务器,使用21端口号
  • telnet服务器,使用23端口号
  • http服务器,使用80端口号
  • https服务器,使用443端口号
  • 我们自己写一个程序使用端口号时,要避开这些知名端口号

  • 一个进程可以绑定多个端口号,但是一个端口号只能被一个进程绑定(唯一性)

下面的命令, 可以查询知名端口号的服务

cat /etc/services

在这里插入图片描述


🍀3、UDP协议

🍨3.1、UDP协议报文结构

下图为UDP协议报文的组成结构

  • UDP报文的前64位(8字节)是UDP报文的首部,下面的数据是有效载荷,如果上层协议有数据则会放在这

  • 16位UDP长度:表示整个UDP数据报(UDP首部 + UDP有效载荷(数据))的最大长度

  • 16位UDP检验和:校验整个UDP的报文,包括UDP首部UDP有效载荷传输的过程中是否损坏,如果出错了则会直接丢弃数据包了(可选)

  • 数据(有效载荷):应用层需要网络传输的数据(write、sendto、send接口等等)将会存放在这

在这里插入图片描述


UDP报文在代码中的逻辑结构

  • 由于操作系统是C语言实现的,那么UDP报文就是一个结构化数据(结构体)

  • UDP报文的相关字段就是通过结构体进行保存

  • 我们所知的字段有源端口号、目的端口号、DUP数据报总长度和校验和

  • 最后的数据(有效载荷),是应用层通过调用sendto、sendmsg系统调用传输到下层UDP协议中的

UDP首部在内核中的表示方式,如下代码:

struct udphdr 
{
    __u16   source;  // 源端口
    __u16   dest;    // 目标端口
    __u16   len;     // 数据包长度
    __u16   check;   // 校验和
};

sendto系统调用的调用链:


🍩3.2、UDP协议的特点

特点:

  • 无连接:只要知道接收方的IP地址和端口号就能直接进行网络传输,不需要建立连接(三次握手)再通信

  • 不可靠:没有确认应答机制,没有超时重传机制等等;如果因为网络故障发送失败,UDP协议也不会给应用层返回任何错误信息

  • 面向数据报:不能够灵活的控制读写数据的次数和数量(不能将数据报拆分开来发送,只能一次性发送

  • 注意:不可靠是一个中性词,要看场景来选定协议,如果对比赛进行转播,那么肯定使用udp协议,因为丢包了只会卡住一会,如果使用tcp协议,丢包了,会直接掉线


面向数据报:

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

  • 如果发送端调用一次sendto,发送200个字节,那么接收端也必须调用对应的一次recvfrom,接收200个字节;且不能循环调用10次recvfrom,每次接收20个字节

  • 面向数据报不像面向字节流一样可以拆分和分段的发送,只能一次性发完全部数据


UDP缓冲区:

  • UDP其实没有真正意义上的发送缓冲区,因为它是不可靠的,直接调用sendto将网络传输的数据拷贝给内核,由内核将数据传给网络层协议进行后续的传输动作

  • UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报文的顺序发送UDP报文的顺序一致数据报在网络传输中可能会由于路由选择的原因,走的比较慢或数据翻转等原因

  • 如果缓冲区满了,再到达的UDP数据就会被丢弃


UDP协议注意事项

  • UDP协议首部中的每个字段占16位的最大长度(2字节),也就是说一个UDP能传输的数据最大长度是64K包含UDP首部的全部字段

  • 如果使用UDP协议需要传输的数据超过64K,就需要在应用层手动的分包多次发送,并在接收端手动拼装(这样就跟TCP协议面向字节流一样需要拼接合并了


🍪3.3、基于UDP的应用层协议

  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议(用于无盘设备启动)
  • DNS:域名解析协议
  • 也包括自己写的UDP程序时自定义的应用层协议

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/763232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL篇-03_SQL必知必会-13_组合查询

SQL106 将两个 SELECT 语句结合起来(一) 描述 表OrderItems包含订单产品信息,字段prod_id代表产品id、quantity代表产品数量 prod_id quantity a0001 105 a0002 100 a0002 200 a0013 1121 a0003 10 a0003 19 a0003 5 BNBG 10002 【问题】将两…

移动卫生间有人无人自动采集方案

互联网和物联网技术的不断普及,以及新技术的不断更新迭代,为我们的生活带来了诸多便利和改变。在这个信息时代,我们希望通过采用更先进的技术来建设智慧厕所,以满足人们对卫生设施的高品质需求。其中,物联网技术、传感…

python和pip安装+flask基本用法小白教程

安装python 3.8.2: 直接点击下方链接下载: 链接:https://pan.baidu.com/s/11Jo1I8GjnKQSgIv-5xSrTw 提取码:hg5h 安装pip: 在下载安装完python配置完环境变量后,打开cmd输入下面命令: pyt…

一文了解什么是ISO 9001认证,以及在静态分析和代码质量领域有哪些通过此认证的工具

ISO 9001是一个国际标准,被广泛应用于不同规模、不同类型的企业,它为企业的质量管理体系(QMS)提供了具体的要求和标准。 最新版本的ISO 9001发布于2015年,旨在帮助企业改善客户体验、满足法规要求、管理供应商和合作伙…

基于STM32设计的老人监护系统

一、设计需求 1.1 项目背景 21世纪以来,随着科技的发展,在人们的生活水平不断的提升的同时中国老龄化人口问题日益严重,再加上社会经济的发展。许多子女外出打工,使得越来越多的空巢老人得不到及时有效的关心与治疗。因此,本系统以老人为中心,并设定出许多相关的功能监…

Java 并发编程

一、开篇 本篇只要是对Java基础中的并发编程进行巩固、知识回顾。 几乎所有的资料在讲述本篇时都是先讲一下进程和线程的区别。在此将不详细介绍,只介绍了解以下几点区别: 1、进程大、线程小,一个程序至少有一个进程,一个进程至…

原型模式-克隆一个对象

在开发一个界面的时候,里面有多个Button,这些对象的属性内容相似。如果一个个实例化Button对象,并设置其属性,那么代码量将会增多。 通过一个原型对象克隆出多个一模一样的对象,该模式被称为原型模式。 图 原型模式 …

Vue-Router相关理解3

路由跳转的replace方法 编程式路由导航&#xff08;不用<router-link></router-link>&#xff09; src/components/Banner.vue <template><div class"col-xs-offset-2 col-xs-8"><div class"page-header"><h2>Vue R…

Nginx配置白名单访问

一、背景 在项目运行的时候&#xff0c;需要设置特定的访问权限&#xff0c;以拒绝其他可能存在的恶意访问。 二、配置 2.1、关键字 允许访问关键字&#xff1a;allow 屏蔽访问关键字&#xff1a;deny 2.2、作用域 作用域如下&#xff1a; http&#xff1a;所有网站屏蔽I…

MATLAB算法-数据挖掘算法详解,

Matlab是一种功能强大的数据分析和数据挖掘工具,提供了丰富的数据挖掘算法和函数。下面将介绍一些最著名的数据挖掘算法,并提供相应的代码示例。 K均值聚类算法(K-means Clustering): K均值聚类是一种常用的无监督学习算法,用于将数据集划分为K个不同的簇。以下是在Matla…

ElasticSearch学习(1) 基础操作

目前使用的ES版本是7&#xff0c;借用下其他的文档。说明下ES的存储。 ES首先是index 对应的是数据库&#xff0c;7以前有type的概念&#xff0c;7没有type的概念&#xff0c;也就是说现在ES7 一个库(index)只有一个表(type)。 一个表(type)可以有多行(doc) 一行(doc)有多列…

上手vue2的学习笔记4之搭建vue环境

一、安装node环境 上手vue2的学习笔记2之安装nodejs和npm的踩坑经历 node -v //查看是否安装成功 npm -v //查看npm是否安装成功二、搭建vue项目环境 参考链接1&#xff1a;vue(2.0版本)安装步骤教程 参考链接2: MacOS 搭建一个vue项目(完整步骤) 1、安装vue2 npm install …

驱动程序设计 平台驱动、Linux内存映射、Linux中断、按键中断控制 7.13

平台驱动 模块驱动&#xff1a; 一对多管理&#xff0c;系统管理效率低 加载卸载方便 设备模型&#xff1a;分层分级的管理4个重要的组成部分&#xff1a;class device driver bus&#xff08;总线&#xff09;层级&#xff1a;kobj-->kset/kobj-->kset-->kset class…

资产管理简单实用技巧,让你告别加班!

资产管理系统在现代商业环境中扮演着关键的角色。随着企业资产规模的不断扩大和多样化&#xff0c;有效地管理和跟踪资产变得至关重要。 随着企业竞争的加剧和资产管理的重要性日益凸显&#xff0c;资产管理系统将继续在各行各业中发挥着不可或缺的作用。无论是生产设备、办公设…

BottomSheetDialog无法设置圆角的解决问题

1、设置background为透明 <style name"BottomSheetDialog" parent"Theme.Design.Light.BottomSheetDialog"><item name"bottomSheetStyle">style/bottomSheetStyleWrapper</item></style><style name"bottomShe…

Redis的缓存问题

说起Redis的缓存&#xff0c;我们知道前端发出的请求到后端&#xff0c;后端先从Redis中查询&#xff0c;如果查询到了则直接返回&#xff0c;如果Redis中未查询到&#xff0c;就去数据库中查询&#xff0c;如果数据库中存在&#xff0c;则返回结果并且更新到Redis缓存当中&…

西贝柳斯Sibelius2023旗舰版曲谱大师必备音乐软件

乐谱太复杂&#xff0c;打起来太费时间&#xff1f;革命性的省时功能&#xff0c;如磁性布局和动态分谱&#xff0c;能够快速创作复杂的乐谱。音色库太简陋&#xff0c;找起来麻烦&#xff1f;收藏丰富的音色库供您直接使用&#xff0c;涵盖最广泛的专业级乐器&#xff0c;支持…

RK3399/RK3588+pcie+Zynq 多核架构可穿戴设备设计方案

在很多领域&#xff0c;人们对可穿戴设备的可靠性有着非常高的要求。这些使用场景 不仅丰富多样&#xff0c;而且复杂多变。这使得可穿戴设备不仅需要应对应用和系统本身 的状态变化&#xff0c;也要考虑到设备所处环境所带来的异常情况。所以&#xff0c;针对不同安全 等级…

Windows搭建SVN环境

VisualSVN Server下载 https://www.visualsvn.com/products VisualSVN Server安装创建仓库创建项目创建用户创建组项目分配组VisualSVN下载 https://www.visualsvn.com/products VisualSVN安装项目检出项目检出路径&#xff1a;https://changwq:8443/svn/dev/InterfaceManage 项…

【C++初阶】类和对象(上)

文章目录 前言一、类的引入二、类的定义三、类的访问限定符及封装四、类的作用域五、类的实例化六、类对象模型七、this指针 前言 &#x1f4d6;面向过程 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。以…