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

网络应用层和传输层

网络中有很多协议这些协议的不同导致了分层这一现象不同层的主要功能不一样。

应用层:应用程序。数据具体如何使用

传输层:关注起点和终点

网络层:关注路径规划

数据链路层:关注相邻节点的转发

物理层:硬件设备

应用层

1.根据需求,明确要传输的信息

2.约定好信息按照什么格式来组织

 (和程序员接触最为密切)应用程序。在应用层中,很多时候程序员会自定义应用层协议的(也有一些现成的应用层协议)。不要神话自定义协议,协议就是规定,其规定了数据如何进行传输。

如日常生活中的点外卖,(会涉及程序和服务器之间进行的网络通信交互)当我们点开外卖软件,我们其程序读取我们的位置信息之后,程序会会发送请求发送我们的位置信息和用户信息(一般会有格式对于请求来说,这里使用文本的方式。三个属性,使用”,“来分隔)假设程序构造出1000,100,30这样一个字符串组成的代码块,将其写入到TCP socket 或者UDP的socket中,

商家就会回复一些响应(格式和上面一样)响应有商家列表,商家的名称,图片,距离,简介,评分。如

李四麻辣烫,图片,地址,1.2KM,麻辣烫性价比之王,4.8

王五麻辣香锅,图片,地址,1.0KM,麻辣香锅中的神,5。等这样的响应类似这样的过程,就是自定义协议。无论使用什么样的格式来进行组织,只要客户端和服务器这边能够对应互相回应就好。

这种通过文本的方式构造的协议,一般不这样使用,开发中常见的几种格式。

1.xml

很早之前组织网络的格式,现在很少应用于网络通信(maven,会使用其管理项目配置),是通过标签来组织数据。并且其是一个通用的数据格式,有什么标签,标签的作用都可以自己定义。

请求:

<request>

    <userld>10000</userld>

    <position>100,30</position>

</request>

优势

让数据的可读性变得更好。

劣性

标签写起来非常繁琐,传输的时候也占用更多的网络带宽。

2.json(当下最流行的一种数据组织格式)

{

        userld:"1000",

        position:"20,23"

}

这种键值对结构{}将所有的键值对包裹起来。键值对之间使用”,“来进行分隔,键和值之间,使用”:“来进行分隔,键的格式固定为String类型,值无所谓。键得分号可以省略。

优势

可读性比较好;比xml简洁

劣势

会消耗额外得带宽(需要传输键得值),

虽然如此,json在网络通信中仍然非常流行,除非是一些对于性能要求比较高得场景不使用jspn之外其余很多地方都可以使用json.

3.protobuffer

于前两个相比,其(简称pb)使用二进制的方式来组织数据。可以保证带宽占用最低(将信息以二进制的形式压缩)

优势

占用带宽最低,传输效率最高,适合高性能场景

劣势

可读性差(二进制无法直接阅读),影响开发效率  

应用层也有一些现成的协议。最知名的,广泛使用的HTTP协议(超文本传输协议超文本不仅是文本还有图片视频音频等)

传输层

UDP:无连接,不可靠传输,面向数据报,全双工

TCP:连接,可靠传输,面向字节流,全双工

端口号

写一个服务器,必修手动指定一个端口号,通过端口号来区分当前这个主机的不同的应用程序

写一个客户端,客户端在通信的时候也会有一个端口号(代码感知不到),系统自动分配的

端口号固定2个字节表示的范围0~65535,一般情况下0不可用。1~1023称为”知名端口号“,给比较知名的一些服务器预留的(现在大部分当时知名的服务器已经不适用了,仍然在使用的22:ssh端口号,80:http服务器端口号443:https服务器端口号,使用服务器时也可以不使用这个端口号只是建议),1024~65535普通的端口号

UDP协议

前面分成四个部分,每个部分占2个字节。报头和载荷之间,可以认为是一个“字符串拼接”,这里是二进制的数据。

源IP目的IP不在这里,在网络层的IP协议中。

目的端口号后面是UDP报文长度:范围是0-65535 是64kb,因此使用UDP时很难表示一个较大的数据报。当一个业务的数据报已经接近64kb就需要要么将数据分成多个包,然后多个UDP传输但是开发成本和测试成本比较大()拆包以及如何进行组包,要么就直接使用TCP,TCP没有包的大小限制。

注:那么能否对其进行升级将两个字节变为4个字节,不行技术上可以实现,但是如果升级需要将世界上的所有设备一起升级才可以,因为一边升级不行,数据无法处理,无法进行通信。

UDP报文长度后面是UDP的校验和:检验和是什么?在网络传输中,由于一些外部的干扰,可能会导致数据传输出错的情况。光信号/电信号  磁场,电场,高能离子的干扰下,会导致某个地方本来是传输低电平,在干扰下会变成高电平,造成比特翻转,所以就需要来验证数据是否传输错误。校验和就诞生了。

检验和本质上是一个字符串,其体积比原始数据更小,又通过原始数据生产的,原始数据相同得到的校验和一定相同,反之,校验和相同原始数据大概率相同(不同的概论很低)。

