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

传输层协议—UDP协议

传输层协议—UDP协议

文章目录

  • 传输层协议—UDP协议
      • 传输层
      • 再谈端口号
      • 端口号范围划分
      • pidof
      • netstat
    • UDP协议端格式
      • UDP报文
      • UDP特点
      • UDP缓冲区
      • 基于UDP的应用层协议

传输层

在学习HTTP/HTTPS等应用层协议时,为了方便理解,可以简单认为HTTP将请求和响应直接发送到网络中。实际上HTTP是将数据打包交付给下层传输层,然后传输层协议对该数据进行处理后继续向下交付,该过程贯穿成功网络协议栈,最后才将数据发送到网络中。

传输层负责将数据通过网络发送到对方主机的传输层的接收缓冲区中。因此为了方便理解,在学习传输层协议时可以简单认为传输层是直接将数据发送到网络中。

再谈端口号

端口号(Port)标识了一个主机上进行通信的不同的应用程序

当主机从网络中获取到对方发送过来的数据时,将数据自底向上进行解包交付,交付到传输层时,传输层协议要通过端口号将数据交付给应用层的指定进程(程序)。

image-20231001161950968

  • 由于端口号属于传输层概念,因此自底向上交付到传输层的报文的报头内就含有端口号,解包后传输层协议能拿到该端口号,根据该端口号将有效载荷交付给对应的程序。

五元组标识一个通信

在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信。

  • 源IP和源端口号标识发来报文的来源主机和来源服务程序,目的IP标识网络中接收数据的主机,目的端口号标识的是传输层向上交付的应用层服务程序。
  • 协议号标识的是发送方接收方双方规定所使用的协议。

image-20231001163026001

例如服务器的IP是172.20.100.32,该服务器上有多进程版服务程序。有两个客户端连接上了服务器。因此服务器收到不同的客户端发送来的请求,是根据源IP区别出不同的主机、根据源端口号区别出目标主机上的不同程序。而客户端B发送请求给服务器需要根据目的IP找到服务器主机,目的端口号找到目标主机的服务程序。

image-20231001184231904

  • 通过源IP、目标IP、协议号、源端口号、目的端口号这五个数字标识一个通信。

五元组可以通过netstat -n查看

image-20231002123336854

  • 假如本地是服务器,那么从服务器的角度查看,Local Address对应的是目的IP和目的端口号,Foreign Address对应的是源IP和源端口号。

端口号范围划分

0—1023:知名端口号,例如HTTP,FTP,SSH等这些广为使用的应用层协议,这些端口号都是固定的。

知名端口号有:

  • ssh服务器, 使用22端口
  • ftp服务器, 使用21端口
  • telnet服务器, 使用23端口
  • http服务器, 使用80端口
  • https服务器, 使用443

1024—65535:操作系统动态分配的端口号,客户端程序的端口号, 就是由操作系统从这个范围分配的。

可以通过指令查询刀知名端口号

cat /etc/services

image-20231002114755196

因此我们自己写服务器使用端口号时,就需要避开这些知名端口号。

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

数据自底向上交付时,在传输层需要找到数据报头内含的目的端口号对应的进程,并交付给该进程,这注定着一个端口号只能标识一个进程,不能一个端口号标识多个进程。因此一个端口号只能被一个进程bind。

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

一个端口号只能bind一个进程,但一个进程可以bind多个端口号。服务器具备多种功能时,客户端就需要根据不同的功能,选择不同的端口号进入同一个服务器,即从不同的端口号进入同一个进程。

pidof

pidof 进程:查询到该进程的pid。

image-20231002120619634

xargs:将管道传输过来的内容尾接到后面的指令后面。例如图中的 pid httpserver | xargs kill -9管道传输过来httpserver的pid,xargs将该pid尾接到kill -9后面即给httpserver进程发送9号命令。

netstat

netstat 是一个用于查看网络连接和网络统计信息的命令行工具。它可以用来显示当前系统上的网络连接、路由表、接口统计信息等等。在 Linux 系统中,netstat 命令的用法如下:

netstat [options]

一些常用的选项包括:

  • -a:显示所有的连接,包括监听中和已建立的连接。
  • -t:显示 TCP 协议的连接。
  • -u:显示 UDP 协议的连接。
  • -n:以数字形式显示 IP 地址和端口号,而不是尝试进行 DNS 解析。
  • -p:显示与连接关联的进程信息。
  • -r:显示路由表。
  • -l:仅显示监听中的连接。
  • -atun:显示所有的TCP和UDP连接

image-20230825190401543

注意一下:这里出现了两个连接,原因在于服务器和客户端在同一台主机上,即服务器和客户端完成了本地环回,因此能看到两个连接。

UDP协议端格式

