【Linux】网络基础之UDP协议

目录

  • 🌈前言
  • 🌸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.mzph.cn/news/1395.shtml

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

相关文章

openwrt 阿里云盘webdav 转成 samba4挂载

需要rclone 与samba4-server rclone 吧webdav挂载到openwrt的某个目录下。 然后通过samba-server 挂载出去。 安装rclone sudo -v ; curl https://rclone.org/install.sh | sudo bash 安装fuse opkg install fuse-utils 软连接 ln -s /usr/bin/fusermount /usr/bin/fuse…

【Kubernetes运维篇】RBAC之创建集群用户管理K8S

文章目录 一、创建zhangsan集群用户赋予uat名称空间管理员权限二、创建lisi集群用户赋予查看所有名称Pod权限 需求:公司新入职两位运维同事,分别是zhangsan、lisi,刚入职肯定不能给K8S管理员权限,所以需要创建两个系统账号&#x…

k8s与集群管理

从docker讲起 终于有人把 Docker 讲清楚了,万字详解! Docker资源(CPU/内存/磁盘IO/GPU)限制与分配指南 默认情况下,Docker容器是没有资源限制的,它会尽可能地使用宿主机能够分配给它的资源。如果不对容器资…

chinese_lite OCR使用教程

目录 一、简介二、环境三、项目地址四、使用说明五、各语言的Demo地址六、效果展示 一、简介 超轻量级中文ocr,支持竖排文字识别, 支持ncnn、mnn、tnn推理 ( dbnet(1.8M) crnn(2.5M) anglenet(378KB)) 总模型仅4.7M 二、环境 python3.6linux/macos/windows 三…

JVM回收算法(标记-清除算法, 复制算法, 标记-整理算法)

1.标记-清除算法 最基础的算法,分为两个阶段,“标记”和“清除” 原理: - 标记阶段:collector从mutator根对象开始进行遍历,对从mutator根对象可以访问到的对象都打上一个标识,一般是在对象的header中&am…

自动化测试框架性能测试报告模板

目录 一、项目概述 二、测试环境说明 三、测试方案 四、测试结果 五、结果分析 总结: 一、项目概述 1.1 编写目的 本次测试报告,为自动化测试框架性能测试总结报告。目的在于总结我们课程所压测的目标系统的性能点、优化历史和可优化方向。 1.2 …

AUTOSAR CP标准的RTE和BSW各模块的设计及开发工作

AUTOSAR(Automotive Open System Architecture)是一种开放的汽车电子系统架构标准,旨在提供一种统一的软件架构,以实现汽车电子系统的模块化和可重用性。 AUTOSAR标准中的两个重要模块是RTE(Runtime Environment&…

【AI底层逻辑】——篇章5(上):机器学习算法之回归分类

目录 引入 一、何为机器学习 1、定规则和学规则 2、算法的定义 二、机器学习算法 1、常见学习方法 2、回归 3、分类 续下篇... 往期精彩: 引入 计算机发明初,专家通过将专业知识和经验梳理成规则输入计算机程序,但是这样跟不上知识…

【运维工程师学习五】数据库之MariaDB

【运维工程师学习五】数据库 1、常用的关系型数据库2、C/S结构3、MariaDB图形客户端4、安装MariaDB5、启动MariaDB及验证启动是否成功6、验证启动——端口7、验证启动——进程8、MariaDB配置文件路径主配置文件解读: 9、MariaDB的配置选项10、MariaDB客户端连接1、在…

设计模式 ~ 单例模式

单例模式 单例模式是一种设计模式,指在确保一个类只有一个实例,并提供一个全局访问点来访问该实例; 前端对于单例模式不常用,但是单例的思想无处不在; 创建之后缓存以便继续使用; 如:弹窗、遮罩…

【Python】json 格式转换 ( json 模块使用 | 列表转 json | json 转列表 | 字典转 json | json 转字典 )

文章目录 一、json 格式转换1、json 模块使用2、代码示例分析 - 列表转 json3、代码示例分析 - 字典转 json json 格式 字符串 与 Python 中的 字典 dict 和 列表 list 变量 可以无缝转换 ; 调用 json.dumps 函数 可以将 Python 列表 / 字典 转为 json ;调用 json.loads 函数 …

Elasticsearch 中的矢量搜索:设计背后的基本原理

作者:Adrien Grand 你是否有兴趣了解 Elasticsearch 用于矢量搜索(vector search)的特性以及设计是什么样子? 一如既往,设计决策有利有弊。 本博客旨在详细介绍我们如何选择在 Elasticsearch 中构建矢量搜索。 矢量搜索…

python和django中安装mysqlclient失败的解决方案

在Pychram中和pip中安装mysqlclient都不成功,只能直接下载二进制包进行安装了,下载页面中根据python的版本选择对应WHL包下载,下载地址 mysqlclient PyPIhttps://pypi.org/project/mysqlclient/#files 通过pip命令进行安装 pip install d:\…

考研线性代数考点总结

一.行列式 1.数字型行列式 数字行列式的计算含零子式的分块计算 2.行列式的性质 |A||A^T|交换行列,行列式的值变号含公因子的提出或乘进去把某行的K倍加到另一行,行列式的值不变。行列式可以根据某一行或某一列分拆 3.抽象行列式 n阶或高阶行列式 常…

《微服务架构设计模式》第十三章 微服务架构的重构策略

微服务架构的重构策略 一、重构到微服务需要考虑的问题1、为什么重构2、重构形式3、重构策略 二、设计服务与单体的协作方式三、总结 一、重构到微服务需要考虑的问题 1、为什么重构 单体地狱造成的业务问题: 交付缓慢充满故障的软件交付可扩展性差 2、重构形式 …

Visual Studio 向工程中添加现有文件夹

前言: 在创建C#类库(dll)工程后,需要把现有的C#文件添加进工程中 步骤1.将所有文件夹复制到工程中 步骤2. 点击这个图标,显示所有文件夹 工程目录下的所有文件夹都会被显示出来 选中需要添加的文件夹,右…

Linux安装MongoDB数据库,并内网穿透远程连接

文章目录 前言1. 配置Mongodb源2. 安装MongoDB3. 局域网连接测试4. 安装cpolar内网穿透5. 配置公网访问地址6. 公网远程连接7. 固定连接公网地址8. 使用固定地址连接 前言 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富&…

虚拟化容器化与docker

虚拟化容器化与docker 基本概念虚拟化分类虚拟化实现主机虚拟化实现容器虚拟化实现命名空间namespace空间隔离 控制组群cgroup资源隔离 LXC(Linux Container) docker与虚拟机 基本概念 物理机: 实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理…

初识Redis——Redis概述、安装、基本操作

目录 一、NoSQL介绍 1.1什么是NoSQL 1.2为什么会出现NoSQL技术 1.3NoSQL的类别 1.4传统的ACID是什么 1.5 CAP 1.5.1 经典CAP图 1.5.4 什么是BASE 二、Redis概述 2.1 什么是Redis 2.2 Redis能干什么 2.3 Redis的特点 2.4 Redis与memcached对比 2.5 Redis的安装 2.6 Docker安装 三…

二、学习回归 - 基于广告费预测点击量

山外风雨三尺剑 有事提剑下山去 云中花鸟一屋书 无忧翻书圣贤来 1.设置问题 以Web广告和点击量的关系为例来学习回归。 前提:投入的广告费越多,广告的点击量就越高。 根据以往的经验数据,可以得到下图: 那么假设我要投200块的广…