怎样基于校验和来完成数据校验?

1.发送方将要发送的数据整理好(data1),通过一定的算法,计算校验和(checksum1)

2.发送方将data1和checksum1一起通过网络发送过去

3.接受方收到数据,收到的数据称为(data2)可能与数据1不同了,收到checksum1

4接收方根据data2重写计算检验和(根据相同的算法),得到checksum2

5对比checksum1和checksum2是否相同。不同data1和data2一定不同

如果相同,data1和data2大概率相同(不相同概率很小忽略不计)

如果checksum1过来的是错误的那么检查是否和checksum2更不可能相同了


通过这样的方式,就能发现数据传输出错

校验和的计算也有很多算法,此处UDP使用的是CRC(循环冗余算法)

把当前要计算校验和的数据,每个字节,都进行累加,把结果保存到这两个字节变量中,累加过程中出现溢出没事。如果中间的某个数据,出现传输错误,第二次计算的校验和和第一次就会不一样。这种不是非常靠谱的,导致两个不同的数据,得到相同的校验和的概率比较大 。前面的字节少1后面的字节多一。

所以有更厉害的MD5算法和sha1算法这里只介绍MD5算法

MD5算法是需要一系列的公式来将其转化为md5的。

1.MD5定义:无论你的数据多长,计算得到的MD5都是固定长度。校验和本身就应该不长,要不然不方便网络传输。

2.分散:给定两个原始数据,哪怕绝大部分一样只有一个字节不同,得到的MD5值差距都会很大。因为这样的特性其也非常适用于hash算法。

3.不可逆:给原始数据计算MD5简单,反过来理论不可行,反过来计算的话计算量很庞大,超出算力极限

UDP特点在代码中感知的到 

1.无连接。UDP本身不会存储对端的信息,要在发送数据的时候,显示指定要传输给谁

 DatagramPacket requestPack = new DatagramPacket(request.getBytes(),request.length(),InetAddress.getByName(sereveIp),serverPort);//创建一个数据报来传输用户的内容socket.send(requestPack);//向客户端传输

2.不可靠性(代码看不出来)

3.面向数据报。通过DatagramPacket类的对象构成的数据报进行传输

DatagramPacket requestPack = new DatagramPacket(request.getBytes(),request.length(),InetAddress.getByName(sereveIp),serverPort);//创建一个数据报来传输用户的内容socket.send(requestPack);//向客户端传输

4.全双工  socket既能传送又能接收

            socket.send(requestPack);//向客户端传输DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096);socket.receive(responsePacket);//接收客户端返回的响应

基于UDP的应用层协议

NFS:网络文件系统

TETP:简单文件传输协议

DHCP:动态主机配置协议
BOOTP:启动协议(用于无盘设备启动)

DNS:域名解析协议

并且包含自己定义实现的。

有一些应用层协议,基于UDP来实现的.其实并不算很多.
相比于UDP来说,TCP在更多的情况下,是具有优势的.很多时候,都是优先考虑使用TCP

 

相关文章:

网络应用层和传输层

网络中有很多协议这些协议的不同导致了分层这一现象&#xff0c;不同层的主要功能不一样。 应用层&#xff1a;应用程序。数据具体如何使用 传输层&#xff1a;关注起点和终点 网络层&#xff1a;关注路径规划 数据链路层&#xff1a;关注相邻节点的转发 物理层&#xff1…...

Vue3:优化-从响应式数据中获取纯数据

一、情景说明 我们知道&#xff0c;Vue3中&#xff0c;创建变量时&#xff0c;常用ref、reactive来包裹&#xff0c;这样&#xff0c;这个变量就是响应式数据 然而&#xff0c;有时候&#xff0c;我们只需要纯数据 例如&#xff0c;我们在调用后端接口的时候&#xff0c;我们只…...

C#.手术麻醉系统源码 手麻系统如何与医院信息系统进行集成?

C#.手术麻醉系统源码 手麻系统如何与医院信息系统进行集成&#xff1f; 手术麻醉系统与医院信息系统的集成是一个关键步骤&#xff0c;它有助于实现信息的共享和流程的协同&#xff0c;从而提高医疗服务的效率和质量。手麻系统与lis、his、pacs等系统的对接是医院信息化建设的重…...

学习CSS Flexbox 玩flexboxfroggy flexboxfroggy1-24关详解

欢迎来到Flexbox Froggy&#xff0c;这是一个通过编写CSS代码来帮助Froggy和朋友的游戏! justify-content 和 align-items 是两个用于控制 CSS Flexbox 布局的属性。 justify-content&#xff1a;该属性用于控制 Flexbox 容器中子项目在主轴&#xff08;水平方向&#xff09;…...

springboot项目如何配置跨域?

在Spring Boot项目中配置跨域&#xff08;CORS&#xff0c;Cross-Origin Resource Sharing&#xff09;主要是为了允许来自不同源&#xff08;不同的协议、域名或端口&#xff09;的前端应用能够访问后端API。Spring Boot提供了多种方式来配置跨域支持。 1. 使用CrossOrigin注…...

