计算机网络(八) —— Udp协议
目录
一,再谈端口号
1.1 端口号
1.2 netsta命令
二,UDP协议
2.1 关于UDP
2.2 Udp协议格式
2.3 Udp协议特点
2.4 Udp的缓冲区
一,再谈端口号
http协议本质是“请求 - 响应”形式的协议,但是应用层需要先将数据交给传输层,然后由传输层对数据做进一步处理后再将数据继续向下层交付,最终贯穿整个网络协议栈,最终就发送到了网络当中
传输层负责可靠性传输,确保数据能够可靠地传送到目标地址。
1.1 端口号
- 在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”这样一个五元组来标识一个通信
- 0 - 1023这些端口号被称为知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,它们的端口号都是固定的(ssh服务器是22端口,ffp是21,telnet是23,smtp邮件协议是25,mysql数据库是3306,这些都是常用的服务器,为了方便使用它们都用固定的端口号)
- 1024 - 65535是操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个返回分配的
通过netstat命令可以查看到这样地五元组信息:

出了netstat命令,我们也可以查看 /etc/services 文件,查看网络服务名和它们对应使用地端口号和协议:

1.2 netsta命令
netstat命令
这个我们上面已经用过了,是查看网络状态地重要命令,下面是选项介绍:
- n:拒绝显示别名,能显示数字的全部转为数字
- l:仅列出处于LISTEN监听状态的服务
- p:显示建立相关链接的程序名
- t:仅显示协议号为tcp相关的选项
- u:仅显示协议号为udp相关的选项
- a:显示所有选项,默认不显示LISTEN相关
我们查看Tcp相关网络信息时,一般用nltp;查看Udp时,一般用nlup:

二,UDP协议
2.1 关于UDP
我们前面用的各种sock API,都是系统提供的,我们可以通过这些接口搭建上层应用,比如http就是基于Tcp的,因为http就是再Tcp套接字基础上搭建的
应用层往下就是传输层,也是属于操作系统的,所以也由操作系统管理,所以Udp是存在与内核中的,是操作系统的网络协议栈自带的,所以也就是说,Udp所有的功能由操作系统完成
2.2 Udp协议格式
下面是Udp协议报头的图形化:

