UDP协议介绍

文章目录

  • 一、端口号
  • 二、UDP协议
    • 1.UDP协议格式
    • 2.UDP协议的特点
    • 3.UDP缓冲区
  • 三、UDP注意事项

一、端口号

端口号是在网络中标识一台主机上进行通信程序的唯一性的,在TCP/IP协议中,用源IP源端口号目的IP目的端口号协议号这样一个五元组来标识一个通信。

在这里插入图片描述
端口号是有规则划分的,0-1023是知名端口号,像HTTP、FTP、SSH等这些广为使用的应用层协议,它们的端口号都是固定的。1024-65535是操作系统动态分配的端口号,这些是客户端程序的端口号,操作系统就是在这个范围内分配给客户端的。

一些知名的端口号比如:ssh服务器使用22端口、ftp服务器使用21端口、telnet服务器使用23端口、http服务器使用80端口、https服务器使用443端口。在Linux中,我们可以在/etc/services文件中查看知名端口号。

在这里插入图片描述

需要注意的是,一个进程可以绑定多个端口号,但是一个端口号不能被多个进程同时绑定。所以我们在自己写服务的时候,一定要避开这些知名端口号,否则我们的服务就会启动不起来。

二、UDP协议

1.UDP协议格式

UDP协议格式如下图所示,由16位源端口号、16位目的端口号、16位UDP长度、16位UDP校验和、数据正文这几部分组成。UDP的报头长度是确定的,16位UDP长度表示整个数据报(UDP首部+UDP数据)的最大长度。16位UDP校验和是用来校验的,如果校验和出错,那么UDP整个数据报就会被直接丢弃。

在这里插入图片描述

2.UDP协议的特点

  1. 无连接:UDP协议是无连接的,只需要知道对端的IP地址和端口号就可以直接进行传输,不需要建立连接。
  2. 不可靠传输:没有确认机制,没有重传机制,如果因为网络故障该段无法发送到对方,UDP协议层也不会给应用层返回任何错误信息。不可靠传输是UDP协议的特点,虽然看起来像是缺点,但也因不可靠传输让UDP的维护成本比较低,因为它不需要为了可靠传输而做更多其它工作。
  3. 面向数据报:面向数据报也是UDP协议的另一个特点。所谓面向数据报意思就是,应用层交给UDP多长的报文,UDP原样接收,既不拆分,也不合并。可以简单理解为UDP要么不接受报文,一旦接收了报文,一定是接收完整的报文。举个例子,比如说发送端调用一次sendto函数发送100个字节,那么接收端也必须调用一次recvfrom函数接收100个字节,接收端不可以循环调用10次recvfrom函数每次只接收10个字节。这就有点像寄信,别人给我们寄来一封信,我们接收到的一定是一封完整的信,而不是每次只读取几个文字。

3.UDP缓冲区

UDP协议没有真正意义上的发送缓冲区,我们调用sendto函数通过网络发送数据时,本质上其实并不是直接就能通过网络发送到对端,而是将我们的数据发送到操作系统内核中,操作系统内核再根据自己的发送策略在合适的时机通过网络将我们的数据发送给对端。UDP其实根本不需要所谓的发送缓冲区,因为UDP协议发送的数据格式太简单了,它只需要将数据发送给操作系统内核,操作系统内核直接给它添加上定长的数据报头,添加完成之后操作系统就直接将数据交给网络协议栈到达网络层了,不需要维护可靠性不需要暂时将数据暂存起来等操作。

UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP数据报的顺序和发送UDP数据报的顺序一致,因为在网络层面这些UDP数据报可能先出发但中途耽误了一些时间,所以接收缓冲区无法保证这个顺序和发送时的顺序一致。如果我们需要关心数据报的顺序,只能在发送端应用层维护每一个数据报的发送编号,到了接收端再根据数据报的发送编号进行重新排序。如果UDP的缓冲区满了,再到达的UDP数据就会被丢弃。

三、UDP注意事项

UDP协议首部中有一个16位的最大长度,也就是说一个UDP能传输的数据最大长度是64k(包含UDP首部),然后64k在当今互联网中是一个非常小的数字,所以如果我们需要传输的数据超过64k,就需要在应用层手动分包,多次发送,并在接收端手动拼接。

在一些直播场景中,一般采用的是UDP协议,原因是如果有大量的观众在观看直播,每个用户都为其维护一个连接的话,用户量一旦大起来,服务器可能会承受不住。所以UDP的无连接特点在这种场景下非常适用,不需要再给每个用户建立连接,即使UDP是不可靠传输,在传输过程中可能会出现丢包等情况,但这种情况最多导致直播过程中画面模糊、声音变卡,而这些相比较于服务器崩溃来说是可以接受的,所以采用UDP协议比较合适。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[工具]Pytorch-lightning的使用

Pytorch-lightning的使用 Pytorch-lightning介绍Pytorch-lightning与Pytorch的区别Pytorch-lightning框架的优势Pytorch-lightning框架 重要资源 Pytorch-lightning介绍 这里介绍Pytorch_lighting框架. Pytorch-lightning与Pytorch的区别 Pytorch-lightning可以简单的看作是…

计算机图形学 | 实验六:旋转立方体

计算机图形学 | 实验六:旋转立方体 计算机图形学 | 实验六:旋转立方体Z-缓冲GLM函数库PVM矩阵PVM矩阵的使用 华中科技大学《计算机图形学》课程 MOOC地址:计算机图形学(HUST) 计算机图形学 | 实验六:旋转…

携创教育:自考、成考、开放大学几年能够毕业拿证?

目前,国家承认的成人学历提升的形式只有3种,分别是自考,成考,开放大学。 ▼各学历形式拿证时间▼ ★自学考试 自考没有入学考试,只需要参加相应的课程考试,所有课程考试合格后,符合毕业条件即可…

