当前位置: 首页 > news >正文

【Linux】传输层协议——UDP

零、传输层的作用是负责数据能够从发送端传输到接收端

一、再来认识一下端口号

       端口号(Port)标识了一个主机进行通信的不同的应用程序。在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”这样一个五元组来标识一个通信(可以通过netstat -n查看)。

netstat -n

端口号范围划分:

  • 0 - 1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号都是固定的。
  • 1024 - 65535:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围随机分配的。

认识知名端口号:

       有些服务器是非常有用的,为了方便使用,人们约定一些常用的服务器,都是用以下这些固定的端口号:

  • ssh服务器:使用22端口号
  • ftp服务器:使用21端口
  • telnet服务器:使用23端口号
  • http服务器:使用80端口号
  • https服务器:使用443端口号
cat /etc/services  // 使用该命令可以看到知名端口号

下面来思考两个问题:

一个进程是否可以bind多个端口号?

        可以的,因为在一个进程中,我们可以使用TCP套接字,也可以使用UDP套接字,两个套接字可以分别bind在同一个进程中。

一个端口号是否可以被多个进程bind?

        不可以,因为不满足一个端口号对应一个进程的原则。

端口号在操作系统中如何理解?

       在操作系统内部会维护一个哈希表用于存储进程和端口号的对应关系。在进程中,通过bind可以将端口号与进程插入到哈希表中。

二、UDP协议

2.1 UDP协议的格式(报头长度固定,为20字节)

       UDP格式还是比较简单的,相对比于TCP协议的格式。报头部分只有四个部分:16位源端口号,16位目的端口号,16位UDP长度,16位UDP校验和;有效载荷部分是数据(如果有)。

  • 16位源端口号:表示这个数据报是由谁发送的;
  • 16位目的端口号:表示这个数据发送给谁;
  • 16位UDP长度:表示整个数据报(UDP首部 + UDP数据)的最大长度;
  • 如果校验和出错,就会直接丢弃。

2.2 UDP的特点

UDP传输的过程类似于寄信。UDP是无连接,不可靠,面向数据报的协议。

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

2.3 面向数据报

        在应用层学习套接字的时候,我们知道UDP发送数据是直接发送数据报,没有粘包问题;而TCP发送数据是直接发送字节流,有粘包问题。

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

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

2.4 UDP的缓冲区

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

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

2.5 UDP使用注意事项

       我们注意到UDP协议首部中有一个16位的最大长度,也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)。然而64K在当今的互联网下是一个非常小的数字。如果我们需要传输的数据超过64K,就需要再应用层中手动分包,多次发送,并在接收端手动拼装。

       但是在这里,UDP的数据报也不能太大,因为在数据链路层中需要限制每次传输数据的大小,所以,在这里UDP的数据报也可能受到该影响。

2.6 基于UDP的应用层协议

  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议(用于无盘设备启动)
  • DNS:域名解析协议

三、操作系统管理UDP

       在网络基础中,我们学习了操作系统,硬件,用户和网络协议栈的联系,发现网络协议栈中的TCP层和IP层是在操作系统内核中实现的。下面,我们来看一看在代码层面上实现的UDP协议:

3.1 UDP报文的代码实现

       协议是通信双方约定好的数据结构,我们可以根据这个数据结构填充信息,然后发送给对方,对方也可以根据该数据结构将信息提取出来进行处理。在上面我们已经了解UDP报文的格式,所以在代码层面中,我们会很容易写出结构体:

#include <linux/types.h>struct udphdr
{__be16 source;__be16 dest;__be16 len;__sum16 check;
}

3.2 UDP报文如何封装和解包

       在操作系统中,在网络协议中,可以同时存在很多个已经收到的报文,但是这写报文还没有进行处理;甚至拷贝到传输层的接受缓冲区;甚至没有交给传输层而是在网络层和数据链路层中存在。因此,操作系统需要将这些报文进行管理起来,需要先描述,再组织。怎么组织呢???

       我们可以使用链表将他们组织起来,在struct sk_buffer结构体中,我们需要使用两个指针来指向协议中报头的位置和正文的位置,还有一个指针是用来形成链表的。我们可以通过指针的操作进行存储报头和分解报头。