实现第一个动态链接库 游戏插件 成功在主程序中运行 dll 中定义的类

devc 5.11编译环境 dll编译环境设置参考 Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 插件 DLL代码和主程序代码如下 注意 dll 代码中的class 类名需要 和主程序 相同 其中使用了函数指针和强制类型转换 函数指针教程参考 以动态库链接库 .dll 探索结构体…...

算法第三十九天-验证二叉树的前序序列化

验证二叉树的前序序列化 题目要求 解题思路 方法一&#xff1a;栈 栈的思路是「自底向上」的想法。下面要结合本题是「前序遍历」这个重要特点。 我们知道「前序遍历」是按照「根节点-左子树-右子树」的顺序遍历的&#xff0c;只有当根节点的所有左子树遍历完成之后&#xf…...

Rust---复合数据类型之字符串与切片(2)

目录 字符串操作删除 (Delete)连接 (Concatenate)字符串转义前情回顾: Rust—复合数据类型之字符串(1) 字符串操作 删除 (Delete) 删除方法仅适用于 String 类型,分别是: pop(),remove(),truncate(),clear(),此外还有drain() 方法。 pop 方法:pop() 方法返回一个 O…...

iOS 应用内网络请求设置代理

主要通过URLSessionConfiguration 的connectionProxyDictionary 属性 为了方便其他同学使用&#xff0c;我们可以通过界面来进行设定&#xff08;是否开启代理、服务端、端口&#xff09;&#xff0c;从而达到类似系统上的设定 具体链接参考&#xff1a;为 iOS 网络请求设置代理…...

什么是MariaDB

2024年4月6日&#xff0c;周六晚上 今晚在Debian12上安装mysql时&#xff0c;运行后却发现是MariaDB MariaDB是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是MySQL的一个分支和替代品。MariaDB由MySQL的原始开发者之一Michael "Monty&qu…...

【面试八股总结】传输控制协议TCP(三)

参考资料 &#xff1a;小林Coding、阿秀、代码随想录 一、TCP拥塞控制⭐ 1. 慢启动 – Slow Start 慢启动是指TCP连接刚建立&#xff0c;一点一点地提速&#xff0c;试探一下网络的承受能力&#xff0c;以免直接扰乱了网络通道的秩序。 慢启动算法&#xff1a; 初始拥塞窗口…...

今年过去了多少天?(switch)

//今年已经过去了几天&#xff1f; #include <stdio.h> int monthday(int year,int month){switch(month){case 1:return 31;case 2:if ((year % 4 0 && year % 100 ! 0)||year % 400 0){return 29;}else{return 28;}break;case 3:return 31;case 4:return 30;…...

提升团队工程交付能力,从“看见”工程活动和研发模式开始

作者&#xff1a;张裕、雅纯 理想中的研发团队应当具有以下特征&#xff1a; 总是工作在最高优先级的事项上 理想的研发团队能够识别并始终集中精力在当前最紧迫和最有价值的任务上。这需要团队具备出色的项目管理能力和决策能力&#xff0c;以便能够正确评估优先级&#xff0…...

前端学习之DOM编程案例:全选反选案例

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>全选反选</title> </head> <body><input type"checkbox" id"all">全选<ul><li><…...

golang map

1.底层实现 2.如何解决hash冲突 3.扩容机制 4.无序 5.非线程安全 6.不可寻址 runtime/map.go 1.底层实现 底层基于hash表实现&#xff0c;实现有2个结构体hmap&#xff0c;bmap&#xff0c;map由若干个桶存储&#xff0c;每个桶存8个元素&#xff0c;使用链地址解决hash冲突 …...

设计模式:享元模式案例

让我们以游戏开发中的棋类游戏&#xff08;例如国际象棋&#xff09;为例来展示享元模式的代码实现。在这个例子中&#xff0c;棋子的类型是内部状态&#xff0c;而棋子的位置是外部状态。 Java 代码示例 import java.util.HashMap; import java.util.Map;// 享元接口 interf…...

pandas(day5)

一. 检测重复值 1.1 检测 data pd.read_csv("./teacher/订单数据.csv")检测行与行之前是否有重复值 data.drop_duplicates()检测 列是否有重复值出现&#xff0c; keep first 从前往后判定 &#xff0c; last是从后往前判定data.drop_duplicates(subset["产…...

如何注册midjourney账号

注册Midjourney账号比较简单&#xff0c;准备好上网工具&#xff0c;进入官网 Midjourney访问地址&#xff1a; https://www.midjourney.com/ 目前没有免费使用额度了&#xff0c;会员最低 10 美元/月&#xff0c;一般建议使用30美元/月的订阅方案。了解如何订阅可以查看订阅…...

探索数据结构:特殊的双向队列

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 双向队列的定义 **双向队列(double‑ended queue)**是一种特殊的队列…...

16_I2C库函数

I2C库函数 1.void I2C_DeInit(I2C_TypeDef* I2Cx);2.void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct);3.void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct);4.void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState);5.void I2C_DMACmd(I2C_Type…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...