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

【Linux笔记】网络部分——传输层协议UDP

39.传输层协议UDP

文章目录

  • 39.传输层协议UDP
      • 回顾端口号
      • UDP协议的特点
      • UDP协议端格式
        • UDP协议头结构体实现
      • UDP协议的全双工特性及缓冲区问题
      • UDP协议的运用
      • 总结

从学习网络开始,大部分时间都在编写代码,包括重写TCP套接字、多进程、多线程池、自定义协议、远程命令执行、聊天功能、自定义HTTP协议、序列化和反序列化等。目前上层与原理相关的理论已经讲完,接下来要解决两个问题:网络底层原理和服务器的设计。

回顾端口号

在网络基础部分,我们了解到端⼝号(Port)标识了⼀个主机上进⾏通信的不同的应⽤程序,UDP服务有客户端和服务端,都需要绑定端口号。服务器上部署了各种不同的服务,每个服务绑定特定端口号,如HTTP 80端口、SSH 22端口等。从网络收到报文时,需要根据端口号决定交给哪个应用程序。UDP报头包含端口号,用于数据转发。。

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

  • 端口号0-1023是知名端口号,如HTTP 80、HTTPS 443、SSH 22,必须与特定服务绑定。1024-65535是操作系统动态分配的端口号,由客户端随机分配

  • 一个进程可以绑定多个端口号,但一个端口号不能被多个进程绑定。类似于管道,一个进程可以打开多个管道,但一个管道只有一个读端和一个写端。

UDP协议的特点

UDP协议位于网络传输层,负责将数据从发送端转发到接收端,不考虑连接问题

UDP客户端直接向服务端发送消息,不需要考虑粘包和字节流问题,操作系统知道报文长度。

UDP协议端格式

UDP协议的格式包括16位源端口号、16位目的端口号、16位UDP长度和16位校验和总共8个字节,剩余部分是数据即有效载荷。

  • 应用层端口号是两字节因为UDP协议中端口号是16位的。
  • 16位UDP长度是整个UDP报文的长度,数据大小需要再减去报头的8个字节
  • UDP不保证可靠性但保证数据合法性,使用16位校验和验证报文,失败则丢弃。

在这里插入图片描述

UDP报头中的自描述字段可以描述有效载荷长度,确保读取完整报文。

在网络基础我们提到,一份数据在网络中转发最重要的两个问题就是:协议是如何解包的?协议是如何分用的?

  • UDP解包过程是读取前八个字节作为报头,剩余部分作为有效载荷。UDP报文解包和分用相对简单,因为报头长度固定。UDP通过固定报头长度和16位UDP长度字段保证报文完整性,可以准确读取完整报文。接收方可以连续读取多个UDP报文,根据报头中的长度字段准确分离报文
  • 分用过程是根据16位目的端口号查找关联进程并转发报文。

与TCP不同,UDP在创建套接字后可以直接进行收发操作,不需要像TCP那样需要先建立连接。UDP是面向数据报的协议,这意味着每个报文都是独立的,不需要像TCP那样需要应用层处理报文的完整性。UDP的不可靠性体现在没有确认机制、重传机制,数据包丢失时不会报告给上层或对方。

UDP协议头结构体实现

UDP协议本质上是C语言的结构体。UDP协议头包含16位无符号源端口、目的端口、长度和校验和字段。这些字段在C语言中表示为u16无符号16位整数。UDP协议头结构体在代码中被称为udp_hdr。结构体中的字段对应UDP协议格式中的各个部分:源端口、目的端口、长度和校验和。这种结构体实现方式与操作系统内核使用C语言编写协议的特点一致。

下图为Linux 2.6.18内核中有关udp字段的源码:

在这里插入图片描述

UDP协议的全双工特性及缓冲区问题

