当前位置: 首页 > news >正文

【JavaEE精炼宝库】网络原理基础——UDP详解

文章目录

  • 一、应用层
  • 二、传输层
    • 2.1 端口号:
    • 2.2 UDP 协议:
      • 2.2.1 UDP 协议端格式:
      • 2.2.2 UDP 存在的问题:
    • 2.3 UDP 特点:
    • 2.4 基于 UDP 的应用层协议:

一、应用层

我们 Java 程序员在日常开发中,最经常与应用层打交道,在应用层一般是使用 HTTP 协议与自定义协议。

如何自定义协议?
答:

  1. 确定传输信息。
  2. 确定数据格式(xml、json、yml、protobuffer)。

二、传输层

负责数据能够从发送端传输接收端。

2.1 端口号:

端口号(Port)标识了一个主机上进行通信的不同的应用程序。
在这里插入图片描述

  • 端口号范围划分:

端口号是两个字节无符号整数(0 ~ 65535)。

  1. 0 ~ 1023 知名端口号: HTTP、FTP、SSH 等这些广为使用的应用层协议,他们的端口号都是固定的。
  2. 1024 ~ 65535 操作系统动态分配的端口号: 客户端程序的端口号,就是由操作系统从这个范围分配的。
  • 常见知名端口号(well-know port Number)了解即可:
  1. ssh 服务器,使用 22 端口。

  2. ftp 服务器,使用 21 端口。

  3. telnet 服务器,使用 23 端口。

  4. http 服务器,使用 80 端口。

  5. https 服务器,使用 443 端口。

我们自己写一个程序使用端口号时,要避开这些知名端口号。

  • 端口号的两个常见问题:
  1. 问题1:一个进程是否可以同时绑定多个端口号?
    答:可以。这个是非常可行的,而且在日常开发中经常使用到。举个栗子:一个服务器绑定两个端口,一个端口给普通用户使用,另一个端口给程序员 + 运营人员使用,以便进行日常维护,两个端口的功能可以是不一样的。

  2. 问题2:一个端口号是否可以同时被多个进程绑定?
    答:不能。好比“一山不容二虎,除非一公一母。”如果一个服务器是 TCP,一个是 UDP 此时,端口号即使在同一时刻重复了,是不影响的(一公一母),但是如果两个 TCP 或者两个 UDP,在同一时刻,使用同一个端口号,就会出现绑定失败的情况。

2.2 UDP 协议:

2.2.1 UDP 协议端格式:

下面 16 位指的是 16个bit 位。
在这里插入图片描述

  • 16 位 UDP 长度,表示整个数据报(UDP 首部 + UDP 数据)的最大长度。
  • 如果校验和出错,就会直接丢弃。
  • 各个术语在下面会做出详细介绍。

上面那张图由于排版问题,画的不是很好,下面我给出一张更加清晰的图:
在这里插入图片描述
一个 UDP 数据报由报头和载荷构成。

  • 源端口号:发送端的端口号。
  • 目的端口号:接收方的端口号。
  • UDP 长度:整个 UDP 数据报占多少个字节。
  • UDP 校验和(UDP Checksum):UDP 校验和是用于检测 UDP 数据报在传输过程中是否发生错误的一种机制。 举个栗子:如果发送方计算得到的校验和为 0x1234,接收方接收到数据后按照相同的算法计算校验和,在传输的过程中可能会出现 bit 翻转的情况,如果结果也为 0x1234,则说明数据在传输过程中没有发生错误。

UDP 中使用 CRC 算法来作为计算校验和的算法。 CRC 是一个简单粗暴的计算校验和的方式,循环冗余校验(校验和不是为了得到确切的值,只是为了判断算出来得值是否一样)。例如:设定 2 个字节得变量,把数据得每个字节取出来往这个变量上进行累加。如果结果溢出超过 2 个字节,溢出部分舍弃。

2.2.2 UDP 存在的问题:

UDP 长度描述了整个 UDP 数据报占的字节数,通过 UDP 长度,就能知道载荷一共是多少字节(全部的字节数 - 报头字节数)。

