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

Linux -- 传输层协议UDP

传输层

传输层:负责数据能够从发送端传输接收端,通过端口号来表示数据应该发送到哪一个进程。

端口号:端口号是网络通信中用于标识特定进程的数字标识符。它们在传输层协议(如TCP和UDP)中起着关键作用,帮助数据包找到正确的接收进程。

在TCP/IP协议中, ⽤ "源IP", "源端⼝号", "⽬的IP", "⽬的端⼝号", "协议号" 这样⼀个五元组来标识⼀个通信(可以通过netstat -n查看)。

一些常见的服务器端口号包括:

  • SSH服务器:22端口

  • FTP服务器:21端口

  • HTTP服务器:80端口

  • HTTPS服务器:443端口

所以我们可以知道一个进程可以绑定多个端口号,因为进程可以接受多个来自不同进程发送的数据,但是一个端口只能绑定一个进程,否则端口不知道将数据发送给哪一个进程。

UDP 协议

UDP(User Datagram Protocol,用户数据报协议)是一种简单的、无连接的传输层协议,用于在网络中传输数据。与 TCP 不同,UDP 不提供可靠性、顺序性和流量控制,但它具有低延迟和高效的特点,适合对实时性要求较高的应用。

这里的不可靠性并不代表UDP的实际应用会比TCP差,而是一种特性,正因为不可靠的无连接,造就了UDP协议不需要确认应答,也就能够更高效的传输数据。

UDP 的工作原理

UDP 是一种无连接协议,客户端和服务器之间不需要建立连接即可发送数据。它的核心功能是快速传输数据包,所以UDP是面向数据报的。

UDP协议端格式

16位UDP⻓度, 表⽰整个数据报(UDP⾸部+UDP数据)的最⼤⻓度。
如果校验和出错, 就会直接丢弃。

UDP的特性

无连接:不需要建立连接,可以直接发送数据。

不可靠性:由于没有确认应答机制,所以不保证数据包的到达和顺序以及完整性

低延迟:由于是无连接和无需确认的,所以传输延迟极低。

高效性:报头头部开销小,适合传输小数据包

⾯向数据报: 不能够灵活的控制读写数据的次数和数量。

面向数据报:应用层交给UDP多长的报文,UDP不会拆分与合并,而是一次性将报文发出。也就是说如果发送端调⽤⼀次sendto, 发送100个字节, 那么接收端也必须调⽤对应的⼀次recvfrom, 接收100个字节; ⽽不能循环调⽤10次recvfrom, 每次接收10个字节。

UDP的缓冲区

与TCP不同,UDP没有发送缓冲区,只有接收缓冲区,调⽤sendto会直接交给内核, 由内核将数据传给⽹络层协议进⾏后续的传输动作。

每个UDP socket都有一个接收缓冲区,用于缓存从网络上接收到的数据报。如果接收缓冲区满了,新到的数据报将被丢弃。由于UDP没有流量控制机制,快速发送的数据报可能会淹没慢速接收方,导致数据报丢失。

UDP数据包的最大长度为65507字节,这是因为UDP报头占8字节,IP报头占20字节,而UDP报文的最大长度为65535字节。然而,为了减少丢包风险,建议将UDP数据包的大小控制在MTU(最大传输单元)以下。如果我们需要传输的数据超过64K, 就需要在应⽤层⼿动的分包, 多次发送, 并在接收端⼿动拼装。

UDP 的应用场景

  • 实时应用:如 VoIP(语音通话)、视频会议、在线游戏。
  • 广播和多播:如网络广播、流媒体分发。
  • 简单查询:如 DNS 查询、DHCP 请求。
  • 轻量级协议:如 SNMP(简单网络管理协议)、TFTP(简单文件传输协议)。
http://www.dtcms.com/a/389255.html

相关文章:

  • 使用Android Studio中自带的手机投屏功能
  • LeetCode:19.螺旋矩阵
  • Windows 命令行:在 cd 命令中使用绝对路径与相对路径
  • 图片修改尺寸
  • 《嵌入式硬件(十五):基于IMX6ULL的统一异步收发器(UART)的操作》
  • Python爬虫实战:研究Pandas,构建苏宁易购月饼销售数据采集与智能推荐系统
  • 导购app佣金模式的分布式计算架构:实时分账与财务对账
  • Linux Bash脚本自动创建keystore和生成公钥
  • 数据库管理员偏爱哪些MySQL数据库连接工具?
  • 大数据毕业设计选题推荐-基于大数据的农产品交易数据分析与可视化系统-Spark-Hadoop-Bigdata
  • MySQL C API 的“连接孵化器”-`mysql_init()`
  • oracle 数据库导入dmp文件
  • 第二部分:VTK核心类详解(第28章 vtkMatrix4x4矩阵类)
  • JDK、JRE、JVM 是什么?有什么关系?【Java】
  • Visual Studio 2022创建CPP项目
  • Nginx反向代理+负载均衡
  • React Suspense底层原理揭秘
  • 关于pycharm高版本导入torch的问题
  • 【硬件研讨】【笔记本电脑】给老ThinkPad升级内存
  • 论文Review 3DGS SuGaR | CVPR 2024 | 3DGS 转 Mesh 开源方案!!
  • Makefile学习(一)- 基础规则
  • 动态代理 设计模式
  • APP小程序被攻击了该如何应对
  • 零基础从头教学Linux(Day 37)
  • ADB 在嵌入式 Linux 系统调试中的应用
  • 7HTMLCSS高级
  • 玩游戏/用设计软件提示d3dcompiler_47.dll缺失怎么修复?5步快速定位问题,高效修复不踩坑
  • HTML应用指南:利用GET请求获取全国宝马授权经销商门店位置信息
  • 《Java网络编程》第一章:基本网络概念
  • Python内存机制全解析:从基础到高级应用