UDP报文

image-20231002124703979

  • 报文=报头+有效载荷。报头长度为8字节,即UDP报头为固定报头,当传输层收到UDP报文时,提取前8字节,剩下的为有效载荷,直接向上交付给应用层即可。
  • 报头内含16位源端口号,16位目的端口号,16位UDP长度,16位UDP校验和。当发送UDP报文给对方时,需要对整个UDP报文做检查,16位UDP校验和标识UDP报文的完整性。对方收到UDP报文后,先对整个UDP报文做检查,也形成一个16位UDP校验和,然后将形成的校验和与UDP报头的校验和做比对,若相同则说明UDP报文完整,没有在传输途中发生报文丢失。若校验和出错,就会直接将UDP报文丢弃。
  • 源端口号和目的端口号的长度是16位的原因是内核的端口号也是16位的,底层决定了上层数据长度。
  • 16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度。而2的16次方大约是64kb,这意味着UDP报文大小最大为64kb。因此通过UDP通信,报文大小大于64KB时,就需要将一个报文拆解成多个报文进行发送。
  • 应用层将数据以UDP协议的方式发送到网络中,其实是将数据自顶向下做封装。传输层拿到应用层交付的数据后,给该数据添加UDP报头,然后继续向下交付。

image-20231002155011305

  • 实际上报头是OS层面定制的协议。由于Linux内核是由C语言写的,因此可以把报头看作是一个结构体struct udp_hdr,那么传输层收到应用层交付过来的数据时,先开辟一块空间,空间容纳一个报头大小,将报头里面的属性填充,最后加上数据就成为一个报文了。

UDP特点

  • 无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接。
  • 不可靠:没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层 返回任何错误信息。UDP在传输层交付給下层就不关心了,即掉包后没有反应。
  • 面向数据报:不能够灵活的控制读写数据的次数和数量,給多少发多少。sendto 几次recvfrom几次。相比于:TCP可能发了很多次,而接收要根据应用层实现。

UDP缓冲区

image-20231002150359165

  • UDP没有真正意义上的发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后 续的传输动作。没有发送缓冲区使得上层应用层的send/write函数调用完直接返回,不用阻塞。因为该函数直接将数据拷贝到传输层,由传输层自主决定将数据拷贝到OS的内核缓冲区,拷贝完直接返回,因此函数不关心数据的发送。
  • UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致。如果缓冲区满了, 再到达的UDP数据就会被丢弃;
  • UDP的socket即能够读也能够写,虽然没有发送缓冲区,但是有接收缓冲区,因此通过UDP协议通信可以完成全双工通信。

基于UDP的应用层协议

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

当然, 也包括你自己写UDP程序时自定义的应用层协议。

相关文章:

传输层协议—UDP协议

传输层协议—UDP协议 文章目录 传输层协议—UDP协议传输层再谈端口号端口号范围划分pidofnetstat UDP协议端格式UDP报文UDP特点UDP缓冲区基于UDP的应用层协议 传输层 在学习HTTP/HTTPS等应用层协议时,为了方便理解,可以简单认为HTTP将请求和响应直接发送…...

【改造中序遍历】 538. 把二叉搜索树转换为累加树

