【网络】UDP协议——传输层、端口号、UDP协议、UDP协议端格式、UDP的特点、UDP的缓冲区、UDP使用注意事项

news2025/1/15 12:50:43

文章目录

  • Linux网络
    • 1. 传输层
      • 1.1 端口号
      • 1.2 UDP协议
        • 1.2.1 UDP协议端格式
        • 1.2.2 UDP的特点
        • 1.2.3 UDP的缓冲区
        • 1.2.3 UDP使用注意事项
        • 1.2.5 基于UDP的应用层协议

Linux网络

1. 传输层

  传输层:是 OSI 模型和 TCP/IP 模型中的重要层次,位于网络层之上、应用层之下。其主要职责是为不同进程之间提供端到端的(发送端到接收端)、可靠或不可靠的数据传输服务,实现复用和分用的功能,对网络层提供的服务进行增强。

  传输层协议:常见的传输层协议有 TCP(传输控制协议)和 UDP(用户数据报协议)。

  

1.1 端口号

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

  它是一个 16 位的整数,取值范围是 0 到 65535。端口号的作用是标识不同的应用程序或进程,使得网络中的数据能够准确地发送到目标应用程序。

在这里插入图片描述

  

  端口号换分为三类:

  熟知端口号:范围是 0 到 1023,这些端口号被分配给一些常见的应用层协议和服务。例如,HTTP 协议使用 80 端口,FTP 协议使用 21 端口。

  登记端口号:范围是 1024 到 49151,这些端口号通常被一些特定的用户进程或应用程序注册使用。

  动态(私有)端口号:范围是 49152 到 65535,这类端口号通常由客户端程序在运行时随机选择使用。

  

  在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看);

  
在这里插入图片描述

  

  认识知名端口号:

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

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

  执行下面的命令,可以看到知名端口号,我们自己写一个程序使用端口号时,要避开这些知名端口号。

cat /etc/services

  

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

  一个进程可以 bind 多个端口号。 一个服务器进程可能同时提供多种服务,每种服务使用不同的端口号。

  

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

  一个端口号在同一时刻不能被多个进程 bind 。这是为了避免端口冲突和数据混乱。但是要注意可能fork会导致父子进程绑定了同一个端口。

  

netstat

  netstat是一个用来查看网络状态的重要工具

  语法:netstat [选项]

  功能:查看网络状态

  常用选项:

  n 拒绝显示别名,能显示数字的全部转化成数字

  l 仅列出有在 Listen (监听) 的服務状态

  p 显示建立相关链接的程序名

  t (tcp)仅显示tcp相关选项

  u (udp)仅显示udp相关选项

  a (all)显示所有选项,默认不显示LISTEN相关

  

pidof

  在查看服务器的进程id时非常方便

  语法:pidof [进程名]

  功能:通过进程名,查看进程id

  

1.2 UDP协议

  UDP 协议(用户数据报协议)UDP 是一种无连接、不可靠的传输层协议。

在这里插入图片描述

  

1.2.1 UDP协议端格式

  UDP 协议的端格式由以下几个部分组成:

  源端口(Source Port):16 位字段,标识发送方进程所使用的端口号。

  目的端口(Destination Port):16 位字段,标识接收方进程所使用的端口号。

  长度(Length):16 位字段,指示包括 UDP 头部和数据在内的整个用户数据报的长度,单位为字节。

  校验和(Checksum):16 位字段,用于检测整个 UDP 数据报在传输过程中是否出现错误

在这里插入图片描述

  

1.2.2 UDP的特点

  UDP传输的过程类似于寄信。

  无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接。

  不可靠没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。

  面向数据报:UDP 把数据当作一个个独立的数据报进行处理,不能够灵活的控制读写数据的次数和数量。

  

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

  用UDP传输100个字节的数据:

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

  

1.2.3 UDP的缓冲区

  UDP 具有接收缓冲区和发送缓冲区。

  

发送缓冲区:

  实际上 UDP 没有真正意义上的发送缓冲区。当应用程序调用 sendto 函数发送数据时,UDP 只是简单地给数据加上头部,然后立即传递给网络层进行发送。

  但是,内核会把数据暂时保存一段时间,以等待是否有来自对端的应答,这段时间内数据会被保存在一个类似于缓冲区的地方。

  

