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

网络原理 一

一、协议

网络通信中,协议是非常重要的概念.

协议进行了分层,此处就是按照这几层顺序来介绍每一层中的核心协议.

应用层,就对应着应用程序,是程序员打交道最多的一层,调用系统提供的 网络api 写出的代码都是基于应用层的.

应用层这里当然也有很多现成的协议,但更多的还是,程序员根据实际场景,自定义协议.

   ->   网络传输的数据要怎么使用,也要考虑数据是怎么样的格式,里面包含哪些内容,

协议是一种约定,虽然存在很多现有的协议,但是除此之外,程序员也可以自己来约定协议.

自定义协议约定好两方面内容:

1   ->   服务器和客户端之间要交互哪些信息

2   ->   数据的具体格式

客户端按照上述约定发送请求,服务器按照上述约定来解析请求

服务器按照上述约定构造响应,客户端也按照上述约定解析请求.

为了让程序员更方便的去约定这里的协议格式,业界也给出了几个比较好用的方案,可以拿过来直接套进来.

1.1 xml

大概的模型如下:

请求:

<request>

        <userld>1000</userld>

        <position>[经纬度]</position>

</request>

响应:

<response>

        <shops>

                <shop>

                        <id>1001</id>

                        <name>杨国福麻辣烫</name>

                        <image>图片地址</image>

                        <rank>4.8</rank>

                        <description>这是麻辣烫</description>

                </shop>

        </shops>

</response>

形如 :<name>   这叫做标签(tag),标签是成对出现的.

<name>称为 开始标签        </name>称为结束标签

开始标签和结束标签之间夹着的就是标签的值.标签可以嵌套

标签名字/标签的值/标签的嵌套关系,都是程序员自定义的.

1.2 json

请求

{

        userld:1000,

        position:[经纬度]

}

响应

{

   {

        id:1001,

        name:"杨国福麻辣烫"

   },

   {

        id:1002,

        name:"隆江猪脚饭"

   }

}

键值对结构

键和值之间使用 "  :  " 分割

键和对之间使用 "  ,  "分割

把若干个键值对使用{}括起来,此时就形成了一个json对象.

还可以把多个json对象放到一起,使用 "  ,  " 分隔开,应且使用 "  [ ]  " 整体括起来,就形成了一个json数组

1.3 protobuffer

只是开发阶段(代码)定义出这里有哪些资源,描述每个字段的含义,

程序真正运行的时候,实际传输的数据是不包含这样的描述信息的.

这样的数据是按照二进制的方式来组织的.

虽然protobuffer运行效率高,但是使用并没有比json广泛.

这样的设定,最高效的做法,并不太有利于程序员阅读.

二、传输层

2.1 端口号

端口号是一个2个字节的整数,使用端口号的时候, 1 - 1024 都属于是系统保留的自用端口.

2.2 UDP协议

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

UDP数据报 = 报头 + 载荷

UDP报头中有一共有4个字段,每个字段两个字节

由于协议字节中使用两个字节表示端口号,端口号的取值范围就是0-65535   ->   最大就是64kb

2.3 校验和/检验和

校验和/检验和   ->   验证数据再传输过程中是否正确.

前提 : 数据在传输过程中可能会坏掉.

网络数据传输,本质上是光信号/电信号/电磁波,很有可能会受到干扰.

使用高电平低电平表示 0 1 

外界如果加上一个磁场,就可能把其中的低电平变成高电平

此时,出现0 -> 1  ,  1 -> 0  这叫做比特翻转

校验的作用就是用来识别当前数据是否出现了比特翻转,识别数据是否正确.

相关文章:

网络原理 一

一、协议 网络通信中,协议是非常重要的概念. 协议进行了分层,此处就是按照这几层顺序来介绍每一层中的核心协议. 应用层,就对应着应用程序,是程序员打交道最多的一层,调用系统提供的 网络api 写出的代码都是基于应用层的. 应用层这里当然也有很多现成的协议,但更多的还是,程…...

xcode配置快速打开终端命令行工具教程

以往我们使用idea编辑器或者vscode编辑器的时候&#xff0c;我们可以快速的在编辑器下面打开终端进行相关的操作&#xff0c;但是在xcode里面却没有这么方便的功能按钮&#xff0c;真的不是很习惯&#xff0c;所以这次就来给xcode配置这么一个方便的功能。 idea的Terminal 这…...

AIGC降重:如何2分钟降低论文AI率和查重率?推荐使用SpeedAI科研小助手

确保学术论文的独立性与诚信性&#xff0c;对于学业的成就及学位的获取至关重要&#xff0c;其中&#xff0c;论文的人工智能查重与降低AIGC相似度扮演着核心角色。 常规的查重手段主要围绕查重软件的运用和个体的自行审查&#xff1b;而降重则通常通过语句重组、同义替换、内…...

Blazor入门-连接MySQL的简单例子:列出数据+简单查询