无符号 2 字节数的范围为:0 ~ 65535(1024 * 64)。也就是说一个 UDP 数据报最长就是 64 KB,不能再长了。对于现在来说有点短,随便拿手机拍个照片,10 MB左右,所以使用 UDP 开发程序会有很大的制约。最好的解决方法是将 UDP 改写成 TCP,TCP 对于应用层数据包的大小是无限制的。

既然 UDP 有上面的长度限制,那么为什么不对 UDP 进行升级呢?

答:这里的升级难点不在于技术,而是 zz 问题,升级到更高的字节数,成本很高。单个主机升级是没有意义的,需要对端一起升级(不然会出现解析错误的情况),由于 UDP 是系统内核实现的,如果全世界都是使用同一个操作系统,升级的成本还会小一点,但是市面上存在各种各样的操作系统,很难统一升级。

2.3 UDP 特点:

UDP 传输的过程类似于寄信。

其特点有:

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

2.4 基于 UDP 的应用层协议:

  • NFS:网络文件系统。

  • TFTP:简单文件传输协议。

  • DHCP:动态主机配置协议。

  • BOOTP:启动协议(用于无盘设备启动)。

  • DNS:域名解析协议。

当然,也包括我们自己写 UDP 程序时自定义的应用层协议。

结语:
其实写博客不仅仅是为了教大家,同时这也有利于我巩固知识点,和做一个学习的总结,由于作者水平有限,对文章有任何问题还请指出,非常感谢。如果大家有所收获的话还请不要吝啬你们的点赞收藏和关注,这可以激励我写出更加优秀的文章。

在这里插入图片描述

相关文章:

【JavaEE精炼宝库】网络原理基础——UDP详解

文章目录 一、应用层二、传输层2.1 端口号:2.2 UDP 协议:2.2.1 UDP 协议端格式:2.2.2 UDP 存在的问题: 2.3 UDP 特点:2.4 基于 UDP 的应用层协议: 一、应用层 我们 Java 程序员在日常开发中,最…...

【回眸】周中WLB-个人

生活 计划 苏州or杭州or舟山 负负得正 烟火 鲜芋仙 办上海银行的银行卡 申请表材料准备好 个人博客提现签约变现 个人提升 yas补直播笔记(听、口)1~3课 *2倍 dy学堂 —— 3课时输出博客 个人笔记本搭建环境 副业探索 收集信息差 目前已…...

基于Spring boot + Vue的灾难救援系统

作者的B站地址:程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csdn地址:程序员云翼-CSDN博客 1.项目技术栈: 前后端分离的项目 后端:Springboot MybatisPlus 前端:Vue ElementUI 数据库: …...

C#进阶:轻量级ORM框架Dapper详解

C#进阶:轻量级ORM框架Dapper详解 在C#开发中,ORM(对象关系映射)框架是处理数据库交互的重要工具。Dapper作为一个轻量级的ORM框架,专为.NET平台设计,因其高性能和易用性而备受开发者青睐。本文将详细介绍D…...

【python015】常见成熟AI-图像识别场景算法清单(已更新)

1.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 【python015】常见成熟AI-图像识别场景算法清单及代码【python015】常见成熟AI-图像识别场景算法清单及代码【python015】常见成熟AI-图像识别场景算法清单及代码 文章目录 1.背景介绍2…...

删除有序数组中的重复项(LeetCode)

题目 给你一个 升序排列 的数组 ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 中唯一元素的个数。 考虑 的唯一元素的数量为 ,你需要做以下事情确…...

【算法 03】雇佣问题

“雇用问题”及其算法优化 在日常生活和工作中,我们经常会遇到需要从多个选项中做出选择的情况,而“雇用问题”正是这样一个典型的例子。在这个问题中,我们不仅要考虑如何高效地找到最佳候选人,还要关注整个过程中的成本。今天&a…...

vue3+axios请求导出excel文件

在Vue 3中使用axios请求导出Excel文件,可以发送一个GET或POST请求,并设置响应类型为blob或arraybuffer,然后使用new Blob()构造函数创建一个二进制文件,最后使用URL.createObjectURL()生成一个可以下载的链接。 先看代码 import…...