接收缓冲区:

  接收缓冲区的大小有限,如果收到的数据报超出了缓冲区的大小,多余的数据将会被丢弃。

  由于 UDP 是无连接不可靠的协议,接收方应用程序未及时读取缓冲区中的数据时,新到达的数据可能会覆盖旧的数据。

  

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

  

1.2.3 UDP使用注意事项

  数据大小限制:UDP 能传输的数据最大长度为 64K(包含首部)。若数据超过此限制,必须在应用层进行分包处理,这增加了应用程序的复杂性,且分包与重组过程可能出错。例如,一个图像编辑软件通过网络传输大型图片文件,就需要在应用层将图片数据合理分包发送。

  

  缺乏拥塞控制:UDP 不会根据网络拥塞状况调整发送速率,可能导致网络拥塞加剧,影响其他网络应用的性能。比如在网络繁忙时,大量使用 UDP 的应用持续高速发送数据,可能导致整体网络速度下降。

  

  不可靠性没有确认和重传机制,数据丢失或出错难以恢复,对于重要数据可能造成严重后果。像远程医疗系统中关键的患者监测数据,若使用 UDP 传输且丢失,可能危及患者生命。

  

  无序到达数据包可能无序到达接收端,应用程序需要有处理乱序的能力。例如实时互动游戏中,玩家操作指令的数据包到达顺序可能混乱,需要游戏程序进行排序处理。

  

  端口管理要确保所使用的端口未被其他程序占用,避免端口冲突导致通信失败。假设一个新开发的网络应用选择了常用的 80 端口,而此端口已被 Web 服务占用,就会出现冲突。

  

  安全问题UDP 本身提供的安全性较低,数据容易被篡改或窃取。在涉及敏感信息传输时,如密码或个人身份信息,单纯使用 UDP 存在较大风险。

  

  兼容性不同的网络设备和系统对 UDP 的处理方式可能略有差异,需要进行充分的测试以确保兼容性。某些老旧的网络设备可能对较大的 UDP 数据包处理不佳。

  

1.2.5 基于UDP的应用层协议

  NFS: 网络文件系统

  TFTP: 简单文件传输协议

  DHCP: 动态主机配置协议

  BOOTP: 启动协议(用于无盘设备启动)

  DNS: 域名解析协议

  还包括我们自己写UDP程序时自定义的应用层协议

            

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

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

相关文章

推荐一个gpt镜像网站

包含现在主流的大语言模型 一个网站,各种模型随意切换和体验 集成多种功能 不止于对话,更有文生图,思维导图等多种功能 支持多个平台 除了网页版,更有安卓, mac os, ipad os等多个平台,随时随地方便同步和使用 …

【大模型】【智能体】agent导论

基本的图像 react: prompt:

营收保持增长,汽车之家掌握了什么“流量密码”?

从汽车之家新鲜出炉的“成绩单”来看,汽车行业的流量生意依然红火。 财报显示,2024年第二季度,汽车之家实现总营收18.7亿元,同比增长2.2%;经调整净利润5.72亿元,经调整净利润率达30.6%。其中,在…

MySQL:管理和操作数据表

数据表是数据库的重要组成部分,每一个数据库都是由若干个数据表组成的。没有数据表就无法在数据库中存放数据。MySQL数据表的管理和操作是数据库管理员和开发人员日常工作中不可或缺的一部分。 创建数据表 CREATE 创建数据表的过程是规定数据列的属性的过程&#…

数字图像处理 --- 图像的离散余弦变换(python实战)