【Linux】usb游戏手柄测试、编程

1、简述 在ubuntu18.04下使用usb游戏手柄,之前联系客服,客服回答不清楚是否支持linux,因此采购一款北通蝙蝠2的手柄来测试 2、测试 2.1 测试环境 系统:Ubuntu18.04 正常电脑系统ubuntu中都是自带手柄驱动的joystick,即内核配置已添加选项:Joysticks interface和Joys…

制作帮助中心过程中常见的误区与解决方法?

制作帮助中心是为了帮助用户了解产品和解决问题的重要手段。然而,在制作的过程中,我们可能会遇到一些误区,这些误区可能会导致我们的帮助中心无法达到预期的效果。因此,在本文中,我们将探讨制作帮助中心过程中常见的误…

try(){}用法try-with-resources、try-catch-finally

属于Java7的新特性。 经常会用try-catch来捕获有可能抛出异常的代码。如果其中还涉及到资源的使用的话,最后在finally块中显示的释放掉有可能被占用的资源。 但是如果资源类已经实现了AutoCloseable这个接口的话,可以在try()括号中可以写操作资源的语句(…

Oracle SQL优化相关数据项

要掌握SQL调优技术,就需要能读懂SQL语句的执行计划,要想读懂SQL语句的执行计划,不仅需要准确理解SQL语句执行计划中各操作及其含义,还需要准确理解SQL语句执行计划中各数据项的含义。本书第7章中,已经对SQL语句执行计划中各个操作的含义做了详尽的阐述,本章中,我们将对S…

(4)Qt——基本组件

目录 1. Designer 设计师** 2. Layout 布局*** 3. 基本组件 3.1 QWidget** 3.2 ui指针 3.3 QLabel 标签** 3.4 QAbstractButton 按钮类** 3.5 QLineEdit 单行文本输入框** 3.6 QComboBox 组合框** 3.7 一组与数值相关的组件* 1. Designer 设计师** Designer是一款独立的用于设计…

ShardingSphere系列四(Sharding-JDBC内核原理及核心源码解析)

文章目录 1. ShardingSphere内核解析1.1 解析引擎1.2 路由引擎1.3 改写引擎1.4 执行引擎1.5 归并引擎 2. ShardingSphere的SPI扩展点2.1 SPI机制2.2 ShardingSphere中的SPI扩展点2.3 实现自定义主键生成策略 3. ShardingSphere源码 1. ShardingSphere内核解析 ShardingSphere虽…

SuperMap GIS基础产品桌面GIS FAQ集锦(2)

SuperMap GIS基础产品桌面GIS FAQ集锦(2) 【iDesktop】【10.2.1】【11.0.1】 请问在 iDesktop 桌面端对线数据集进行打断线操作后,打断的线不显示是什么原因呢? 【问题原因】 当时操作的线数据集空间索引存在异常,导致…

PostgreSQL 新闻速递 谷歌基于POSTGRESQL 兼容数据库提供更大规模的数据库服务

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

初级算法-贪心算法

主要记录算法和数据结构学习笔记,新的一年更上一层楼! 初级算法-贪心算法 一、分发饼干二、摆动序列三、最大子序和四、买卖股票最佳时机五、跳跃游戏六、跳跃游戏二七、k次取反后最大化的数组和八、加油站九、分发糖果十、柠檬水找零十一、根据身高重建…

David Silver Lecture 4: Model-Free Prediction

1 Introduction 任务:第三章使用动态规划方法,解决known的MDP问题,这章通过model free prediction对一个unknown的MDP估计他的value function。下一章通过Model free control的方法针对一个unknown的MDP optimise value function。 2 Monte…

Android类似微信聊天页面教程(Kotlin)五——选择发送图片

前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …

paddleLite在Android部署初体验(环境问题)

paddleLite初体验(环境问题) Android Studio下载Paddle Lite Demo打开项目环境配置下载到手机 Paddle Lite是百度开发的一种方便部署的深度学习推理框架,笔者最近想接触一些模型部署相关项目,就先接触了一下Paddle Lite&#xff0…

eks实践案例

Eks: ami-0c23197c88296c1b5 eks集群: 拉面 - 知乎 https://blog.csdn.net/saynaihe/category_12204222.html 什么是 Amazon EKS? - Amazon EKS kubectl 使用指南 https://zhuanlan.zhihu.com/p/364994610 k8s HPA自动伸缩 手把手教你 K8…

【花雕学AI】我们如何才能避免被ChatGPT替代?——一个跨学科的视角

ChatGPT是一个由OpenAI开发的AI文本工具,它可以理解和生成自然语言,从而与用户进行对话。ChatGPT是基于GPT-3或者GPT-4模型的,这是目前最大和最先进的语言模型之一。ChatGPT通过在大量的互联网文本数据上进行预训练和强化学习,学习…

Mongodb 在工业场景下的数字解决方案

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

UICollectionView 实现整页翻动(每页3个cell)

提示&#xff1a;页面架构是通过UICollectionView做的分页&#xff0c;分页点PageControl使用的是<SDCycleScrollView/TAPageControl.h> &#xff0c;布局架构使用的是Masonry 前言 为了实现UICollectionView无限翻动&#xff0c;连续滑动&#xff0c;主要是利用pagingE…

2023年计算机视觉与模式识别国际会议(CCVPR 2023)

会议简介 Brief Introduction 2023年计算机视觉与模式识别国际会议(CCVPR 2023) 会议时间&#xff1a;2023年9月15日-17日 召开地点&#xff1a;英国牛津 大会官网&#xff1a;www.ccvpr.org 计算机视觉技术与模式识别是现代科学中备受关注的热点技术&#xff0c;它的革新对各行…