UDP协议具有全双工特性,可以在接收消息的同时发送消息。UDP协议的文件描述符可以被一个线程读取,另一个线程写入。UDP协议具有接收缓冲区,用于暂时缓存收到的数据,但接收缓冲区不能保证报文的顺序与发送顺序一致。UDP协议不保证报文的按序到达,这与TCP协议不同。UDP协议的接收缓冲区在写满后会丢弃新收到的报文。UDP协议没有真正意义上的发送缓冲区,因为它不保证可靠性,应用层将报文交给UDP后,操作系统会直接将其交给下一层进行发送。UDP协议不需要像TCP协议那样进行流量控制、拥塞控制、丢包重传等可靠性保证措施。UDP协议的接收缓冲区由sk buff构成的链表队列管理,这种结构在操作系统内部用于管理报文。UDP协议的全双工特性不受发送缓冲区缺失的影响。

UDP协议的运用

UDP协议在直播和视频领域应用较多,因为UDP协议简单,报文分发容易。直播应用客户端在底层可以选择UDP协议或TCP协议。UDP协议在传输过程中可能会出现偶尔性的丢失,导致画面抖动、局部不清晰、马赛克或色块等问题,但这些是可以接受的。UDP协议不会对报文进行拆分或合并,发送端发送多少次,接收端就会接收多少次。发送和接收的次数一致,前提是没有丢包。UDP协议面向数据报,而TCP协议面向字节流。UDP协议在传输100个字节数据时,发送端调用一次性能处发送100个字节,服务器端也会调用一次recvfrom接收100个字节。如果接收端需要分十次读取,每次读取十个字节,就需要调用十次recvfrom。UDP协议的传输特点是发送和接收的次数一致,而TCP协议则可能发送一次,接收多次,或者发送多次,接收一次。UDP协议的这种特性使其在直播和视频领域具有优势,尽管存在丢包的可能性,但在这些场景下是可以接受的。

总结

UDP协议的简单特性和在特定场景下的应用已经进行了详细说明,包括其在直播和视频领域的优势、全双工特性、缓冲区问题以及报文长度限制等。这些内容为后续讨论TCP协议奠定了基础。UDP协议虽然在某些场景下表现优异,但在需要高可靠性的场景下,TCP协议更为适合。接下来将重点讨论TCP协议的特性和应用。

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

相关文章:

  • Ansible 自动化项目结构与 Harbor 安装示例(基于 kubeasz)①
  • Spring 源码学习(十五)—— HandlerMethodReturnValueHandler
  • everviz 数据可视化平台
  • 12 U盘挂载
  • 【Kylin Linux root 密码故障处置指南(超限重试 + 改回原密码)】
  • 网络原理:数据链路层、NAT与网页加载
  • 【从零开始开发远程桌面连接控制工具】01-项目概述与架构设计
  • 网站建设竞价托管什么意思在国内做推广产品用什么网站好
  • 有没有做宠物的网站网站开发中间商怎么做
  • 深度强化学习 | 详解从信赖域策略优化(TRPO)到近端策略优化(PPO)算法原理
  • 在类中定义装饰器:Python高级元编程技术详解
  • [C++][正则表达式]常用C++正则表达式用法
  • 基于大数据的短视频数据分析系统 Spark哔哩哔哩视频数据分析可视化系统 Hadoop大数据技术 情感分析 舆情分析 爬虫 推荐系统 协同过滤推荐算法 ✅
  • 参考抖音推荐算法的功能:不同用户规模的推荐技术框架
  • 深入理解C语言scanf函数:从基础到高级用法完全指南
  • 检测相邻递增子数组1 2(LeetCode 3349 3350)
  • 《算法闯关指南:优选算法--前缀和》--25.【模板】前缀和,26.【模板】二维前缀和
  • 快速搭建网站2020缅甸新闻最新消息
  • 搜索网站做推广全网推广平台推荐
  • 仓颉编程(16)泛型类型
  • 「小有可为」AI 开源公益创新挑战赛
  • 《 Linux 点滴漫谈: 四 》文件权限与用户管理
  • 评估虚拟机资源规划
  • 深入理解 SO_REUSEADDR:从“Address already in use”到服务器瞬间重启
  • 机器人中的多模态——RoboBrain
  • MySQL 8.0.x 全平台安装指南:Windows、CentOS、Ubuntu 详细步骤与问题解决
  • YOLO!!
  • 电子电气架构 --- 汽车座舱行业背景综述
  • C++(23):通过print和printIn进行输出
  • 获取网站访客qq号成都网站建设优点