图像的离散余弦变换(python实战) 这篇文章是我上两篇文章的延续,主要是觉得前面的文章太长了,所以把关于图像的DCT变换部分单独拎出来放到这里,这两篇文章分别是: 1,一维DCT 数字信号处理 --- 一维离散余弦变换(pyth…

搜维尔科技:【研究】Haption的自动识别技术

Real-Time Interaction for Delmia Human RTID Human “Real-Time Interaction for Delmia Human” 是个附加在Delmia V5™上的软件,它能让使用者使用数字人体模型在虚拟环境中进行实时互动仿真 在Delmia 中使用RTI ,使用者可以模拟进行以下研究: 1. 可…

table car vs. table cars:数据库命名用单数还是复数?

数据库的命名方式已经形成了许多共识,比如全部小写、下划线分隔、使用标准缩写等;其中就包括「使用单数名词」。 用户 jonr 在 reddit 网的程序员笑话(ProgrammerHumor)社区发了一篇帖子,调侃这些数据库命名方式的共识…

突破csdn每日15篇文章限制的方法

买一个vip年会员248元,就可以了.......

Linux-3:Shell编程——基础语法(0-50%)

目录 前言 一、变量 1.定义变量 2.使用变量 3.修改变量 4.将命令的结果赋值给变量 5.只读变量 6.删除变量 二、传递参数 三、字符串 1.字符串举例 2.统计字符串长度 3.字符串拼接 4.截取字符串 总结 前言 Shell是一种程序设计语言。作为命令语言,它…

算法学习day26

滑动窗口系列题 一、替换后的最长重复子串 给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后,返回 包含相同字母的最长子字符串的长度。 输入&#xff1a…

MySQL--MySQL函数

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 MySQL函数 一、MySQL函数简介 函数表示对输入参数值返回一个具有特定关系的值,MSOL提供了大量丰富的函数,在进行数据库管理以…

CTFHub——XSS全系列

1、反射型: 发现为表单式,猜测哪个可能存在注入漏洞,分别做测试注入发现name框存在xss漏洞 输入发现有回显但不是对方cookie,参考wp发现要用xss线上平台 将xss平台测试语句注入,将得到的url编码地址填入url框&#xf…

Mongodb集合操作

文章目录 1、进入容器2、如果数据库不存在,则创建数据库,否则切换到指定数据库3、在 MongoDB 中,创建集合不是必须操作。当你插入一些文档时,MongoDB 会自动创建集合。4、查看数据库列表5、查看集合6、显示创建集合7、删除集合 1、…

Raspberry Pi Docker 运行 IRIS

在 Raspberry Pi 上成功安装 Docker 后可以安装 IRIS 数据库。 安装的命令为: docker run --name my-iris -d --publish 1972:1972 --publish 52773:52773 intersystems/irishealth-community:latest-em-linux-arm64v8 注意,我们这里暴露了 2 个端口&a…

Spring框架 配置Gateway网关/spring cloud gateway 基础入门案例教程

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 网关作为微服务集群唯一的对外入口,可以实现很多功能. 例如: 统一的解决跨域(一个ajax请求 origin域名和请求目标url中域名不同,ip不同,域名不同,端口不同,都会引发的问题)问题. 统一的身份认证.认证解…

OpenStack Yoga版安装笔记(十)placement练习

1、练习场景说明 在OpenStack Yoga版安装笔记(九)中,placement已经在controller node虚拟机上安装完成,并且已经成功拍摄了快照。 此时,controller node虚机已经安装了keystone、keystone DB、glance、glance DB、Open…

反序列化漏洞vulhub靶场serial

环境搭建 下载 https://download.vulnhub.com/serial/serial.zip 解压出来就是这种 你会得到一个这样的文件,这里使用VMware新建一个虚拟机,这里记录比较重要的几部分。 这里就是使用我们刚才下过来的。 漏洞过程详解 1.信息收集 打开靶机&#xff0…

干货满满,从零到一:编程小白如何在大学成为编程大神?

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

Git(4) 解决Git相关问题的实用技巧

本文将介绍一些Git实用的技巧,实际操作中解决常见的Git问题。 问题1:将本地项目推送到远程仓库 如何将本地项目推送到远程仓库,包括处理常见错误的方法,并最终将代码推送到 main 分支。 步骤 1. 初始化本地仓库 确保已经在本地…

类和对象的深入了解6

1.初始化列表 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括 号中的初始值或表达式。 class Date { public:Date(int year, int month, int day): _year(year), _month(month),…