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

【TCP/IP】自定义应用层协议,常见端口号

互联网中,主流的是 TCP/IP 五层协议

  • 5G/4G 上网,是有自己的协议栈,要比 TCP/IP 更复杂(能够把 TCP/IP 的一部分内容给包含进去了)

应用层

可以代表我们所编写的应用程序,只要应用程序里面用到了网络通信,就可以认为这个代码就是属于应用层的代码

日常开发中最常用到的一层:

  1. 使用大佬们已经创建好的应用层协议
    • 应用层知名的协议有很多,其中的佼佼者就是 HTTP
  2. 自己定义应用层协议
    • 另外四层都是操作系统/硬件/驱动已经实现好了的,我们不可能“自定义”,只能使用人家的

协议就是约定

  • 按照自己的规则,约定通讯方式——>自定义应用层协议

自定义应用层协议

自定义应用层协议,具体要做什么事情:

明确要传递的信息

  1. 明确前后端交货过程中,要传递哪些信息

举个例子:开发一个外卖软件,打开软件后,首先需要展示一个“商家列表”
此处就需要先确定传递的信息是什么

  1. 请求:用户是谁(用户的 ID),用户所处的位置
  2. 响应:商家列表,包含多个商家,每个商家信息中,又有商家的名字、图片、距离、评分

这里的信息如何确定,都是根据当前的需求来产生的

明确组织信息的格式

  1. 明确组织这些信息的格式
    针对信息组织格式,也有很多种方式,使用哪种方方式都可以,只要确定前段和后端是同一种方式就可以了

举个例子:使用行文本的方式来组织上述数据

  1. 请求:用户id,用户位置\n
  2. 响应:商家的id,商家名称,商家的图片地址,商家的距离,商家的评分\n

关于组织数据的格式,还有一些说法,上述“行文本”简单粗暴的方案,在实际开发中,很少会这样做


XML 方案

Maven 中就会见到,通过“成对的标签”表示“键值对”信息

<request><userid>1001</userid><postion>E45N60</postion>
</request>
  • 可以通过 XML 来传输网络数据,也可以作为程序的配置文件
  • 不过 XML 进行网络传输的时候,又有一个明显的缺点——会消耗大量的带宽
    • 网络通信中,带宽是一个非常贵的硬件设备
    • 在传输标签的时候,都得传输成对的标签,传入的信息更多
  • 所以现在 XMl 一般都是在配置文件,不进行网络传输了
  • XMl 里面的标签(键值对)都是程序员固定的,而 HTMl 里面的标签都是固定的(已经有一套标准,约定好哪些标签是合法标签,这些标签都是什么含义)

JSON 方案

当前主流的网络通信的数据格式,相比 xml 来说,可读性是很好的,同时能节省一定的带宽

{"userid":1001,"postion":""E45N60"
}
  • JSON 也是“键值对”格式,
    • 键和值之间用 : 分割
    • 键值对之间用 , 分割
    • 所有的键值对,都使用 {} 括起来
  • 这里的标签都只有一份,不需要结束标签了,节省了传递开销

YML(YAML)方案

强制要求了数据组织的格式,强制要求写成“可读性非常高”的格式

  • 键值对必须独占一行
  • “嵌套”结构必须通过缩进来表示

protobuffer方案

前三个方案,都是关注可读性,而 protobuffer 关注性能,牺牲了可读性(通过二进制的方式组织数据)

  • protobuffer 直接通过“位置”约定字段的含义,不需要传输 key 的名字,也会针对传输的数值,进行二进制的编码,起到一些“压缩”的效果
  • 极大地缩减了要传输的数据的体积——>带宽消耗就越小——>效率越高
  • 但二进制数据无法肉眼阅读,调试相关程序的时候,就会比较麻烦

常见端口号

端口号是一个整数,用来区分不同的进程。

  • 同一时刻,同一个机器上,同一个协议,一个端口号只能被一个进绑定
  • 一个进程可以绑定多个端口号
  • 端口号是通过两个字节的无符号整数表示的,取值范围 0~65535,但实际上 0 比较特殊,一般不会使用
    • 1~1023 属于已经被预定好的(有一些知名的服务器,已经提前预定了这个端口),这样的端口称为“知名端口号”(其实里面的大部分服务器已经不再使用了,在 80、90 年代是知名的)
    • 我们日常开发的时候,会避开这些端口