相关文章:

【Linux】传输层协议——UDP

零、传输层的作用是负责数据能够从发送端传输到接收端 一、再来认识一下端口号 端口号&#xff08;Port&#xff09;标识了一个主机进行通信的不同的应用程序。在TCP/IP协议中&#xff0c;用“源IP”&#xff0c;“源端口号”&#xff0c;“目的IP”&#xff0c;“目的端口号”…...

算法学习攻略总结 : 入门至进阶,通关之路指南

❃博主首页 &#xff1a; <码到三十五> ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a; <搬的每块砖&#xff0c;皆为峰峦之基&#xff1b;公众号搜索(码到…...

《卷积神经网络 CNN 原理探秘》

CNN基本原理详解 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称CNN&#xff09;&#xff0c;是一种前馈神经网络&#xff0c;人工神经元可以响应周围单元&#xff0c;可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 卷积神经网络是受…...

C#获取计算机信息

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Management; n…...

派遣函数 - 通过设备链接打开设备

利用文件IO相关的Wn32API对设备进行“打开”和“关闭”操作。要打开设备&#xff0c;必须通过设备的名字才能得到该设备的柄。前面介绍过&#xff0c;每个设备都有设备名称&#xff0c;如HelloDDK驱动程序的设备名为“Device\\MyDDKDevice”&#xff0c;但是设备名无法被用户模…...

Vue 2 中的 `$set` 方法详解

在 Vue 2 中&#xff0c;响应式数据的更新非常重要&#xff0c;因为它确保了当数据改变时&#xff0c;视图能够自动更新。Vue 使用一套高效的机制来追踪依赖并在数据变化时更新视图。然而&#xff0c;在某些情况下&#xff0c;直接修改对象的属性可能不会触发视图更新。这时&am…...

掌握Hive函数[2]:从基础到高级应用

目录 高级聚合函数 多进一出 1. 普通聚合 count/sum... 2. collect_list 收集并形成list集合&#xff0c;结果不去重 3. collect_set 收集并形成set集合&#xff0c;结果去重 案例演示 1. 每个月的入职人数以及姓名 炸裂函数 概述 案例演示 1. 数据准备 1&#xff09;表…...

水壶问题记录

https://leetcode.cn/problems/water-and-jug-problem/description/?envTypestudy-plan-v2&envId2024-spring-sprint-100...

spring综合性利用工具-SpringBootVul-GUI(五)

项目地址 https://github.com/wh1t3zer/SpringBootVul-GUI 0x01简介 本着简单到极致的原则&#xff0c;开发了这么一款半自动化工具&#xff08;PS&#xff1a;这个工具所包含了20个漏洞&#xff0c;开发不易&#xff0c;有任何问题可提issue&#xff09; 尽管是一个为懒人量…...

2024年9月12日(k8s环境及测试 常用命令)

一、环境准备及测试 1、报错处理&#xff1a; kube-system calico-node-5wvln 0/1 Init:0/3 0 16h kube-system calico-node-d7xfb 0/1 Init:0/3 0 16h ku…...

卫生间漏水原因很多,切莫病急乱投医

有位业主说他家卫生间背面的墙湿了&#xff0c;邻居家正好在装修&#xff0c;把家具拆掉以后发现墙面上有一片已经湿了。      和业主相约去现场看看&#xff0c;去楼下业主家看了看&#xff0c;顶面是干燥的&#xff0c;这就说明不往楼下漏水。      这就奇怪了&#…...

IEEE 802.11a OFDM系统的仿真(续)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第九章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all %%%%%%%参数设计部分%%%%%%%Nsp52;%系统子载波数&#xff08;不包括直流载波&#xff09; Nfft64;%FFT长度 Ncp16;…...

