浅谈面向数据报的协议-UDP协议

news2024/9/21 14:41:26

1.什么是网络协议

协议用通俗的话来说就是约定,因为计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式.

计算机生产厂商有很多;

计算机操作系统, 也有很多;

计算机网络硬件设备, 还是有很多;

如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准,大家都来遵守, 这就是 网络协议


2.协议模型 

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。但是这个模型比较复杂并且不实用,最常用的其实是TCP/IP协议。

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求

物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.

数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.

网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.

传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.

应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.

大部分的情况下物理层考虑的比较少,所以也叫做TCP/IP四层协议。 


3.UDP协议端

3.1 认识UDP协议

首先我们需要对UDP协议有一个认知,它有3个特点:

无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;

不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;

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

 3.2 协议端格式

16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度;

如果校验和出错, 就会直接丢弃;

 那么UDP首部就是报头,也就是前8个字节,源端口号就是在传输层随机形成的,目的端口号就是接受方的端口号,在应用层获取。

 这也就解释了自定义UDP服务器时,端口号port的数据类型为什么是uint6_t了。

还有两个小问题:

1.UDP协议是如何解决报头和有效载荷的分离问题

UDP使用报头定长8字节来解决。

2.UDP协议是如何解决有效载荷向上交付的问题

UDP使用目的端口号来解决

3.3 面向数据报

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

怎么知道收到的报文是完整的

报文<8字节一定不完整,因为报头都不完整,报文>=8字节时,16位UDP长度-8字节就是有效载荷。

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

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

我们怎么看待报头呢?其实报头就是一个结构体描述化字段。

那么当报文多起来了,OS是怎么对报文进行处理的呢?

首先这个数据的大小是能知道的,假设这个报文大小是5个字节,内核当中有一个结构体sk_buff,里面的tail指针指向缓冲区的某个位置,然后将data指针指向tail前五个字节的位置,然后报头大小为8字节,那么再将data指针前移8个字节,再将报头及有效载荷放入这个空间,这就是OS对报文的管理,也叫做UDP报文的封装

那么多个报文如何管理呢?sk_buff内部还有一个指针指向的下一个结构体,此时对UDP报文的管理就转化成了对链表的增删查改。

 3.4 UDP的缓冲区

UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;

UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;

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

3.5 UDP使用注意事项

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

然而64K在当今的互联网环境下, 是一个非常小的数字. 如果我们需要传输的数据超过64K,那么只能自己在应用层将数据拆开,然后再发送。

3.6 基于UDP的应用层协议

NFS: 网络文件系统

TFTP: 简单文件传输协议

DHCP: 动态主机配置协议

BOOTP: 启动协议(用于无盘设备启动)

DNS: 域名解析协议

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


今天的分享到这里就结束了,感谢大家的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI人工智能的发展历史

人工智能的发展历史 在人工智能&#xff08;AI&#xff09;的发展历史中&#xff0c;我们见证了一系列巨大的突破和进展。人工智能是一门研究如何使计算机能够模仿人类智能的科学与技术。其发展可以追溯到1950年代&#xff0c;而如今&#xff0c;AI已经渗透到我们生活的各个领域…

JNPF快速开发平台让业务活起来

在当前数字化转型的浪潮中&#xff0c;企业正面临着前所未有的挑战&#xff0c;这些挑战主要体现在两个方面&#xff1a;一是需要迅速地响应市场上的各种变化&#xff0c;二是必须不断提升业务流程的效率。传统的软件开发模式通常伴随着时间消耗长、成本投入高以及难以迅速适应…

Docker网络模式及通信

一、Docker默认的网络通信 1.1 Docker安装后默认的网络设置 Docker服务器安装完成之后&#xff0c;默认在每个宿主机会生成一个名称为docker0的网卡&#xff0c;其IP地址都是172.17.0.1/16 [rootubuntu1804 ~]#apt -y install bridge-utils [rootubuntu1804 ~]#brctl show 另…

2024年新SCI顶刊算法红嘴蓝鹊优化器RBMO优化Transformer模型的多变量时间序列预测

matlab R2024a以上 一、数据集 二、2024年新SCI顶刊算法红嘴蓝鹊优化器RBMO 红嘴蓝鹊优化算法(Red-billed blue magpie optimizer, RBMO)是一种新型的元启发式算法&#xff08;智能优化算法&#xff09;&#xff0c;灵感来源于红嘴蓝鹊的合作、高效的捕食行为。 该成果由Shen…

005集——运算符和循环——C#学习笔记

C# 提供了许多运算符。 其中许多都受到内置类型的支持&#xff0c;可用于对这些类型的值执行基本操作。 这些运算符包括以下组&#xff1a; 算术运算符&#xff0c;将对数值操作数执行算术运算比较运算符&#xff0c;将比较数值操作数布尔逻辑运算符&#xff0c;将对 bool 操作…

基于医院临床数据中心而建立的ADR药品智能监测上报系统,源码支持二次开发

ADR监测上报系统是基于医院临床数据中心而建立&#xff0c;运用信息技术实现药品不良反应的智能监测、报告管理、知识库查询、统计分析等功能。 系统自动提取不良反应报告数据&#xff0c;主动实时监测临床发生的不良反应&#xff0c;第一时间反馈到ADR监测组&#xff0c;及时…

邀请函 I 松下信息和望繁信科技邀您参加「数智时代下大数据应用的“道”与“术”」闭门会议