参考&#xff1a; ASP.NET Core 6.0 Blazor Server APP并使用MySQL数据库_blazor mysql-CSDN博客 https://blog.csdn.net/mzl87/article/details/129199352 本地环境&#xff1a;win10, visual studio 2022 community, mysql 8.0.33 (MySQL Community Server), net core 6.0 目…...

CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)

注意&#xff1a;本模型继续加入 组合预测模型全家桶 中&#xff0c;之前购买的同学请及时更新下载! 往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;Transformer-BiGRU预测模…...

箭头函数的意义和函数的二义性

前言 说到箭头函数&#xff0c;可能很多人的第一反应就是和普通函数的区别&#xff1a; 箭头函数没有 this&#xff0c;普通函数的 this 指向依赖它是如何被调用的箭头函数没有 arguments 对象&#xff0c;而是通过剩余参数&#xff08;rest parameters&#xff09;来获取所有…...

618必买的数码好物有哪些?盘点兼具设计与实用的数码好物分享

随着618购物节的到来&#xff0c;数码爱好者们又开始跃跃欲试&#xff0c;期待在这个年度大促中寻找到自己心仪的数码好物&#xff0c;在这个数字化时代&#xff0c;数码产品不仅是我们日常生活的必需品&#xff0c;更是提升生活品质的重要工具&#xff0c;那么在众多的数码产品…...

【好书分享第十三期】AI数据处理实战108招:ChatGPT+Excel+VBA

文章目录 一、内容介绍二、内页插图三、作者简介四、前言/序言五、目录 一、内容介绍 《AI数据处理实战108招&#xff1a;ChatGPTExcelVBA》通过7个专题内容、108个实用技巧&#xff0c;讲解了如何运用ChatGPT结合办公软件Excel和VBA代码实现AI办公智能化、高效化。随书附赠了…...

001 CentOS 7.9 安装及配置jdk-8u411-linux-x64.tar.gz

文章目录 1. 下载JDK安装包2. 创建安装目录3. 上传并解压JDK安装包4. 配置环境变量5. 验证安装-bash: pathmunge: command not found配置文件区别$PATH https://dbeaver.io/ 1. 下载JDK安装包 首先&#xff0c;需要从Oracle官方网站或其他可信赖的来源下载jdk-8u411-linux-x64…...

Revit二次开发-WPF ProgressBar 执行程序中显示进度条

Revit开发执行命令时如果时间长,界面会顶住,导致用户误以为程序未响应,解决方法:增加WPF ProgressBar 进度条执行程序中显示进度条,提示命令还是进行中, 实现流程: 新建一个WPF,Window启动时加载一个事件Loaded=“Window_Loaded”,用于显示进度条在WPF后台,新建一个异…...

React:构建Web应用的未来

引言 在不断发展的Web开发领域&#xff0c;React已经成为一股主导力量&#xff0c;重塑了我们构建用户界面和交互式应用的方式。React由Facebook&#xff08;现Meta&#xff09;开发&#xff0c;由于其创新的基于组件的架构、高效的虚拟DOM渲染和声明式编程风格而广受欢迎。在…...

【Elasticsearch】Centos7安装Elasticsearch、kibana、IK分词

目录 本文安装包下载地址注意安装elasticsearch1.上传文件2.解压elasticsearch-6.3.1.tar.gz3.开启远程连接权限4.修改其他配置[root用户操作]5.重启虚拟机6.启动es7.外部访问 安装kibana-61.解压2.配置3.启动kibana4.访问5.在开发工具中做数据的增删改查操作 安装IK分词1.wind…...

IDEA中各种Maven相关问题(文件飘红、下载依赖和启动报错)

错误情况 包名、类名显示红色、红色波浪线&#xff0c;大量依赖提示不存在&#xff08;程序包xxx不存在&#xff09; 工程无法启动 一、前提条件 1、使用英文原版IDEA 汉化版的可能有各种奇怪的问题。建议用IDEA英文版&#xff0c;卸载重装。 2、下载maven&#xff0c;配置环…...

Android 13 VSYNC重学习

Android 13 VSYNC重学习 引言 学无止境&#xff0c;一个字干就完事&#xff01; 源码参考基于Android 13 aosp&#xff01; 一. Android VSync模块开胃菜 在开始正式的分析之前&#xff0c;我们先简单对Android的Vsync模块简单介绍下,如下图所示&#xff0c;其中: HW_VSync是…...

std::move和左值右值

引用&#xff1a;windows程序员面试指南 std::move std::move 是 C 标准库中的一个函数模板&#xff0c;用于将一个左值&#xff08;左值引用&#xff09;转化为右值引用&#xff0c;从而实现移动语义。 移动语义是一种可以将资源&#xff08;如内存&#xff09;从一个对象转…...

QT学习备份

2023年1月2日09:00:32 1.信号/槽编辑器 发送者&#xff1a;控件 信号&#xff1a;是控件发出的信号 接受者&#xff1a;包含控件的容器 槽&#xff1a;程序上用slot标识的方法 2.Q_OBJECT宏 只有继承了QObject类的类&#xff0c;才具有信号槽的能力。所以&#xff0c;为了使用…...