538. 把二叉搜索树转换为累加树 解题思路 改造中序遍历算法因为中序遍历的结果都是有顺序的 升序排序,那么如果先遍历右子树 在遍历左子树 那么结果就是降序的最后我们设置一个变量 累加所有的中间值 那么得到的结果就是比当前节点大的所有节点的值 /*** Definiti…...

2022年11月工作经历

11月 招聘 最近招聘C程序员和黑盒测试员。由于第一次招聘不知道如何处理,不断和同事沟通,摸索出一套简单的规则。C程序员:力扣随机第二题,如果运气不好可以再随机一两次。黑盒测试员:力扣随机第二题或第三题&#xff…...

使用广播信道的数据链路层

使用广播信道的数据链路层 ​ 广播信道可以一对多通信。局域网使用的就是广播信道。局域网最主要的特点就是网络为一个单位所拥有,且地理范围和站点数目有限。局域网可按网络拓扑进行分为星形网、环形网、总线网。传统的以太网就是总线网,后来又演变为星…...

第3章-指标体系与数据可视化-3.1.2-Seaborn绘图库

目录 3.1.2 Seaborn绘图库 1. 带核密度估计的直方图 2. 二元分布图 一维正态分布 联合分布...

excel中将一个sheet表根据条件分成多个sheet表

有如下excel表,要求:按月份将每月的情况放在一个sheet中。 目测有6个月,就应该有6个sheet,每个sheet中体现本月的情况。 一、首先增加一个辅助列,月份,使用month函数即可。 填充此列所有。然后复制【月份】…...

案例突破——再探策略模式

再探设计模式 一、背景介绍二、 思路方案三、过程1. 策略模式基本概念2. 策略模式类图3. 策略模式基本代码策略类抽象策略类Context类客户端 4. 策略模式还可以进行优化的地方5. 对策略模式的优化(配置文件反射) 四、总结五、升华 一、背景介绍 在做项目…...

uboot启动流程-涉及lowlevel_init汇编函数

一. uboot启动流程涉及函数 之前文章简单分析了 uboot启动流程的开始,从链接脚本文件 u-boot.lds 中,我们已经知道了入口点是 arch/arm/lib/vectors.S 文件中的 _start函数。 _start函数:调用了 reset 函数,reset 函数内部&…...

质数距离 - 如何在较合理的时间复杂度内求2e9范围内的质数

求l、r之间的质数&#xff0c;范围在2e9&#xff0c;但l、r的差值不大&#xff0c;在1e6范围内 先求出 内的质数&#xff0c;然后拿这个指数去筛[l, r]范围内的即可 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \…...

八、3d场景的区域光墙

在遇到区域展示的时候我们就能看到炫酷的区域选中效果&#xff0c;那么代码是怎么编辑的呢&#xff0c;今天咱们就好好说说&#xff0c;下面看实现效果。 思路&#xff1a; 首先&#xff0c;光墙肯定有多个&#xff0c;那么必须要创建一个新的js文件来作为他的原型对象。这个光…...

深入探讨 Presto 中的缓存

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 Presto是一种流行的开源分布式SQL引擎&#xff0c;使组织能够在多个数据源上大规模运行交互式分析查询。缓存是一种典型的提高 Presto 查询性能的优化技术。它为 Prest…...

3.物联网射频识别,(高频)RFID应用ISO14443-2协议,(校园卡)Mifare S50卡

一。ISO14443-2协议简介 1.ISO14443协议组成及部分缩略语 &#xff08;1&#xff09;14443协议组成&#xff08;下面的协议简介会详细介绍&#xff09; 14443-1 物理特性 14443-2 射频功率和信号接口 14443-3 初始化和防冲突 &#xff08;分为Type A、Type B两种接口&…...

【IDEA】IDEA 单行注释开头添加空格

操作 打开 IDEA 的 Settings 对话框&#xff08;快捷键为CtrlAltS&#xff09;&#xff1b;在左侧面板中选择Editor -> Code Style -> Java&#xff1b;在右侧面板中选择Code Generation选项卡&#xff1b;将Line comment at first column选项设置为false使注释加在行开…...

三等分功分器[波导]设计详细教程

想必大家通过阅读相关文献可以发现三等分实现可以有很多不同的方法&#xff0c;这里采用的是先不等分再等分的方式&#xff0c;仅供参考。 主要指标 中心频率为280GHz&#xff0c;采用WR-3频段的标准波导&#xff0c;将2:1不等功率分配耦合器与3dB等功率分配耦合器级联&#…...

Mysql分库分表

1.原理 2.Sharding JDBC 官网https://shardingsphere.apache.org/ 2.1 水平拆分 创建一个新的springboot项目 导入依赖,直接将原本的dependencies给覆盖掉 <dependencies><!-- ShardingJDBC依赖 --><dependency><groupId>org.apache.shardings…...

【算法学习】-【双指针】-【复写零】

LeetCode原题链接&#xff1a;1089. 复写零 下面是题目描述&#xff1a; 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入的数组 …...

【算法优选】双指针专题——叁

文章目录 &#x1f60e;前言&#x1f333;[两数之和](https://leetcode.cn/problems/he-wei-sde-liang-ge-shu-zi-lcof/)&#x1f6a9;题目描述&#xff1a;&#x1f6a9;算法思路&#xff1a;&#x1f6a9;算法流程&#xff1a;&#x1f6a9;代码实现 &#x1f384;[三数之和]…...

Java栈的压入、弹出序列(详解)

目录 1.题目描述 2.题解 方法1 方法2 1.题目描述 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序&#xff0c;序列4,5,3,2,1是该压栈序…...

RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)

MQ&#xff08;message queue&#xff09;&#xff1a;本质上是个队列&#xff0c;遵循FIFO原则&#xff0c;队列中存放的是message&#xff0c;是一种跨进程的通信机制&#xff0c;用于上下游传递消息。MQ提供“逻辑解耦物理解耦”的消息通信服务。使用了MQ之后消息发送上游只…...

PyTorch - 模型训练损失 (Loss) NaN 问题的解决方案

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/133378367 在模型训练中&#xff0c;如果出现 NaN 的问题&#xff0c;严重影响 Loss 的反传过程&#xff0c;因此&#xff0c;需要加入一些微小值…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...