在数字化浪潮席卷全球的今天&#xff0c;大数据与智能化的结合成为企业成功的关键。为了深入探讨这一重要议题&#xff0c;松下信息系统&#xff08;上海&#xff09;有限公司&#xff08;简称“松下信息”&#xff09;与上海望繁信科技有限公司&#xff08;简称“望繁信科技”…

2024年最新AI算力厂商排名!

随着人工智能技术的飞速发展&#xff0c;AI算力已成为衡量一个国家或企业在AI领域竞争力的重要指标。2024年&#xff0c;全球AI算力领域再度迎来新的突破与变革&#xff0c;不仅体现在技术创新的深度和广度上&#xff0c;更在应用场景和市场价值上展现出巨大的潜力。 众厂商排名…

扩展01:企业级Nginx+Keepalived双主架构实战

NginxKeepalived主备架构总是会有一台服务器处于空闲状态&#xff0c;这样会造成资源的浪费&#xff0c;所以为了能够将两台服务器都利用起来&#xff0c;我们需要借助NginxKeepalived双主架构来实现。即是对外两个VIP地址&#xff0c;同时接收请求。 一&#xff1a;Nginxkeep…

生成订单幂等性(防止订单重复提交)

订单唯一性(防止重复下单)方案 重复下单产生原因&#xff1a; 客户端原因&#xff1a; 比如下单的按键在点按之后&#xff0c;在没有收到服务器请求之前&#xff0c;按键的状态没有设为已禁用状态&#xff0c;还可以被按。又或者&#xff0c;在触摸屏下&#xff0c;用户手指…

15秒完成作文自动批阅!璞公英与恩施三中正式签约试点,AI 大模型自动批阅+精准教学助力学校教育升级!

在国家大力推动教育数字化战略行动的浪潮中&#xff0c;通过科技创新赋能教育&#xff0c;促进教育公平与质量双提升的重要签约仪式&#xff0c;于恩施市第三高级中学隆重举行。一直以来&#xff0c;恩施市第三高级中学积极寻求创新与突破&#xff0c;引入璞公英的先进教育技术…

MyBatis动态SQL标签2

4.choose (when, otherwise)标签是使用举例 类似switch...case&#xff0c;从上到下匹配&#xff0c;找到匹配的条件&#xff0c;就结束匹配其他的&#xff01; 5.set标签是使用举例 set这个标签是用在更新操作上的 set标签代替sql中的set关键字&#xff0c;可以把set语句后多…

DC-8靶机渗透测试

DC-8靶机 文章目录 DC-8靶机信息收集web渗透获取权限权限提升靶机总结 信息收集 1.nmap扫描出主机IP为192.168.78.156 开放80和22端口&#xff0c;没扫出来什么漏洞&#xff0c;但是发现robots.txt文件&#xff0c;给出了后台登录地址/usr/login web渗透 1.登陆到主页发现是…

Java有哪些数据类型?

Java有哪些数据类型 1. 基本数据类型 2. 引用数据类型 3. 总结 &#x1f388;边走、边悟&#x1f388;迟早会好 Java 中的数据类型分为两大类&#xff1a;基本数据类型&#xff08;primitive types&#xff09;和引用数据类型&#xff08;reference types&#xff09;。 …

代发考生战报:8月6号 西安 ,HCIE存储H13-629考试通过

代发考生战报&#xff1a;8月6号 西安 &#xff0c;HCIE存储H13-629考试通过&#xff0c;目前这个考试变题了&#xff0c;我找客服买的包过服务&#xff0c;有老师指导&#xff0c;考试通过了&#xff0c;里面的新题我看了&#xff0c;我是一点也不会&#xff0c;自己考的还是不…

Java代码混淆加密之Xjar

使用背景 代码安全性需求&#xff1a;在交付给客户或第三方时&#xff0c;保护源代码不被泄露或反编译是许多企业的核心需求。尤其是在竞争激烈的市场中&#xff0c;代码泄露可能导致严重的经济损失。 传统工具的局限性&#xff1a;虽然有很多混淆和加密工具&#xff0c;比如 …

【学习笔记】用线段树维护区间计数问题

前言 简单的区间计数问题可能直接推式子就行了。 但有些问题必须要数据结构维护。线段树就是一个比较好的处理区间的数据结构。 Gym102222L 思路 满足条件的区间特征&#xff1a; max ⁡ { a i } − min ⁡ { a i } 1 − c n t 0 \max\{a_i\}-\min\{a_i\}1-cnt0 max{ai​}…

uniapp离线打包热更新失败-AndroidStudio离线打包apk后无法下载打开-热更新失败-plus.runtime.install失败

效果图 仅安卓 前言 1.plus.runtime.install一直fail(20240808), uni.openDocument可以打开本地apk文件 2.权限问题需小心 跑通前提 1.先确定apk地址有效&#xff0c;浏览器中手动下载可安装 2.确保已添加离线打包AndroidStudio的“android.permission.INSTALL_PACKAGES”权…

初识自然语言处理NLP

文章目录 1、简介2、自然语言处理的发展简史3、语言学理论句法学&#xff08;Syntax&#xff09;语义学&#xff08;Semantics&#xff09;语用学&#xff08;Pragmatics&#xff09;形态学&#xff08;Morphology&#xff09; 4、统计与机器学习方法n-gram 模型隐马尔可夫模型…

JNPF快速开发平台赋能数字办公方式转变

随着信息技术的飞速发展&#xff0c;数字化转型已成为各行各业提升效率、优化流程的重要手段。JNPF快速开发平台正是在这样的背景下应运而生&#xff0c;它通过简化开发流程&#xff0c;使得非技术人员也能参与到应用的构建中来&#xff0c;从而加速了数字办公方式的转变。 数字…