【Linux】【网络】传输层协议:UDP

文章目录

  • UDP 协议
    • 1. 面向数据报
    • 2. UDP 协议端格式
    • 3. UDP 的封装和解包
    • 4. UDP 的缓冲区

UDP 协议

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

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

1. 面向数据报

数据报是独立的一整个,应用层交给 UDP 多长的报文,UDP原样发送,既不会拆分,也不会合并。

例如:用 UDP 传输 100 个字节的数据:如果发送端调用一次 sendto,发送100个字节,那么接收端也必须调用对应的一次recvfrom,接收100字节。而不能循环调用10次recvfrom, 每次接收10个字节。

2. UDP 协议端格式

在这里插入图片描述

UPD 的协议报头长度是 固定的 8字节

16位 UDP 长度,表示整个数据报(UDP 首部 + UDP 数据)的 最大长度,即 216 = 64kb

如果校验和出错, 就会直接丢弃。

报头(协议)的本质其实就是:结构化数据(结构体、位段)

// 结构体实现
struct udp_header
{uint16_t src_port;uint16_t dst_port;uint16_t udp_len;uint16_t check;
};
// 位段实现
struct udp_header
{uint32_t src_port:16;uint32_t dst_port:16;//...
};

3. UDP 的封装和解包

🎯封装

  • 应用层将信息拷贝给传输层,用 char* p 指针指向一个缓冲区,前面放 UDP 结构报头(固定 8 字节),后面放有效载荷,对报头内容的填充就可以写作:
((struct udp_header*)p)->src_port = xx;
((struct udp_header*)p)->dst_port = xx;
((struct udp_header*)p)->udp_len = xx;
((struct udp_header*)p)->check = xx;

🎯封装

  • 应用层将信息拷贝给传输层,用 char* p 指针指向一个缓冲区,前面放 UDP 结构报头(固定 8 字节),后面放有效载荷,对报头内容的填充就可以写作:
((struct udp_header*)p)->src_port = xx;
((struct udp_header*)p)->dst_port = xx;
((struct udp_header*)p)->udp_len = xx;
((struct udp_header*)p)->check = xx;

4. UDP 的缓冲区

UDP 没有真正意义上的 发送缓冲区。调用 sendto 会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。

UDP 具有接收缓冲区。但是这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致。如果缓冲区满了,再到达的UDP数据就会被丢弃。

UDP 的 socket 既能读,也能写, 这个概念叫做 全双工

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

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

相关文章

一分钟用手机搞定视频提取伴奏

上台表演需要去掉人声,提取伴奏,这个操作可以直接使用【音分轨】软件中的【视频提取伴奏】功能,接下来教大家具体的操作流程! 第一步:在首页点击【人声分离】,上传需要分离的视频,有三种方式可以…

「大数据-2.0」安装Hadoop和部署HDFS集群

目录 一、下载Hadoop安装包 二、安装Hadoop 0. 安装Hadoop前的必要准备 1. 以root用户登录主节点虚拟机 2. 上传Hadoop安装包到主节点 3. 解压缩安装包到/export/server/目录中 4. 构建软链接 三、部署HDFS集群 0. 集群部署规划 1. 进入hadoop安装包内 2 进入etc目录下的hadoop…

Windows AD域使用Linux Samba

