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

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

文章目录

  • 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程序时自定义的应用层协议

            

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LeeCode Practice Journal | Day30_GA04
  • Notepad++ 安装 compare 插件
  • AI表情神同步!LivePortrait安装配置,一键包,使用教程
  • 数据集——鸢尾花介绍和使用
  • AI问答:DIP / Big Data Diagnosis-Intervention Packet / 区域点数法总额预算和按分值付费
  • Python面试整理-自动化运维
  • 允许服务器支持密码直接连接
  • 重生之我当程序猿外包
  • CAPL使用结构体的方式组装一条DoIP车辆声明消息(方法1)
  • go程序在windows服务中优雅开启和关闭
  • 隐写工具steghide linux编译安装
  • uni-app 将base64图片转换成临时地址
  • 使用 Python 中的 ELSER 进行Serverless 语义搜索:探索夏季奥运会历史
  • jenkins使用docker api配置自签证书 +发布项目
  • c++----类与对象(下)
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • ES6 学习笔记(一)let,const和解构赋值
  • input的行数自动增减
  • Kibana配置logstash,报表一体化
  • log4j2输出到kafka
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • spring security oauth2 password授权模式
  • 爱情 北京女病人
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 免费小说阅读小程序
  • 微信小程序填坑清单
  • 小程序button引导用户授权
  • 原生Ajax
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #pragam once 和 #ifndef 预编译头
  • #QT项目实战(天气预报)
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1)(1.13) SiK无线电高级配置(六)
  • (10)STL算法之搜索(二) 二分查找
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (vue)页面文件上传获取:action地址
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (论文阅读40-45)图像描述1
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (转)Linux下编译安装log4cxx
  • .gitattributes 文件
  • .md即markdown文件的基本常用编写语法
  • .Net 6.0--通用帮助类--FileHelper
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .net framework profiles /.net framework 配置
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)