传输层协议——udp

news2025/1/16 21:01:27

在这里插入图片描述

文章目录

  • 1. 再谈端口号
    • 1.1 认识知名端口号
  • 2. netstat
  • 3. pidof
  • 4. UDP协议
    • 4.1 UDP协议端格式
    • 4.2 UDP的特点
    • 4.3 面向数据报
    • 4.4 UDP的缓冲区

1. 再谈端口号

传输层是负责数据能够从发送端传输接收端,那么我们就需要再一次了解端口号。端口号(Port)标识了一个主机上进行通信的不同的应用程序。

在TCP/IP协议中,用 “源IP”、“源端口号”、“目的IP”、“目的端口号”、“协议号”。这样一个五元组来标识一个通信(可以通过netstat -n查看)
在这里插入图片描述
在这里插入图片描述
在同一个主机上,如果我们的浏览器去打开多个页面,那么服务器就会在我们客户端不同的端口号进行响应。

1.1 认识知名端口号

在这里插入图片描述
执行下面的命令,可以看到知名端口号:

cat /etc/services

2. netstat

netstat是一个用来查看网络状态的重要工具。
在这里插入图片描述

3. pidof

在查看服务器的进程id时非常方便:
语法:pidof [进程名]
功能:通过进程名, 查看进程id

4. UDP协议

4.1 UDP协议端格式

在这里插入图片描述
16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度。
如果校验和出错,就会直接丢弃。

首先,我们要知道一个非常重要的一点:UDP采用的是定长报头(8字节)。

那么UDP在传输的时候是如何封装和解包的呢
因为是定长报头,在封装的时候直接加上8字节报头,在解包的时候直接提取8字节报头

那么UDP是如何把内容传给上层的哪一个应用呢
是根据报头中的目的端口号来确认的

那么UDP在内核中C语言的代码是什么样子的:
在这里插入图片描述
它是以位段的方式来存储端口号,当我们想要添加报头的时候,就会把这个拷贝到有效载荷的前面。

我们注意到:UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是2^16=64K(包含UDP首部)。
如果我们需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装

4.2 UDP的特点

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

4.3 面向数据报

应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。

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

4.4 UDP的缓冲区

UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。
UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致,如果缓冲区满了,再到达的UDP数据就会被丢弃

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Bert101】变压器模型背后的复杂数学【01/4】