Windows AD域使用Linux Samba 1. 初始化配置 1.1 初始化配置 配置服务器名 hostnamectl set-hostname samba.sh.pana.cnhosts文件配置,确保正常解析到本机和域控 [rootcentos7 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.loc…

crypto:RSA

题目 利用代码跑一下解码 import gmpy2 e 17 p 473398607161 q 4511491 d gmpy2.invert(e,(p-1)*(q-1)) print(d)总结 RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,常用于数据加密和数字签名。它基于两个大素数的乘积难以分解的数…

RocketMQ —消费者负载均衡

消费者从 Apache RocketMQ 获取消息消费时,通过消费者负载均衡策略,可将主题内的消息分配给指定消费者分组中的多个消费者共同分担,提高消费并发能力和消费者的水平扩展能力。本文介绍 Apache RocketMQ 消费者的负载均衡策略。 背景信息​ …

如何去开展软件测试工作

1. 软件测试 在一般的项目中,一开始均为手动测试,由于自动化测试前期投入较大,一般要软件项目达到一定的规模,更新频次和质量均有一定要求时才会上自动化测试或软件测试。 1.1. 项目中每个成员的测试职责 软件测试从来不是某一…

用CRM系统转化潜在客户

CRM销售管理就是通过CRM销售管理系统管理相关的销售阶段,从而转化潜在客户,完成相应的交易指标以及成交率,从而吸引到更多的潜在客户。那么,CRM系统如何转化潜在客户? 潜在客户是CRM客户管理的基本,需要不…

基于遗传算法解决的多仓库多旅行推销员问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Linux部署elk日志监控系统

目录 一、简介 二、部署elasticsearch 2.1 安装jdk11(jdk版本>11) 2.2 下载安装包 2.3 授权elk用户 2.4 配置elasticsearch.yml 2.5 启动elasticsearch 三、部署logstash 3.1 启动测试 3.2 可能出现的报错 3.3 指定配置文件启动logstash 3.4 安装El…

【网络安全】网络攻击的类型有哪些?

对网络的攻击大致可以分为两类:服务供给和非服务攻击。从攻击的手段可以分为8类:系统入侵类攻击、缓冲区溢出类攻击、欺骗类攻击、拒绝服务类攻击、防火墙攻击、病毒类攻击、木马类攻击与后门攻击。 服务类攻击(Application Dependent Attrac…

正点原子lwIP学习笔记——NETCONN接口简介

1. NETCONN接口简介 NETCONN API 使用了操作系统的 IPC 机制, 对网络连接进行了抽象,使用同一的接口完成UDP和TCP连接。 NETCONN API接口是在RAW接口基础上延申出来的一套API接口 首先会调用netconn_new创建一个pcb控制块,其实际是一个宏定…

全链路压测:优化系统性能的关键措施

在现代互联网时代,系统的性能稳定性和可靠性对于企业的成功至关重要。全链路压测作为一项关键的测试措施,可以模拟真实的负载情况,全面评估系统在高负载环境下的表现。本文将介绍全链路压测的定义、作用以及在优化系统性能方面的重要性。 一、…

PowerDsigner 数据库逆向pdm数模 常见数据库连接问题

本文章记录本人在使用powerdsigner工具,反向工程生成项目数据库表结构以及表关系的过程中遇到的两个常见问题。 问题1:Could not Initialize JavaVM 问题2:Non SQL Error : Could not load class oracle.jdbc.OracleDriver 环境&#xff1…

Docker-如何获取docker官网x86、ARM、AMD等不同架构下的镜像资源

文章目录 一、概要二、资源准备三、环境准备1、环境安装2、服务器设置代理3、注册docker账号4、配置docker源 四、查找资源1、服务器设置代理2、配置拉取账号3、查找对应的镜像4、查找不同版本镜像拉取 小结 一、概要 开发过程中经常会使用到一些开源的资源,比如经…

界面组件DevExpress WPF v23.2新功能预览 - 更轻量级的主题

本文主要描述了DevExpress WPF即将在几个月之后发布的v23.2中包含的新功能,持续关注我们获取更多最新资讯哦~ P.S:DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强…

自己开发一个VSCode插件,快速生成Flex布局代码

插件CSS Flex 安装地址:VSCode插件安装 GitHub:https://github.com/xutao-o/css-flex-code 💡介绍 这是一个快捷生成CSS Flex布局代码的VS Code插件,类似于Google开发者控制台里的Flex布局工具,就是看谷歌的布局工具…

爬虫获取一个网站内所有子页面的内容

上一篇介绍了如何爬取一个页面内的所有指定内容,本篇讲的是爬去这个网站下所有子页面的所有指定的内容。 可能有人会说需要的内容复制粘贴,或者直接f12获取需要的文件下载地址一个一个下载就行了,但是如下图十几个一级几十个二级一百多个疾病…

【Spring Cloud】认识微服务架构,拆分简单的 Demo 实现服务的远程调用

文章目录 前言一、认识微服务1.1 服务架构的演变:从单体到微服务单体架构分布式架构微服务架构 1.2 微服务技术的对比:Dubbo、Spring Cloud、Spring Cloud Alibaba技术对比公司需求的选择 1.3 Spring Cloud:微服务框架的精华什么是 Spring Cl…

工具篇 | WSL使用入门教程以及基于WSL和natApp内网穿透实践 - 对比VMWare

介绍 在开发工具中,Windows Subsystem for Linux (WSL) 和 VMWare 它们都可以实现了在 Windows 上运行 Linux系统。 文章概览 WSL Vs VMWare 我们将简单比对 WSL 和 VMWare,在性能、资源消耗等方面的差异,以协助您做出更加明确的选择。 …

数据结构与算法

目录 数据结构与算法 为什么要学习数据结构和算法? 常见的数据结构 常用算法 插入排序 一、概念及其介绍 二、适用说明 三、过程图示 希尔排序 一、概念及其介绍 二、适用说明 三、过程图示 归并排序 一、概念及其介绍 二、适用说明 三、过程图示 …