业务端口和管理端口

什么时候会涉及到一个进程(服务器)绑定多个端口?

  • 编写服务器,肯定需要先绑定至少一个端口号,和客户端进行交互(称为“业务端口”)
  • 服务器运行过程中,希望能够对这个服务器的行为,进行一些“控制”
    • 比如让服务器重新加载某个数据/某个配置/修改服务器的某个功能
    • 也可以通过网络通信完成上述功能
    • 就可以让服务器绑定另一个端口,通过这个端口,编写一个客户端,给服务器发送一些“控制类“请求
    • 上面的“另一个端口”就是“管理端口

调试端口

当需要针对服务器运行状态进行检测和调试,需要查看服务器运行中某个关键变量的数值的时候,千万不能用调试器来进行调试,一旦使用调试器调试这个服务,就会使服务器的一些线程被阻塞住,无法给客户端正确提供服务了

  • 虽然可以通过日志进行打印,但是不方便,需要修改代码并重启服务器
  • 可以让服务器绑定另一个端口,然后实现一些相关的打印关键变量的逻辑,客户端发送对应的调试请求
  • 这里的“另一个端口”就是“调试端口

相关文章:

【TCP/IP】自定义应用层协议,常见端口号

互联网中&#xff0c;主流的是 TCP/IP 五层协议 5G/4G 上网&#xff0c;是有自己的协议栈&#xff0c;要比 TCP/IP 更复杂&#xff08;能够把 TCP/IP 的一部分内容给包含进去了&#xff09; 应用层 可以代表我们所编写的应用程序&#xff0c;只要应用程序里面用到了网络通信…...

Frida 的下载和安装

首先要安装好 python 环境 安装 frida 和 工具包 pip install frida frida-tools 查看版本&#xff1a; frida --version 16.4.8 然后到 github 上下载对应 server &#xff08; 和frida 的版本一致 16.4.8&#xff09; Releases frida/frida (github.com) 查看手机或…...

后端开发刷题 | 链表内指定区间反转【链表篇】

描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转&#xff0c;要求时间复杂度 O(n)O(n)&#xff0c;空间复杂度 O(1)O(1)。 例如&#xff1a; 给出的链表为 1→2→3→4→5→NULL1→2→3→4→5→NULL, m2,n4 返回 1→4→3→2→5→NULL 数据范围&#xff1a; 链表…...

【NVMe系列-提问页与文章总结页面】

NVMe系列-提问页与文章总结页面 问题汇总NVMe协议是什么&#xff1f;PRP 与 PRP List是做什么的&#xff1f; 已写文章汇总 问题汇总 NVMe协议是什么&#xff1f; PRP 与 PRP List是做什么的&#xff1f; 已写文章汇总...

用生成器函数生成表单各字段

生成器函数生成表单字段是非常合适的用法,避免你要用纯javascript做后台时频繁的制作表单&#xff0c;而不能重复利用 //这里是javascript部分&#xff0c;formfiled.js //生成器函数对字段的处理&#xff0c;让各字段name\className\label\value\placeholder赋值到input的属性…...

【xilinx】O-RAN 无线电接口 - Vivado 2020.1 及更新工具版本的发行说明

描述 记录包含 O-RAN 无线电接口 LogiCORE IP 的发行说明和已知问题&#xff0c;包括以下内容&#xff1a; 一般信息已知和已解决的问题 解决方案 一般信息 可以在以下三个位置找到支持的设备&#xff1a; O-RAN 无线电接口 IP 产品指南&#xff08;需要访问O-RAN 安全站点&…...

结营考试- 算法进阶营地 - DAY11

结营考试 - 算法进阶营地 - DAY11 测评链接&#xff1b; A - 打卡题 考点&#xff1a;枚举&#xff1b; 分析 枚举 a _①_ b _②_ c d&#xff0c;中两个运算符的 3 3 3 种可能性&#xff0c;尝试寻找一种符合要求的答案。 参考代码 #include <bits/stdc.h> usi…...

设计模式: 访问者模式