- 16位源端口号:表示数据从哪里来
- 16位目的端口号:表示数据要去哪里
- 16位UDP长度:表示整个数据报的长度(UDP首部 + UDP数据)
- 16位UDP校验和:如果UDP报文的检验出错,就会直接将报文丢弃
我们之前就说过,学习任何协议,都要回答下面两个问题:
问题:UDP如何将报头和有效载荷分离?
解答:UDP采用的是定长报头,报头是操作系统加的,所以分离报头时就会简单很多
问题:UDP协议如何将有效载荷交付给上层哪一个协议?
解答: 应用层每一个网络进程都会绑定一个端口,服务器是绑定固定报头,客户端是绑定随机报头,所以UDP就是通过报头当中的“16为目的端口号”来找到对应的进程的,该操作是通过哈希的映射完成的
操作系统是C语言为底层语言,所以UDP协议也一定是用C语言写的,UDP报头实际就是一个位段类型,例如:
struct udp_struct
{uint32_t src_port:16;uint32_t dst_poet:16;uint32_t length:16;uint32_t check_code:16;
};
-
这个东西我们在语言上叫做“位段”,在协议上叫做“UDP报头”,是自定义类型,是类型,可以定义变量,也可以new开辟空间(struct udp_header h; h.src_port=1234; h.dst=8888等等)
-
然后操作系统里就存在着大量的UDP报文,先描述再组织,所以操作系统内是有着很多描述报文的结构体的,这个结构体叫做 sk_buff,所以操作系统在封装报文时,先定义一个缓冲区,然后把udp_struct里的东西拷贝进来
-
然后再把用户要发送的数据拷贝进来,然后sk_buff里面的start指向缓冲区开头,end指向缓冲区结尾,然后我们对还没来得及发的UDP报文用sk_buff描述起来,然后把很多个sk_buff结构体用链表组织起来
-
当接收缓冲区满了就丢弃UDP,也就是干掉对应的sk_buff然后释放掉udp_struct
-
把报文往上下层交付,也就是把结构体叫做IP层对应的一套方法,然后对缓冲区的数据再做封装
关于位段可以看咱远古时期的一篇文章:C语言进阶——自定义类型_c语言自义类型-CSDN博客
2.3 Udp协议特点
- 无连接:知道目的IP和端口就行,直接进行传送,不需要建立连接
- 不可靠:没有确认机制,也没有重传机制,如果因为网络问题导致数据没有完整发给对方,也不会有任何报错
- 面向数据报:不够灵活的控制读写数据的次数和数量
面向数据报:应用层交给UDP多长的报文,UDP原样发送,不做任何的拆分和合并
比如用UDP传输100字节的数据:
- 发送端调用sendto,发100个字节,那么接受端必须调用recvfrom一次接收100个,而不能调用10此recvfrom一次接收10个
2.4 Udp的缓冲区
- UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,然后再由内核将数据贯穿协议栈进行后续的传输动作
- UDP具有接收缓冲区,但是一旦缓冲区满了,后续到达的UDP数据会直接丢弃
- UDP的socket能读能写,所以UDP是全双工的
相关文章:
计算机网络(八) —— Udp协议
目录 一,再谈端口号 1.1 端口号 1.2 netsta命令 二,UDP协议 2.1 关于UDP 2.2 Udp协议格式 2.3 Udp协议特点 2.4 Udp的缓冲区 一,再谈端口号 http协议本质是“请求 - 响应”形式的协议,但是应用层需要先将数据交给传输层&…...
【Linux篇】TCP/IP协议(笔记)
目录 一、TCP/IP协议族体系结构 1. 数据链路层 (1)介绍 (2)常用协议 ① ARP协议(Address Resolve Protocol,地址解析协议) ② RARP协议(Reverse Address Resolve Protocol&…...
std::pair和std::tuple
提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问: 本文目标: 一、背景 最近 std::pair和std::tuple 二、用法 1.1 创建 看代码规范,提到:通过std::pair 和std::tuple ,函数可以同…...
Access denied for user ‘root‘@‘114.254.154.110‘ (using password: YES)
navicat 连接远程服务器报错 1045 - Access denied for user root114.254.154.110 (using password: YES)报错解释: 这个错误表示客户端从IP地址114.254.154.110尝试以用户’root’身份连接到MySQL服务器时,被拒绝访问。原因可能是密码错误、用户’roo…...
深度学习03-神经网络01-什么是神经网络?
神经网络的基本概念 人工神经网络(Artificial Neural Network,ANN): 是一种模仿生物神经网络的计算模型。由多个神经元(或称为节点)组成,这些节点通过不同的连接来传递信息。 每个神经元可以接…...
Redisson 分布式锁的使用详解
一、分布式锁的概述 1.1 分布式锁的背景 在单机系统中,Java 提供了 synchronized 和 Lock 等锁机制来确保并发情况下的线程安全。然而,在分布式系统中,多个服务实例运行在不同的物理或虚拟机上,无法直接使用这些本地的锁机制来控…...
计算机网络:物理层 --- 基本概念、编码与调制
目录 一. 物理层的基本概念 二. 数据通信系统的模型 三. 编码 3.1 基本概念 3.2 不归零制编码 3.3 归零制编码 3.4 曼切斯特编码 3.5 差分曼切斯特编码 编辑 四. 调制 4.1 调幅 4.2 调频 4.3 调相 4.4 混合调制 今天我们讲的是物理…...
使用Maven创建一个Java项目并在repository中使用
JDK环境:1.8.0_371 Maven环境 :Apache Maven 3.6.3 配置完成jdk和mvn后,进入到指定文件夹下执行如下语句: mvn archetype:generate -DgroupIdtop.chengrongyu -DartifactIdCyberSpace -DarchetypeArtifactIdmaven-archetype-quic…...
如何使用IIC外设(硬件IIC)
本文重点叙述如何使用芯片自带的 IIC 外设,即硬件 IIC,实现 IIC 通信。文章《IIC通信基础_cpu的iic通信-CSDN博客》 中,叙述了软件 IIC 通信和硬件 IIC 通信的区别, 并且重点叙述了 IIC 的通信协议。在使用软件进行 IIC 通信时&am…...
使用 Vue 3、Vite 和 TypeScript 的环境变量配置
使用 Vue 3、Vite 和 TypeScript 的环境变量配置 在开发现代前端应用时,环境变量是一个非常重要的概念。它可以帮助我们根据不同的环境(开发、测试、生产)配置不同的行为,比如 API 请求地址、调试选项等。在 Vue 3、Vite 和 Type…...
F28335 的串行外设接口(以下简称 SPI)
1 SPI 介绍 1.1 SPI 简介 1.2 F28335 的 SPI模块介绍 (1)F28335 的 SPI 特点...
科技引领未来生活——“光影漫游者”展览馆应用—轻空间
随着科技的快速发展,展览馆作为展示文化、科技和艺术的场所,正逐渐从传统的静态展示向高科技互动体验转变。由轻空间打造的“光影漫游者”展览馆,凭借其前沿的气承式结构和智能化系统,将参观者带入了一个未来感十足、充满科技魅力…...
ego-planner开源代码之启动参数介绍分析
ego-planner开源代码之启动参数介绍&分析 1. 源由2. 逻辑分析3. 启动参数section 1 三维地图尺寸section 2 里程计话题映射section 3 advanced_param.xml配置section 3.1section 3.2section 3.3section 3.4section 3.5section 3.6section 3.7section 3.8 section 4 轨迹服务…...
828 华为云征文|华为 Flexus 云服务器打造 Laverna 在线笔记应用
一、引言 在当今数字化时代,高效的笔记管理工具对于学习、工作和生活都至关重要。Laverna 作为一款功能强大的开源在线笔记应用,提供了 Markdown 编辑、加密支持等特性,是替代 Evernote 的绝佳选择。在 2024 年 9 月 14 日这个充满创新的日子…...
数据结构与算法-Trie树添加与搜索
trie树的使用场景 我们若需要制作一个通讯录的软件,使用常规树结构查询的复杂度为O(logn),但trie树的复杂度确与数据多少无关,与单词长度有关,这就大大缩减的查询的时间复杂度。 trie树的基本实现 基础结构 package com.study.trieDemo;i…...
AIGC专栏15——CogVideoX-Fun详解 支持图文生视频 拓展CogVideoX到256~1024任意分辨率生成
AIGC专栏15——CogVideoX-Fun详解 支持图&文生视频 拓展CogVideoX到256~1024任意分辨率生成 学习前言项目特点生成效果相关地址汇总源码下载地址 CogVideoX-Fun详解技术储备Diffusion Transformer (DiT)Stable Diffusion 3EasyAnimate-I2V 算法细节算法组成InPa…...
BFS 解决多源最短路问题
文章目录 多源BFS542. 01 矩阵题目解析算法原理代码实现 1020. 飞地的数量题目解析算法原理 1765. 地图中的最高点题目解析算法原理代码实现 1162. 地图分析题目解析算法原理代码实现 多源BFS 单源最短路: 一个起点、一个终点 多源最短路: 可以多个起点…...
论文笔记:交替单模态适应的多模态表征学习
整理了CVPR2024 Multimodal Representation Learning by Alternating Unimodal Adaptation)论文的阅读笔记 背景MLA框架实验Q1 与之前的方法相比,MLA能否克服模态懒惰并提高多模态学习性能?Q2 MLA在面临模式缺失的挑战时表现如何?Q3 所有模块是否可以有…...
鸿蒙OS 线程间通信
鸿蒙OS 线程间通信概述 在开发过程中,开发者经常需要在当前线程中处理下载任务等较为耗时的操作,但是又不希望当前的线程受到阻塞。此时,就可以使用 EventHandler 机制。EventHandler 是 HarmonyOS 用于处理线程间通信的一种机制,…...
执行 npm报错 Cannot find module ‘../lib/cli.js‘
报错 /usr/local/node/node-v18.20.4-linux-x64/bin/npm node:internal/modules/cjs/loader:1143 throw err; ^ Error: Cannot find module ../lib/cli.js Require stack: - /usr/local/node/node-v18.20.4-linux-x64/bin/npm at Module._resolveFilename (node:inter…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
