UDP协议(20250303)

1. UDP

UDP:用户数据报协议(User Datagram Protocol),传输层协议之一(UDP,TCP)

2. 特性         

  1. 发送数据时不需要建立链接,节省资源开销
  2. 不安全不可靠的协议        //一般用在实时性比较高的广播,组播//VNC
  3. 面向报文。
  4. 资源开销小

3.框架

3.1 C/S模式

有一个专用的客户端  client----server

传输方式:用户主机1--->服务器---->用户主机2

框架设计

  • server:socket() ===>bind()===>recvfrom()===>close()
  • client:socket() ===>(bind())===>sendto() ===>close()

3.2 B/S模式

有一个通用的客户端浏览器

browser----server

client:socket() ===>sendto() ===>close()

4. API接口

4.1 socket函数

套接字:通信对象的抽象, 网络通信的端口,一个通信链的句柄。
        int socket(int domain, int type, int protocol);
功能:
        创建一个用来通信的接口(文件描述符)
参数:
        domain:通信的协议族(AF_INET:IPv4协议族)
type:
        SOCK_DGRAM:数据报套接字    (UDP使用此类型)
        SOCK_STEAM:流式套接字    (TCP使用此类型)
        SOCK_RAW:原始套接字
protocol:
        默认传0 按照协议的默认属性创建
返回值:
        成功返回用来进行通信的文件描述符
        失败返回-1

IPv4地址形式:
        struct sockaddr_in {
           sa_family_t    sin_family; /* AF_INET */
           in_port_t      sin_port;   /* 端口 */
           struct in_addr sin_addr;   /* IP地址 */
       };

       /* Internet address. */
       struct in_addr {
           uint32_t       s_addr;     /* address in network byte order */
       };

端口转换:htons函数

地址转换:inet_addr函数

4.2 sendto函数
      ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                      const struct sockaddr *dest_addr, socklen_t addrlen);
功能:
        向一个IP地址和端口发送数据信息
        端口号:区分一台主机不同的应用程序(0 - 65535)
参数:
        sockfd:套接字文件描述符
        buf:发送数据空间首地址
        len:发送数据的长度
        flags:发送数据属性(默认为0)
        dest_addr:目的IP地址和端口
        addrlen:目的IP地址和端口的长度
返回值:
        成功返回实际发送字节数
        失败返回-1 

 4.3 htons函数

        主机转网络字节序

  • 主机:小端   host
  • 网络:大端   network

四种不同的转化函数

  1. uint32_t htonl(uint32_t hostlong);          主机转网络
  2. uint16_t htons(uint16_t hostshort);         主机转网络
  3. uint32_t ntohl(uint32_t netlong);           网络转主机
  4. uint16_t ntohs(uint16_t netshort);          网络转主机

        h:host        n:net         l:long         s:short 

4.4 inet_addr函数

        in_addr_t inet_addr(const char *cp);
功能:
        将字符串IP地址转换成二进制IP地址形式

        char *inet_ntoa(struct in_addr in);
功能:
        将二进制ip转换成字符串

4.5 bind
        int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
功能:将一个套接字与IP地址和端口号绑定(只能绑定自己的IP地址)
参数:
        sockfd:套接字文件描述符 
        addr:IP地址和端口号结构体首地址
        addrlen:长度
返回值:
        成功返回0
        失败返回-1 

4.6 recvfrom

      ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);
功能:
        接收网络发送的数据信息
参数:
        sockfd:套接字文件描述符
        buf:存放数据空间首地址
        len:最大能够接收的数据个数
        flags:属性默认为0
        src_addr:存放发送端IP地址信息的空间首地址
        addrlen:想要接收的数据长度的空间首地址
返回值:
        成功返回实际接收字节数
        失败返回-1 

具有阻塞功能(直到接收到数据,才会继续向下执行)

 5. UDP报文头

        UDP首部有8个字节,由4个字段构成,每个字段都是两个字节

  1. 源端口: 源主机的应用程序使用的端口号
  2. 目的端口:目的主机的应用程序使用的端口号 
  3. 长度:是指UDP头部和UDP数据的字节长度。因为UDP头 部长度为8字节,所以该字段的最小值为8
  4. 差错检测,检测UDP数据报在传输中是否有错,有错则丢弃

 总结

  1. 无连接
  2. 尽最大努力交付(不安全,不可靠(丢包、乱序))
  3. 面向数据报
  4. 机制简单,传输效率高

应用场景:要求实时性高,但是允许数据丢失的场合(直播,VNC) 

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

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

相关文章

自动化学习-使用git进行版本管理

