【在Linux世界中追寻伟大的One Piece】传输层协议UDP

news/2024/12/23 1:52:22/

目录

1 -> 传输层

2 -> 端口号

2.1 -> 端口号范围划分

2.2 -> 知名端口号

3 -> UDP协议

3.1 -> UDP协议端格式

3.2 -> UDP的特点

3.2.1 -> 面向数据报

3.3 -> UDP的缓冲区

3.4 -> UDP使用注意事项

3.5 -> 基于UDP的应用层协议


1 -> 传输层

传输层是计算机网络OSI模型中的第四层,它负责在网络中的两个节点之间提供端到端的数据传输服务。传输层的主要任务包括分段与重组、端口标识、连接控制(面向连接的TCP和无连接的UDP)、流量控制和差错检测与处理等,以确保数据的可靠、有序和高效传输。

简单来说,就是负责数据能够从发送端传输接收端

2 -> 端口号

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

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

2.1 -> 端口号范围划分

  • 0 - 1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号都是固定的。
  • 1024 - 65535:操作系统动态分配的端口号。客户端程序的端口号,就是由操作系统从这个范围分配的。

2.2 -> 知名端口号

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

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

执行下面的命令, 可以看到知名端口号。

cat /etc/services

我们自己写一个程序使用端口号时,要避开这些知名端口号。

3 -> UDP协议

UDP(用户数据报协议)是一种无连接的传输层协议,它提供了一种简单的面向报文的数据传输服务。

UDP不保证数据包的可靠交付、顺序或数据完整性,它不进行拥塞控制,也不需要在传输数据前建立连接。

UDP的头部开销较小,只有8字节,包括源端口、目的端口、长度和校验和字段。

由于其简单性,UDP适用于对实时性要求高的应用,如在线游戏、语音视频通信和某些类型的网络广播。

3.1 -> UDP协议端格式

  • 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度。
  • 如果校验出错,就会直接丢弃。

3.2 -> UDP的特点

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

  • 无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接。
  • 不可靠:没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。
  • 面向数据报:不能够灵活的控制读写数据的次数和数量。
  • 简单高效:UDP头部开销小,只有8字节,适合快速传输数据,尤其是对实时性要求高的应用。
  • 支持广播和多播:UDP可以实现单播、广播和多播通信,适合发送数据到多个目的地。
  • 无流量控制:UDP不提供流量控制功能,可能在网络拥塞时导致数据包丢失或传输延迟增加。
  • 适用场景:UDP适用于实时音视频通话、在线游戏、DNS查询等对实时性要求较高的应用。

3.2.1 -> 面向数据报

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

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

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

3.3 -> UDP的缓冲区

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

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

3.4 -> UDP使用注意事项

我们注意到,UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)。

然而64K在当今的互联网环境下,是一个非常小的数字。

如果我们需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。

3.5 -> 基于UDP的应用层协议

  • NFS(Network File System):网络文件系统。
  • TFTP(Trivial File Transfer Protocol):简单文件传输协议。
  • DHCP:动态主机配置协议。
  • BOOTP:启动协议(用于无盘设备启动)。
  • DNS(Domain Name System):域名解析协议。
  • SNMP(Simple Network Management Protocol):用于网络设备和应用程序的管理,可以使用UDP作为传输层协议。
  • RIP(Routing Information Protocol):一种路由协议,基于距离矢量算法,使用UDP进行信息交换。
  • QUIC(Quick UDP Internet Connection):由谷歌开发的传输层协议,基于UDP,旨在减少连接延迟,提供安全和可靠的连接。
  • UDT(UDP-based Data Transfer Protocol):一种面向连接的双向应用层协议,建立在UDP之上,支持高速数据传输和可靠性控制。

当然,也包括你自己写UDP程序时自定义的应用层协议。


感谢各位大佬支持!!!

互三啦!!!


http://www.ppmy.cn/news/1517564.html

相关文章

基于SSM+小程序的旅游社交登录管理系统(旅游4)(源码+sql脚本+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 本旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理&…

力扣——数组(一)

一、二分法&#xff08;有序数组&#xff09; 1、搜索等于target的元素 法一&#xff1a; 直接遍历 class Solution { public:int search(vector<int>& nums, int target) {int i0;for(i0;i<nums.size();i){if(nums[i]target){return i;}}return -1;} }; 法二…

【C++第十五章】继承

【C第十五章】继承 定义&#x1f9d0; 继承是C面向对象编程中的一个核心概念&#xff0c;它允许创建一个新类&#xff08;称为派生类或子类&#xff09;从已有类&#xff08;称为基类或父类&#xff09;中继承属性和方法。 继承的主要用途包括&#xff1a; 代码重用&#xff1…

U盘读不出来怎么办

目录 一、检查物理连接 1. 重新插拔U盘 2. 检查U盘外观 二、软件设置检查 1. 取消隐藏U盘 2. 更新或重新安装U盘驱动 3. 检查磁盘管理 三、文件系统修复 1. 格式化U盘 2. 使用命令提示符修复 四、病毒扫描 五、其他注意事项 一、检查物理连接 1. 重新插拔U盘 最简单也…

RTC相关

RTC唤醒 &#xff08;Real Time Clock) sudo rtcwake -m [mode] -s [seconds]-m 选项指定进入的电源管理模式&#xff0c;可以是&#xff1a; standby&#xff1a;进入待机模式 freeze&#xff1a;冻结模式 mem&#xff1a;挂起到内存 disk&#xff1a;挂起到磁盘 off&#xf…

AI产品经理学习路线【2024最新】,从零基础到精通,非常详细收藏我这一篇就够了

成为一名优秀的AI产品经理不仅需要掌握相关的技术知识&#xff0c;还需要具备良好的产品思维、市场洞察力以及跨部门沟通协调能力。下面是一个详细的AI产品经理学习路线&#xff0c;旨在帮助有志于从事该职业的人士快速成长。 AI产品经理的学习路线 第一阶段&#xff1a;基础知…

一篇讲完自动化基础-Python【万字详细讲解】

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 这篇文章主要学习Python的语法&#xff0c;为后续的自动化打基础 Python requests 接口自动化 Python selenium web 自动化 Python appium移动端自动化(手机 app) 这篇文章分六个阶段百分比进行划分&#xff0c;到时…

基于伏图的汽车发动机曲轴模态仿真APP应用介绍

汽车发动机是为汽车提供动力的装置&#xff0c;是汽车的心脏&#xff0c;决定着汽车的动力性、经济性、稳定性、舒适性和环保性。曲轴是发动机中最重要、承载最复杂的零件之一&#xff0c;其强度和振动特性都会影响到整机的工作性能。 汽车发动机剖面图 曲轴在运转时&#xff…