Linux cut命令详解使用:掌握高效文本切割

cut 是 Linux 中一个用于从文本文件或标准输入中提取指定字段的命令。它根据分隔符或者字符位置来裁剪文本&#xff0c;是处理文本文件中的字段、列和子字符串的常用工具。 基本语法 cut [选项] 文件或 命令 | cut [选项]常用选项 -b&#xff1a;按字节位置切割&#xff08…...

c++11新特性——endable_shared_from_this

文章目录 一.解决场景代码示例原因 二.解决办法代码 三.底层原理 一.解决场景 一个share_ptr管理的类&#xff0c;如果从类的函数里返回类对象&#xff08;this指针&#xff09;&#xff0c;导致share_ptr引用计数错误&#xff0c;析构时异常问题 代码示例 #include <mem…...

小程序的右侧抽屉开关动画手写效果

<template><view><button click"openDrawer">打开抽屉</button><view v-if"showDrawer" class"drawer" :style"{ backgroundColor: bgColor }" click"closeDrawer"><view class"draw…...

vue3中el-table中点击图片放大时,被表格覆盖

问题&#xff1a;vue3中el-table中点击图片放大时&#xff0c;被表格覆盖。 解决方法&#xff1a;el-image 添加preview-teleported <el-table-column label"封面图" prop"coverUrl"><template #default"scope"><el-imagestyle&q…...

GO学习笔记(4) strconv/time

目录 strconv包1、string与bool之间的转换2、string与int之间的转换 time包1、常用常量定义2、Now&#xff08;&#xff09;获取当前年月日时分秒3、Format&#xff08;&#xff09;时间格式化4、Parse&#xff08;&#xff09;/ ParseInLocation&#xff08;&#xff09;解析时…...

课程管理系统-数据库-基于MySQL的数据库课程设计

目录 前言一、需求分析二、设计数据库模型1.实体关系图(ERD)2.表结构设计三、创建数据库和表四、插入数据五、查询数据六、更新和维护七、安全性与性能优化总结前言 设计一个数据库课程(或任何课程管理系统)时,我们首先需要明确系统的需求和目标。以下是一个基于MySQL的数…...

降维打击 华为赢麻了

文&#xff5c;琥珀食酒社 作者 | 积溪 真是赢麻了 华为估计都懵了 这辈子还能打这么富裕的仗&#xff1f; 其实在苹果和华为的发布会召开之前 我就知道华为肯定会赢 但我没想到 苹果会这么拉胯 华为这是妥妥的降维打击啊 就说这苹果iPhone 16吧 屏幕是变大了、颜色…...

[数据集][目标检测]汽车头部尾部检测数据集VOC+YOLO格式5319张3类别

数据集制作单位&#xff1a;未来自主研究中心(FIRC) 版权单位&#xff1a;未来自主研究中心(FIRC) 版权声明&#xff1a;数据集仅仅供个人使用&#xff0c;不得在未授权情况下挂淘宝、咸鱼等交易网站公开售卖,由此引发的法律责任需自行承担 数据集格式&#xff1a;Pascal VOC格…...

cv_resnet50_face-reconstruction效果对比:不同光照/姿态下人脸重建质量实测报告

cv_resnet50_face-reconstruction效果对比&#xff1a;不同光照/姿态下人脸重建质量实测报告 你是不是也好奇&#xff0c;一个基于ResNet50的人脸重建模型&#xff0c;到底能把一张照片还原到什么程度&#xff1f;它能不能处理好那些光线不好、角度刁钻的照片&#xff1f;今天…...

OpenClaw隐私保护:GLM-4.7-Flash本地处理敏感数据的实践方案

