【计算机网络】UDP协议特点

devtools/2024/11/17 1:07:43/


UDP协调特点


1 socket阻塞和非阻塞


阻塞

老王烧水 把水壶放在炉子上 在旁边等着直到水开

优点 事情发送第一时间知道 等待时候进程挂起状态 不占cpu

非阻塞

老王烧水 把水壶放在炉子上 去看电视 每隔一段时间回来看一眼 CPU占用率高

sock默认是阻塞的 接收和发送都是阻塞的

sock设置阻塞


u_long iMode=1;
ioctlsocket(sock,FIONBIO,&iMode);

非阻塞 CPU占用率高 不推荐使用  


2 发送和接收缓冲区


缓冲区

创建socket时候 操作系统时候会根据socket分配一个接收缓冲区和发送缓冲区 都是64kb

windows操作系统给每个进程分配4g内存(0-2G 内核空间 2-4G 用户空间)

1 虚拟分配 应用程序实际没有4g空间使用 

2 内存分配所见地址是虚假的

操作系统根据端口号找到sock每个sock包含两个缓冲区(接收缓冲区,发送缓冲区)

利用recvfrom函数把缓冲区数据拷贝到自己变量中

发送缓冲区

发送缓冲区大小64KB

阻塞发送:

发送缓冲区不够大 等着 等足够大再发送

非阻塞发送 :

发送缓冲区不够大 还剩多大拷贝多大进去 剩余的给程序处理

sendto返回值int 如果反回值小于发送大小则再发送一次,防止数据丢失

足够大时 阻塞和非阻塞都直接拷贝数据向缓冲区

接收缓冲区

接收缓冲区大小64KB

当数据到达操作系统时候 ,操作系统会根据目的端口号找到之前绑定socket 把数据写入socket对应的缓冲区

当程序调用recvfrom函数时候就是从对应的缓存区接收数据到自己空间


3 UDP协议特点


1 面向非连接,创建socket可以接收任何人发来的数据

2 通讯方式 数据报文的通信方式 不可以拆分(接收也不)

3 传输效率高(和tcp相比)

4 会丢包出现乱序 但是没有校验和检查 没有解决方法

由于网络复杂产生的UDP对没有任何措施 不负责不在乎是否收到


http://www.ppmy.cn/devtools/134581.html

相关文章

设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

前言: 两个本想描述一样的意思的词,只因一字只差就让人觉得一个是好牛,一个好搞笑。往往我们去开发编程写代码时也经常将一些不恰当的用法用于业务需求实现中,但却不能意识到。一方面是由于编码不多缺少较大型项目的实践&#xff…

flink cdc 应用

SQLServer 1. The db history topic or its content is fully or partially missing. Please check database history topic configuration and re-execute the snapshot. 遇到了一下问题,多次尝试,最终发现是数据库大小写要一致。 Caused by: io.deb…

24/11/14 算法笔记 EM算法期望最大化算法

EM算法用于含有隐变量的概率参数模型的最大似然估计或极大后验概率估计。它在机器学习和统计学中有着广泛的应用,比如在高斯混合模型(GMM)、隐马尔可夫模型(HMM)以及各种聚类和分类问题中。 EM算法的基本思想是&#…

如何利用静态住宅IP提升TikTok营销效果:应对平台限制与账号安全的新利器

随着TikTok的全球化和日益严苛的运营政策,越来越多的品牌和商家开始面临着平台地域限制、账户管理及内容推广的挑战。特别是在多个账户管理和跨境营销中,如何避免账号封禁、提高内容曝光,成为了亟待解决的问题。在这种背景下,代理…

STM32 ADC --- DMA乒乓缓存

STM32 ADC — DMA乒乓缓存 文章目录 STM32 ADC --- DMA乒乓缓存软件切换实现乒乓利用DMA双缓冲实现乒乓 通过cubeMX配置生成HAL工程这里使用的是上篇文章(STM32 ADC — DMA采样)中生成的工程配置 软件切换实现乒乓 cubeMX默认生成的工程中是打开DMA中断…

【python系列】python数据类型之数字类型

1.定义 数字类型是编程中最常用的数据类型。什么是数字类型,下面是数字类型官方文档的解释:https://docs.python.org/zh-cn/3.10/library/stdtypes.html?highlightstr%20join#numeric-types-int-float-complex 以上可以知道: 数字类型包…

回调函数的概念、意义和应用场景

概念 回调函数,就是使用者自己定义一个函数,并实现函数的内容,然后把这个函数作为参数传入其它函数中,由其它函数在运行时来调用。 换句话说,函数是你实现的,但由别人的函数在运行时通过参数传递的方式调用…

flutter下拉刷新上拉加载的简单实现方式三

使用 CustomScrollView 结合 SliverList 实现了一个支持下拉刷新和上拉加载更多功能的滚动列表,对下面代码进行解析学习。 import dart:math;import package:flutter/material.dart;import custom_pull/gsy_refresh_sliver.dart; import package:flutter/cupertino…