文章目录 一、介绍二、模式结构三、优缺点1、优点2、缺点 四、应用场景 一、介绍 Visitor 模式&#xff08;访问者模式&#xff09;是一种行为设计模式&#xff0c;它允许在不修改对象结构的前提下&#xff0c;增加作用于一组对象上新的操作。就增加新的操作而言&#xff0c;V…...

selenium底层原理详解

目录 1、selenium版本的演变 1.1、Selenium 1.x&#xff08;Selenium RC时代&#xff09; 1.2、Selenium 2.x&#xff08;WebDriver整合时代&#xff09; 1.3、Selenium 3.x 2、selenium原理说明 3、源码说明 3.1、启动webdriver服务建立连接 3.2、发送操作 1、seleni…...

【Solidity】继承

继承 Solidity 中使用 is 关键字实现继承&#xff1a; contract Father {function getNumber() public pure returns (uint) {return 10;}function getNumber2() public pure virtual returns (uint) {return 20;} }contract Son is Father {}现在 Son 就可以调用 Father 的 …...

docker 安装mino服务,启动报错: Fatal glibc error: CPU does not support x86-64-v2

背景 docker 安装mino服务&#xff0c;启动报错&#xff1a; Fatal glibc error: CPU does not support x86-64-v2 原因 Docker 镜像中的 glibc 版本要求 CPU 支持 x86-64-v2 指令集&#xff0c;而你的硬件不支持。 解决办法 降低minio对应的镜像版本 经过验证&#xff1a;qu…...

地图相册系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…...

使用vh和rem实现元素响应式布局

示例代码 height: calc(100vh 30rem) vh&#xff08;Viewport Height&#xff09;&#xff1a;vh是一个相对单位&#xff0c;代表浏览器窗口高度的百分比&#xff0c;例如20vh就是浏览器窗口高度的20%。 rem&#xff08;root em&#xff09;&#xff1a;rem是通过html根元素…...

螺旋矩阵 II(LeetCode)

题目 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 解题 def generateMatrix(n):matrix [[0] * n for _ in range(n)]top, bottom 0, n - 1left, right 0, n - 1num 1while top <…...

如何快速掌握一款MCU

了解MCU特点 rom &#xff0c;ramgpiotimerpower 明确哪些资源是项目开发需要的 认真理解相关资料模块 开始编程 编写特别的验证程序&#xff08;项目不紧&#xff09;按照自己的理解编写&#xff08;老司机&#xff0c;时间紧张&#xff09; 掌握MCU基本功能 定时器 固…...

XSS-DOM

文章目录 源码SVG标签Dom-Clobbringtostring 源码 <script>const data decodeURIComponent(location.hash.substr(1));;const root document.createElement(div);root.innerHTML data;// 这里模拟了XSS过滤的过程&#xff0c;方法是移除所有属性&#xff0c;sanitize…...

uniapp去掉页面导航条

在pages.json文件中&#xff0c;globalStyle中添加 ”app-plus“:{"titleNView":false }...

MySQL数据库专栏(三)数据库服务维护操作

1、界面维护&#xff0c;打开服务窗口找到MySQL服务&#xff0c;右键单击可对服务进行启动、停止、重启等操作。 选择属性&#xff0c;还可以设置启动类型为自动、手动、禁用。 2、指令维护 卸载服务&#xff1a;sc delete [服务名称] 例如&#xff1a;sc delete MySQL 启动服…...

【QT】基于UDP/TCP/串口 的Ymodom通讯协议客户端

【QT】基于UDP/TCP/串口的Ymodom通讯协议客户端 前言Ymodom实现QT实现开源库的二次开发-1开源库的二次开发-2 串口方式实现TCP方式实现UDP方式实现补充&#xff1a;文件读取补充&#xff1a;QT 封装成EXE 前言 Qt 运行环境 Desktop_Qt_5_11_2_MSVC2015_64bit &#xff0c;基于…...

超详细!!!electron-vite-vue开发桌面应用之引入UI组件库element-plus(四)

云风网 云风笔记 云风知识库 一、安装element-plus以及图标库依赖 npm install element-plus --save npm install element-plus/icons-vue npm i -D unplugin-icons二、vite按需引入插件 npm install -D unplugin-vue-components unplugin-auto-importunplugin-vue-componen…...

基于MYC-Y6ULX-V2核心板的工业运动控制系统实践