LLM与NLP

大语言模型与自然语言处理的关系:整体与组成的关系如 自然语言理解的编码器式(encoder-only)的架构是语境相关的词表示BERT; 自然语言转换的编码器-解码器式的(encoder-decoder)的架构是词频-逆文档词频T…...

js 判断是否为回文串

需求:忽略英文大小写和空格差异,判断是否为回文字符串(例如"我爱你 你爱我","abc bA") 思路:利用翻转字符串比较,利用循环双指针,利用递归或者双循环&#xf…...

多重背包c++

题目描述 有N种物品和一个容量是V的背包。 第i种物品最多有si件,每件体积是vi,价值是wi。 求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值。 输入 第一行两个整数,N&#x…...

kernel input事件测试程序

测试内核input 事件测试程序。 getevent -lt 命令查看注册的是是event0/1/2/3/4 中的哪一个。 gcc input_test.c -o input_test 编译成可执行程序。将编译的input_test,U盘或ADB push到系统里面,chmod 777 input_test 在 ./input_test input_test.c #…...

gd32 i2c 中断 主机从机双向通信例程

Master I2C0_SCL PB8 AF4 I2C0_SDA PB9 AF4 Slave I2C1_SCL PB10 AF4 I2C1_SDA PB11 AF4 //主机中断发送 void i2c_master_transmit_it(uint32_t address, uint8_t* buff, uint32_t size); //主机中断接收 void i2c_master_receive_it(uint32_t address, uint8_t* buff, uint…...

程序员在AI时代:重塑核心竞争力,共舞智能未来

程序员在AI时代:重塑核心竞争力,共舞智能未来 在这个日新月异的科技时代,人工智能生成内容(AIGC)技术,尤其是以ChatGPT、Midjourney、Claude等为代表的大语言模型,正以前所未有的速度渗透到编程…...

apex发送邮件中显示饼状图和条形图

在 Apex 中发送带有嵌入图表(如饼状图和条形图)的电子邮件,您可以通过以下步骤实现: 生成图表图像:使用外部库或服务生成图表图像并获取图像的 URL 或 Base64 编码。创建电子邮件模板:在 HTML 邮件模板中嵌…...

【HarmonyOS NEXT星河版开发学习】小型测试案例07-弹性布局小练习

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面(暂未发布) 前言 在鸿蒙(HarmonyOS)开发中,Flex布局是一种非常有用的布局方式,它允许开发者创建灵活且响…...

Sparksql array相关函数

前言 Apache Spark SQL 是 Spark 的一个重要模块,用于处理结构化数据。它提供了 DataFrame 和 Dataset API,使得开发者能够使用 SQL 查询语言(称为 Spark SQL)对数据进行高效的操作。在本文中,我们将介绍 Spark SQL 中所有与array相关的函数。 环境 sparksql版本<dep…...

软件测试学习笔记

测试学习 1. 测试流程2. Bug的提出什么是bugbug 的描述bug 级别 3. 测试用例的设计什么是测试用例测试用例应如何设计基于需求的设计方法等价类边界值场景法正交表法判定表法错误猜测法 4. 自动化测试回归测试自动化分类 5. 安装 webdriver-manager 和 selenium第一个web自动化…...

Centos 8系统ext4文件系统类型进行扩容缩容 (LVM)

Centos 8系统ext4文件系统类型进行扩容缩容 &#xff08;LVM&#xff09; 1.磁盘情况&#xff1a;2.缩容home分区1.备份home数据&#xff1a;2.查找使用 /home 的进程&#xff1a;3.终止这些进程&#xff1a;4.卸载 /home 分区5.检查文件系统一致性 (e2fsck)&#xff1a;6.调整…...

常考常考高频率

1.快排&#xff08;双指针&#xff09; 快排&#xff0c;归并排序&#xff0c;堆排序 #快速排序O&#xff08;nlogn&#xff09; def quick_sort(array, left, right):if left < right:mid partition(array, left, right)quick_sort(array, left, mid)quick_sort(array, …...

隧道液氮速冻机哪家企业值得信赖