目录 一、为什么要学习git 二、git是什么 三、git如何使用 1、git的下载安装和配置 2、git常用的命令 3、gitee远程仓库的使用 (1)注册 (2)创建仓库 (3)配置公钥(建立电脑和git…

20250301在chrome中安装CRX猫抓

20250301在chrome中安装CRX猫抓 2025/3/1 18:08 百度:猫抓 CRX https://www.crx4chrome.com/crx/49597/ 猫抓 (cat-catch) Crx File 2.5.9 for Chrome (Latest Version) Get Latest Version of 猫抓 (cat-catch) from Web Store Developer Tools > cat-catch / E…

[LeetCode]day33 150.逆波兰式求表达值 + 239.滑动窗口最大值

逆波兰式求表达值 题目链接 题目描述 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。 每个操作数(运…

pnpm+monorepo实现前端公共函数、组件库

一、前言 1. pnpm pnpm 是前端包管理工具之一,常见的还有npm、yarn等,但pnpm由于安装速度快、磁盘占用低、内置支持monorepo等优势,所以更推荐使用。 1-1 包管理工具核心特点对比 特性pnpmnpmyarn安装速度🚀 快(基…

【计算机网络入门】初学计算机网络(八)

目录 1. S-W协议的信道利用率 2. GBN、SR协议的信道利用率 3.术语补充 3.1 滑动窗口协议 3.2 ARQ协议、连续ARQ协议 4. 信道划分介质访问控制 4.1 时分复用(TDM) 4.2 统计时分复用(STDM) 4.3 频分复用(FDM&a…

JVM基本概念及内存管理模型

一、JVM基本概念 JVM(Java Virtual Machine,Java 虚拟机)是 Java 程序运行的核心组件。它负责将 Java 字节码转换为特定平台的机器指令,并提供内存管理、垃圾回收、安全性等功能。JVM 的主要功能包括以下: 加载和执行…

Docker 学习(三)——数据管理、端口映射、容器互联

一、数据管理 容器中的管理数据主要有两种方式: 数据卷 (Data Volumes): 容器内数据直接映射到本地主机环境; 数据 卷容器( Data Volume Containers): 使用特定容器维护数据卷 1.…

解锁Egg.js:从Node.js小白到Web开发高手的进阶之路

一、Egg.js 是什么 在当今的 Web 开发领域,Node.js 凭借其事件驱动、非阻塞 I/O 的模型,在构建高性能、可扩展的网络应用方面展现出独特的优势 ,受到了广大开发者的青睐。它让 JavaScript 不仅局限于前端,还能在服务器端大展身手&…

我的ChatGPT怎么登不上?

近期,不少用户反馈在使用ChatGPT时遇到登录困难、连接超时等问题。本文将从技术角度分析常见原因,并提供合规、安全的解决方案,同时结合开发者实际需求推荐实用工具,助您高效应对登录障碍。 ChatGPT登录失败的常见原因 网络环境限…

小米手机如何录制屏幕?手机、电脑屏幕录制方法分享

大家最近有没有遇到想记录手机屏幕操作的情况? 比如精彩的游戏瞬间、有趣的视频教程,或者需要录制屏幕来制作演示材料。小米手机在这方面可是个好帮手,今天就来给你好好唠唠,小米手机如何录制屏幕,以及后续如何处理这…

【jenkins配置记录】

全局工具配置: D:\Program Files\Java\jdk1.8.0_281 D:\Program Files\Git\bin\git.exe E:\allure-2.13.2 2. GIT 3. 定时任务 H 8 * * 1-5 4. 构建触发器 5. 构建后操作 Allure Report 吐血记录:报告路径可以为 workspace 相对路径 6. 系统配置 em…

修改hosts文件,修改安全属性,建立自己的DNS

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

详解LSM树

目录 什么是LSM树 磁盘结构与顺序IO LSM树结构 LSM树的写入 SSTable合并 LSM树的读取 LSM树的删除 总结 什么是LSM树 LSM 树全名日志结构合并树(Log-Structured Merge Tree),是一种用于存储和管理数据的树状数据结构,常用…

3d投影到2d python opencv

目录 cv2.projectPoints 投影 矩阵计算投影 cv2.projectPoints 投影 cv2.projectPoints() 是 OpenCV 中的一个函数,用于将三维空间中的点(3D points)投影到二维图像平面上。这在计算机视觉中经常用于相机标定、物体姿态估计、3D物体与2D图…

Spring Boot集成Minio笔记

一、首先配置MinIO 1、MinIO新建Bucket&#xff0c;访问控制台如图 创建访问密钥(就是账号和密码) 二、集成mino添加Minio客户端依赖 1.maven构建方式在pom.xml引入jar <dependency><groupId>io.minio</groupId><artifactId>minio</artifactI…

github进不去,一直显示错误

1、进入网址Dns检测|Dns查询 - 站长工具 2、复制检测出来的任意一个ip 3、打开电脑的文件夹&#xff1a;C:\Windows\System32\drivers\etc 下的hosts文件下复制这个ip地址 20.205.243.166 4、winr 打开cmd&#xff0c;输入ipconfig/flushdns ipconfig/flushdns出现这个就可以…

【商城实战(2)】商城架构设计:从底层逻辑到技术实现

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…

BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测Matlab

BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测Matlab 目录 BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测Matlab分类效果基本介绍BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测一、引言1.1、研究背景和意义1.2、研究现状1.3、研究目…

Windows下使用ShiftMediaProject方法编译FFmpeg

Windows SDK 8.1版本不支持dxva vp9! 需要10.0.17134.0&#xff01;或者把config编译选项去掉 1.下载源码 https://github.com/ShiftMediaProject 2.创建ShiftMediaProject文件夹 把下载好的源码放入source 3.进入SMP执行 project_get_dependencies.bat 自动下载ffmepg依赖项…

C++ Primer 动态数组

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…