1. 项目概述&#xff1a;当工业运动控制遇上嵌入式核心板在工业自动化领域&#xff0c;运动控制系统是驱动设备精确执行动作的“大脑”和“神经中枢”。从数控机床的精密加工&#xff0c;到机器人的流畅轨迹&#xff0c;再到包装产线的快速分拣&#xff0c;其核心都依赖于一个稳…...

VS2019编译OpenCASCADE 7.6.0避坑实录:从custom.bat修改到Demo测试,一次搞定

VS2019编译OpenCASCADE 7.6.0全流程避坑指南 在三维建模与CAD开发领域&#xff0c;OpenCASCADE作为开源几何内核引擎&#xff0c;其强大的BRep建模和STEP文件处理能力备受开发者青睐。然而对于初次接触OCC的Windows平台开发者而言&#xff0c;在Visual Studio 2019环境下完成从…...

告别‘天书’!手把手教你用vdex2dex、odex2smali等工具,把Android应用的vdex/odex/cdex转成可读的dex文件

Android逆向工程实战&#xff1a;从vdex/odex/cdex到可读dex的完整指南 当你兴致勃勃地打开一个APK文件准备分析时&#xff0c;却发现里面只有vdex、odex或cdex文件&#xff0c;用JADX直接打开全是乱码——这种挫败感每个逆向工程师都经历过。本文将带你一步步破解这些"天…...

CANN/asc-devkit SIMD数据搬运API

LoadUnzipIndex 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode…...

同步、异步与互斥:从通用OS到RTOS的全面解析

一、基础概念&#xff1a;进程与线程1.1 什么是进程&#xff1f;进程是操作系统进行资源分配和调度的基本单位&#xff0c;是一个正在运行的程序实例。1.2 什么是线程&#xff1f;线程是操作系统进行CPU调度的基本单位&#xff0c;是进程内部的一条执行路径&#xff08;轻量级进…...

CG-65 剖面细管式温度传感器 小巧便携 多层温度同监测

一、产品概述&#xff1a;小巧便携&#xff0c;功能集成在农业生产、环境监测等诸多领域&#xff0c;土壤温度是一项至关重要的参数。一款性能优异的土壤温度监测设备&#xff0c;能够为相关工作提供精准的数据支持。我们的多深度土壤温度监测仪&#xff0c;正是这样一款专为精…...

边缘计算与机器视觉在产线质检中的实战应用与优化

1. 项目概述&#xff1a;当产线质检遇上边缘计算与机器视觉在制造业的车间里&#xff0c;质检环节一直是效率与质量的“卡脖子”点。传统的人工目检&#xff0c;不仅劳动强度大、易受疲劳和情绪影响&#xff0c;而且标准难以统一&#xff0c;漏检、误检时有发生。而将高清相机拍…...

【Web安全】JWT常见安全漏洞总结

文章目录前言1. JWT基础与漏洞概述2. JWT核心漏洞解析2.1 未校验签名2.1.1 漏洞原理2.1.2 利用方式2.1.3 实战脚本2.2 算法篡改漏洞2.2.1 漏洞原理2.2.2 核心说明2.2.3 攻击流程2.3 弱密钥漏洞2.3.1 漏洞原理2.3.2 利用方式2.4 垂直越权2.4.1 漏洞原理2.4.2 利用流程2.5 KID字段…...

别再被0.1+0.2≠0.3搞懵了!用Python和Java代码手把手拆解IEEE-754浮点数存储

浮点数精度之谜&#xff1a;用代码揭开0.10.2≠0.3的真相 当你在Python控制台输入0.1 0.2时&#xff0c;得到的不是预期的0.3&#xff0c;而是0.30000000000000004。这个看似简单的数学运算为何会出现如此"诡异"的结果&#xff1f;本文将带你用Python和Java代码深入…...

桌面Z箍缩实验:从等离子体原理到聚变中子探测的DIY实践

1. 项目概述&#xff1a;从“人造太阳”到桌面实验的能源狂想“如何通过聚变制造能源及如何实现”&#xff0c;这个标题背后&#xff0c;是无数工程师和科学家为之奋斗终身的终极能源梦想。它听起来宏大得像是国家实验室的专属课题&#xff0c;但今天我想从一个更接地气的、带有…...