一、说明 众所周知,变压器架构是自然语言处理(NLP)领域的突破。它克服了 seq-to-seq 模型(如 RNN 等)无法捕获文本中的长期依赖性的局限性。变压器架构被证明是革命性架构(如 BERT、GPT 和 T5 及其变体&…

ARTS 挑战打卡的第8天 ---volatile 关键字在MCU中的作用,四个实例讲解(Tips)

前言 (1)volatile 关键字作为嵌入式面试的常考点,很多人都不是很了解,或者说一知半解。 (2)可能有些人会说了,volatile 关键字不就是防止编译器优化的吗?有啥好详细讲解的&#xff1…

清除pip安装库时的缓存

目录 1、命令清除缓存 2、路径手动清除 在使用pip安装Python库时,如果之前已经下载过该库,pip会默认使用缓存来安装库,而不是重新从网络上下载。缓存文件通常存储在用户目录下的缓存文件夹中,具体位置因操作系统和Python版本而异…

C语言中几种常见数据类型所占字节数

**16位编译器: char/unsigned char :1字节 char :2字节 short int:2字节 int/unsigned int:2字节 long int:4字节 float:4字节 double:8字节* 32位编译器: *char/unsi…

腾讯云服务器标准型CVM实例详细介绍S5/S6/SA2/SR1/SA3/S4等

腾讯云CVM服务器标准型实例的各项性能参数平衡,标准型云服务器适用于大多数常规业务,例如:web网站及中间件等,常见的标准型云服务器有CVM标准型S5、S6、SA3、SR1、S5se等规格,腾讯云服务器网来详细说下云服务器CVM标准…

悬崖传感器调试问题总结

悬崖传感器原理 使用ADC采样电路,周期的进行开/关灯,获取ADC采样值。根据预先设置好ADC门限,判断是否为悬崖。ADC的精度是12位,对应电路的电压是3.3伏,悬崖传感器通过开灯和关灯,接收的不同灯光强度&#x…

【福建事业单位-数学运算】02工程问题-行程问题

【福建事业单位-数学运算】02工程问题-行程问题 一、工程问题1.1给完工时间型(给多个完工时间)——从时间赋值总量例题 1.2 给效率比例型(给效率的比例关系)直接给效率间接给效率(★)特殊给效率 1.3 给具体…

掌握Python的X篇_30_使用python解析网页HTML

本篇将会介绍beutifulsoup4模块,可以用于网络爬虫、解析HTML和XML,对于没有接触过前端,不了解HTML是如何工作的,需要先解释一下什么事HTML。 1. HTML 网页中的各种布局等的背后都是非常简单的纯文本格式,那种格式称为…

【JDBC系列】- 扩展提升学习

扩展提升学习 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正&#xff0…

Golang 基本常量声明及 iota 使用

文章目录 一、局部常量声明二、全局常量声明三、多行常量定义,值表达式为空时自动继承前一个四、常量声明 - iota 一、局部常量声明 package mainimport "fmt"func main() {//局部常量声明//方式一:主动声明类型const lengthA int 10//方式二…

tomcat设置PermSize

最近tomcat老是报错,查看了日志出现PermGen 内存不够用,重启tomcat后查询使用情况 通过启动参数发现没有设置 PermGen,继续通过jmap查看 jmap -heap 21179 发现99%已使用,而且默认是30.5M,太小了,这里设置成256M 1. 创建setenv.sh文件 在/usr/local/tomcat/bin目录下创建一个…

CDN是什么?CDN的好处

近段时间开组会的时候组内的大佬多次提及CDN这个名词,因为以前没有接触过,所以上网查询后写一篇博客来巩固自己对于CDN的理解 1、什么是CDN CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新…

Linux命令200例:ls用于列出指定目录下的文件和子目录

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…

Java实现对称加密(DES,AES)快速入门示例

对称加密是使用相同的密码进行加密和解密, 对称加密实现简单,安全性相比非对称加密较弱, 常用的对称加密算法有 DES,AES以及PDE等,关于对称加密相关概念参考: 对称加密、非对称加密深度解析 本篇介绍Java的…

【CSH 入门基础 5 -- csh 文件监控脚本实现】

文章目录 背景CSHLL 代码实现cshell 中 unset 的介绍bash 中监控文件的方法 背景 由于开发代码是在外网编译,而镜像的烧写是在内网中的EDA工具中进行的,所以就需要先将代码在外网编译好后,再通过FTP工具将镜像传输到内网中,然后在…

MyBatis配置文件:配置连接数据库的环境,实现数据库连接

目录 1、MyBatis配置数据库环境的连接方式 1.1连接方式一:MyBatis核心配置文件配置数据库连接信息 1.2连接方式二:在MyBatis核心配置文件中引入properties文件,配置数据库的环境 2、MyBatisd核心配置文件连接数据库的环境完整配置信息 3…

Win11麦克风说话别人听不见解决办法

Win11麦克风说话别人听不到声音怎么办?麦克风没有声音可能有三种原因造成的,第一种声音设置里面确认麦克风设备是否启用,第二种查看麦克风的访问权限,第三种是检查驱动是否有问题,下面就简单的讲一下解决方法&#xff…

【loadbalancer】还在用Ribbon?试试Spring自带的LoadBalancer吧

Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器, 用来替代Ribbon。 Spring官方提供了两种客户端都可以使用loadbalancer: RestTemplate:Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程…

【第二阶段】it关键字

1.invoke()函数 meThod1(1,2,3)等价meThod1.invoke(1,2,3) fun main() {val meThod1:(Int,Int,Int)->String{n1,n2,n3->val num"kotlin"println("num$num,n1$n1,n2$n2,,n3$n3")"num$num,n1$n1,n2$n2,,n3$n3,"}//调…

Vue响应式数据的原理

在 vue2 的响应式中,存在着添加属性、删除属性、以及通过下标修改数组,但页面不会自动更新的问题。而这些问题在 vue3 中都得以解决。 vue3 采用了 proxy 代理,用于拦截对象中任意属性的变化,包括:属性的读写、属性的…