【wiki知识库】03.前后端的初步交互(展现所有的电子书)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日目标 二、&#x1f4c2;前端配置文件补充 三、&#x1f30f;前端Vue的改造 四、&#x1f4a1;总结 一、&#x1f525;今日目标 在上一篇文章当中&#xff0c;我已带大家把后端的一些基本工…...

AOP——学习

AOP&#xff08;面向切面编程&#xff09;是Spring框架的重要特性之一&#xff0c;用于分离关注点并处理横切关注点&#xff0c;如日志记录、安全性和事务管理。在面试中&#xff0c;AOP相关的问题通常会涉及基本概念、应用场景、实际使用、以及与其他编程范式的比较。以下是一…...

Linux静态库、共享动态库介绍、制作及使用

参考学习&#xff1a;Linux下的各种文件 、动态库基本原理和使用方法&#xff0c;-fPIC选项的来龙去脉 、Linux静态库和动态库分析 文章写作参考&#xff1a;Linux共享库、静态库、动态库详解 - sunsky303 - 博客园 (cnblogs.com) 一.Linux共享库、静态库、动态库详解 使用G…...

【Paddle】稀疏计算的使用指南 稀疏ResNet的学习心得 (2) + Paddle3D应用实例稀疏 ResNet代码解读 (1.6w字超详细)

【Paddle】稀疏计算的使用指南 & 稀疏ResNet的学习心得 Paddle3D应用实例稀疏 ResNet代码解读 写在最前面一、稀疏格式简介1. COO&#xff08;Coordinate Format&#xff09;2. CSR&#xff08;Compressed Sparse Row Format&#xff09; 二、Paddle稀疏张量支持1. 创建 C…...

AI辅助开发C语言项目,让快马平台智能生成学生成绩管理系统

最近尝试用AI辅助开发一个C语言的学生成绩管理系统&#xff0c;整个过程比想象中顺利很多。这个项目虽然不算复杂&#xff0c;但涉及模块化设计、文件操作、指针管理等知识点&#xff0c;正好可以验证AI在辅助开发中的实际效果。下面分享我的具体实践过程&#xff1a; 需求分析…...

Apache DolphinScheduler 三月大动作,你知道几个?

嘿&#xff01;2026 年 3 月 月报来啦&#xff01;Apache DolphinScheduler 社区超给力~ 13 位小伙伴踊跃贡献代码&#xff0c;发布了 3.4.1 昕版本&#xff0c;调度增强、任务插件升级&#xff0c;还优化 API 与 UI&#xff0c;修复超 15 个 Bug。 与此同时&#xff0c;基础设…...

ZXPInstaller:革新性Adobe扩展安装工具的突破与实践

ZXPInstaller&#xff1a;革新性Adobe扩展安装工具的突破与实践 【免费下载链接】ZXPInstaller Open Source ZXP Installer for Adobe Extensions 项目地址: https://gitcode.com/gh_mirrors/zx/ZXPInstaller 在数字化创意领域&#xff0c;Adobe系列软件已成为设计工作者…...

大模型“幻觉“频现?RAG技术如何根治三大痛点,实现精准问答?

文章深入解析了RAG&#xff08;检索增强生成&#xff09;技术的核心原理与实现流程&#xff0c;指出大模型普遍存在的三大缺陷&#xff1a;幻觉现象、知识更新缓慢以及领域知识理解有限。RAG通过结合向量数据库、嵌入模型和大语言模型&#xff0c;实现从外部私有知识库检索信息…...

突破Cursor API限制:cursor-free-vip实现无限制Pro功能的技术解析

突破Cursor API限制&#xff1a;cursor-free-vip实现无限制Pro功能的技术解析 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reach…...

Speechless:如何用一款免费Chrome插件永久保存你的微博记忆

Speechless&#xff1a;如何用一款免费Chrome插件永久保存你的微博记忆 【免费下载链接】Speechless 把新浪微博的内容&#xff0c;导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 在数字时代&#xff0c;我们的…...

3步破解微信记录管理难题:WeChatMsg如何重新定义数字记忆保存?

3步破解微信记录管理难题&#xff1a;WeChatMsg如何重新定义数字记忆保存&#xff1f; 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHu…...

3种方法彻底移除Windows Defender:释放系统性能,恢复完全控制权

3种方法彻底移除Windows Defender&#xff1a;释放系统性能&#xff0c;恢复完全控制权 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcod…...

Qwen Pixel Art入门必看:自动触发词机制+参数调优详细步骤解析

Qwen Pixel Art入门必看&#xff1a;自动触发词机制参数调优详细步骤解析 1. 像素艺术生成服务介绍 Qwen Pixel Art是基于Qwen-Image-2512大模型和Pixel Art LoRA微调模块打造的专业像素艺术生成服务。这项技术能够将普通文字描述转化为精美的像素风格图像&#xff0c;特别适…...

Scroll Reverser终极指南:让Mac滚动方向完全掌控

Scroll Reverser终极指南&#xff1a;让Mac滚动方向完全掌控 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser Scroll Reverser是一款专为macOS设计的开源工具&#xff0c;能够独立…...