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

计算机网络——传输层(Udp)

udp

UDP(User Datagram Protocol,用户数据报协议 )是一种无连接的传输层协议,它在IP协议(互联网协议)之上工作,为应用程序提供了一种发送和接收数据报的基本方式。以下是UDP原理的详细解释:

下面对他的报头进行解析。

报头

在这里插入图片描述

端口,表示它从那个进程来的,到那个进程去。
16 位UDP 长度, 表示整个数据报(UDP 首部+UDP 数据)的最大长度。
UDP校验值,如果他的校验值出错,他就会丢失这个数据包。

他的报头协议我们一看,发现比tcp的简单,它只有一个源端口,目的端口,udp长度,以及udp检验值。他就没有了。我们可以推导出他的特点。

端口号

在网络传输中,我们怎么知道主机中那些进程需要网络传输数据,所以我们就引用了一个端口号,来区别主机上的不同进程。
常见的端口号:

  • ftp:21
  • ssh:22
  • telnet:23
  • http:80
  • https:443
    1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的。

端口号上限为什么是65535?

在TCP/UDP传输层协议中,端口号(Port Number)字段被明确规定为 16位无符号二进制整数。这使得端口号的数学最大值被严格限定。
当时主流CPU架构(如Intel 8086)采用16位寄存器,直接影响了协议设计

udp特点

  • 无连接:只需要知道对端的一个端口号以及一个ip地址,就可以进行传输数据了,它都没建立连接,就发送数据了。
  • 不可靠:由于不像tcp有一个确认应答机制,所以当数据丢失时,他不会进行重新发送,只会发送一次。
  • 面向数据报:由于是无连接的,所以UDP直接复用IP层的数据包传递机制(IP Datagram),并且不能够灵活控制发送的次数与数量。

eg. 应用层交给UDP 多长的报文, UDP 原样发送, 既不会拆分, 也不会合并;用UDP 传输100 个字节的数据:如果发送端调用一次sendto, 发送100 个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100 个字节; 而不能循环调用10 次recvfrom, 每次接收10 个字节;

udp缓冲区

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

udp应用

由于其报头简单,所以他的传输速率相比tcp传输高,所以我们常常用来

需要低延迟优先于可靠性(实时游戏/音视频)。
简单查询-响应模型(如DNS、DHCP)
广播/多播需求

基于udp协议的应用层

  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机分配协议
  • BOOTP:启动协议
  • DNS:域名解析系统
  • HTTP/3.0

udp实现可靠传输

引入序列号,保证数据有序
引入确认应答机制,确保对端收到数据
引入超时重传机制,报这个对端收到数据
流量控制机制,每次传输都是完整的数据

http://www.dtcms.com/a/122653.html

相关文章:

  • Java 原型模式 详解
  • 如何在Linux系统上通过命令调用本地AI大模型?
  • qt之opengl使用
  • 【精品PPT】2025固态电池知识体系及最佳实践PPT合集(36份).zip
  • 移动端六大语言速记:第11部分 - 内存管理
  • ChatGPT 4:引领 AI 创作新时代
  • [ctfshow web入门] web29
  • 基于FreeRTOS和LVGL的多功能低功耗智能手表(硬件篇)
  • 微服务篇——SpringCloud
  • 【Ai/Agent】Windows11中安装CrewAI过程中的错误解决记录
  • Python如何用科技点亮触感世界——智能盲文翻译器开发全解析
  • SQL语句
  • 论文阅读笔记:Adaptive Multi-Modal Cross-Entropy Loss for Stereo Matching
  • 封装uniapp request promise化
  • 音视频生命探测仪,救援现场的“视听先锋”|鼎跃安全
  • 我们如何控制调度 C、C++ 中的线程执行?
  • HTTP 压力测试工具autocannon(AI)
  • 琴键上的强化学习:让机器人在真实世界里弹钢琴!
  • Spring如何实现资源文件的加载
  • 网络安全之-信息收集
  • 国内协作机器手焊接领域领军人物分析
  • MCP 实战系列(Day 2)- 动手搓个文件系统 MCP 服务器
  • Linux系统管理与编程12: FTP服务配置
  • 《DataX 安装与简单使用指南》
  • 计算机视觉中的基于网格的卷绕算法全解析
  • Ansible(6)——管理变量
  • TDengine 数据模型设计:多列模式与单列模式对比(一)
  • UE5 matcap学习笔记
  • 单片机领域中哈希表
  • 基于 SpringBoot音乐网站与分享平台