隧道液氮速冻机行业分析&#xff1a;成都华能低温设备制造有限公司的卓越表现一、行业痛点分析在隧道液氮速冻机领域&#xff0c;存在着一些技术挑战。首先&#xff0c;速冻速度的提升面临瓶颈。传统的速冻方式难以满足现代食品加工等行业对于快速冻结以保证产品品质的要求。据…...

BetterNCM Installer完整指南:三步打造个性化网易云音乐工作站

BetterNCM Installer完整指南&#xff1a;三步打造个性化网易云音乐工作站 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐的功能限制感到困扰吗&#xff1f;BetterNC…...

揭秘Browsershot:让HTML转PDF/图片变得如此简单高效的终极工具

揭秘Browsershot&#xff1a;让HTML转PDF/图片变得如此简单高效的终极工具 【免费下载链接】browsershot Convert HTML to an image, PDF or string 项目地址: https://gitcode.com/gh_mirrors/br/browsershot Browsershot是一款强大的开源工具&#xff0c;能够轻松将HT…...

OpenClaw学习助手:Qwen3.5-9B-AWQ-4bit实现错题本自动整理

OpenClaw学习助手&#xff1a;Qwen3.5-9B-AWQ-4bit实现错题本自动整理 1. 为什么需要自动化错题本 作为一名经常需要刷题的学生&#xff0c;我长期被错题整理问题困扰。传统的手动整理方式效率低下——需要先拍照或截图&#xff0c;再手动输入题目内容&#xff0c;最后分类归…...

M2FP镜像升级指南:如何从基础服务扩展到视频流实时解析?

M2FP镜像升级指南&#xff1a;如何从基础服务扩展到视频流实时解析&#xff1f; 1. 从静态图像到视频流解析的技术演进 多人人体解析技术正在从静态图片处理向动态视频分析快速演进。传统的M2FP服务虽然能出色完成单张图片的语义分割&#xff0c;但面对视频流实时处理时&…...

STC8H8K32U按键控制OLED显示

手动按键按下,OLED显示对应键值 气缸前进后退电机正反转本文实现了一个基于STC8H单片机的按键检测与OLED显示系统。系统通过8个独立按键输入信号&#xff0c;采用消抖算法检测有效按键&#xff0c;并在OLED屏幕上实时显示对应按键编号。程序包含OLED初始化、I2C通信协议实现、按…...

Nanobot与Kubernetes集成:云原生部署方案

Nanobot与Kubernetes集成&#xff1a;云原生部署方案 1. 引言 在云原生时代&#xff0c;如何高效部署和管理AI应用成为开发者面临的重要挑战。Nanobot作为一个超轻量级的AI助手框架&#xff0c;以其仅4000行代码的精简设计和强大功能吸引了广泛关注。但当我们需要在生产环境中…...

云容笔谈·东方红颜影像生成系统数据库课程设计案例:构建一个AI绘画作品社交平台

云容笔谈东方红颜影像生成系统数据库课程设计案例&#xff1a;构建一个AI绘画作品社交平台 最近几年&#xff0c;AI绘画技术发展得特别快&#xff0c;从最开始生成一些模糊的涂鸦&#xff0c;到现在能画出细节丰富、风格多样的精美作品&#xff0c;也就短短几年时间。很多同学…...

Mac开发环境神器:OpenClaw+千问3.5-27B调试日志分析

Mac开发环境神器&#xff1a;OpenClaw千问3.5-27B调试日志分析 1. 为什么开发者需要日志分析助手 作为一个长期在Mac上折腾各种开发环境的程序员&#xff0c;我经历过太多深夜调试的痛苦时刻。那些密密麻麻的终端日志输出&#xff0c;往往包含着关键错误线索&#xff0c;但要…...

PCIe Retimer实战:Execution Mode下Link Equalization的调试技巧与常见问题排查

PCIe Retimer实战&#xff1a;Execution Mode下Link Equalization的调试技巧与常见问题排查 在高速串行通信领域&#xff0c;PCIe Retimer作为信号完整性的关键组件&#xff0c;其Execution Mode下的Link Equalization过程往往是硬件工程师调试链路时的重点难点。本文将深入剖析…...