OpenClaw隐私保护&#xff1a;GLM-4.7-Flash本地处理敏感数据的实践方案 1. 为什么需要本地化AI处理敏感数据&#xff1f; 去年我在处理公司财务报告自动化时遇到一个棘手问题&#xff1a;使用云端AI服务需要上传包含客户隐私的Excel文件到第三方服务器。尽管服务商承诺数据安…...

Vulkan与OpenGL深度解析——现代图形渲染的技术演进

1. 从OpenGL到Vulkan&#xff1a;图形渲染的进化之路 还记得我第一次接触图形编程时&#xff0c;OpenGL就像一位和蔼的老教授&#xff0c;把复杂的GPU操作封装成简单的API调用。但随着项目复杂度提升&#xff0c;我逐渐发现这位"老教授"的教学方式有些过时——它隐藏…...

如何通过AndroidAnnotations与Kotlin扩展函数实现极速Android开发:新手必备指南

如何通过AndroidAnnotations与Kotlin扩展函数实现极速Android开发&#xff1a;新手必备指南 【免费下载链接】androidannotations Fast Android Development. Easy maintainance. 项目地址: https://gitcode.com/gh_mirrors/an/androidannotations AndroidAnnotations是…...

Phi-3-mini-128k-instruct实战案例:中小企业技术文档自动解析与结构化提取

Phi-3-mini-128k-instruct实战案例&#xff1a;中小企业技术文档自动解析与结构化提取 1. 项目背景与价值 对于中小企业而言&#xff0c;技术文档管理一直是个令人头疼的问题。工程师们经常需要从大量PDF、Word文档中提取关键信息&#xff0c;手动整理成结构化数据。这个过程…...

自媒体人的秘密武器:OpenClaw+nanobot自动生成视频字幕文件

自媒体人的秘密武器&#xff1a;OpenClawnanobot自动生成视频字幕文件 1. 为什么我们需要自动化字幕生成 作为一个长期在视频创作领域摸索的自媒体人&#xff0c;我深知字幕制作这个环节有多折磨人。曾经为了给一段10分钟的视频添加字幕&#xff0c;我需要反复暂停播放、手动…...

2026-03-27:替换至多一个元素后最长非递减子数组。用go语言,给定一个整数数组 nums。 你最多只能选择其中一个位置的元素,把它改成任意整数(也可以选择不改)。 在允许这种“最多一次改动”的

2026-03-27&#xff1a;替换至多一个元素后最长非递减子数组。用go语言&#xff0c;给定一个整数数组 nums。 你最多只能选择其中一个位置的元素&#xff0c;把它改成任意整数&#xff08;也可以选择不改&#xff09;。 在允许这种“最多一次改动”的情况下&#xff0c;求能得到…...

步进电机复位翻车实录:从堵转到精准归位的5个调试技巧

步进电机复位翻车实录&#xff1a;从堵转到精准归位的5个调试技巧 去年夏天&#xff0c;我接手了一个工业自动化项目&#xff0c;需要精确控制12台42步进电机同步复位。本以为是个常规任务&#xff0c;结果第一周就遭遇了集体"罢工"——有的电机原地抖动不归零&#…...

MambaAD实战:5分钟搞定工业缺陷检测的SoTA模型部署(附代码)

MambaAD工业缺陷检测实战&#xff1a;从模型原理到产线部署全指南 引言&#xff1a;当状态空间模型遇见工业质检 在液晶面板生产线上&#xff0c;一个0.1mm的亮点缺陷可能导致整批产品报废&#xff1b;在汽车零部件铸造车间&#xff0c;细微的表面裂纹可能引发严重的安全隐患。…...

2026年03月GESPC++二级真题解析(含视频)

视频讲解&#xff1a;GESP2026年3月二级C真题讲解 一、单选题 第1题 解析&#xff1a; 答案B&#xff0c;ACD选项都是向机器人输入信息&#xff0c;是输入设备 第2题 解析&#xff1a; 答案D&#xff0c;判断是 “ 菱形框 ” 第3题 解析&#xff1a; 答案D&#xff0c;变…...