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

【Linux】认识协议

目录

  • 一、应用层
  • 二、协议
  • 三、序列化和反序列化

一、应用层

之前的socket编程,都是在通过系统调用层面,如今我们来向上打通计算机网络。认识应用层的协议和序列化与反序列化
在这里插入图片描述

我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层。我们在应用层使用的数据形式一般都是结构体或者对象,而对于网络来说,传输的数据一般都是字节流的

二、协议

为了使数据在网络上能够从源到达目的,网络通信的参与方必须遵循相同的规则,我们将这套规则称为协议(protocol),而协议最终都需要通过计算机语言的方式表示出来。只有通信计算机双方都遵守相同的协议,计算机之间才能互相通信交流。

协议是一种 “约定”. socket api的接口, 在读写数据时, 都是按 “字符串” 的方式来发送接收的. 如果我们要传输一些"结构化的数据" 怎么办呢?我们通过实现网络版的计算机来深入理解协议的作用。

分析:

  • 网络传输的数据也可以是结构体对象,但是最好不要,因为结构体在不同的平台中,有着不同的对齐规则,这样就会导致同一个结构体对象字节流在不同的平台中解析出来的结果不一样;如果想要解析结果需要一样,这样就要求主机和相应的操作系统需要高度的一样,显然,这是不可能的。所以,在网络传输的过程中,需要将结构体序列化成一个大的字符串,为了拿到消息,对于从网络中得到的数据,需要进行反序列化得到相应的信息!
  • 协议本质:对方约定好某种格式的数据,常见的就是结构体或者类来进行表达;
  • 序列化的作用:方便网络进行通信;
  • 反序列化作用:方便上层来设置和获取数据,就是通过. ->操作符来进行读写数据
  • 序列化和反序列化并只是单单将结构体的数据变成一串大的字符串,为了方便提取和标识数据,需要加上相关的分割符号和对应的报头。

三、序列化和反序列化

序列化和反序列化:

  • 序列化是将对象的状态信息转换为可以存储或传输的形式(字节序列)的过程。
  • 反序列化是把字节序列恢复为对象的过程。

OSI七层模型中表示层的作用就是,实现设备固有数据格式和网络标准数据格式的转换。其中设备固有的数据格式指的是数据在应用层上的格式,而网络标准数据格式则指的是序列化之后可以进行网络传输的数据格式。

序列化和反序列化的目的

  • 在网络传输时,序列化目的是为了方便网络数据的发送和接收,无论是何种类型的数据,经过序列化后都变成了二进制序列,此时底层在进行网络数据传输时看到的统一都是二进制序列。
  • 序列化后的二进制序列只有在网络传输时能够被底层识别,上层应用是无法识别序列化后的二进制序列的,因此需要将从网络中获取到的数据进行反序列化,将二进制序列的数据转换成应用层能够识别的数据格式。

我们可以认为网络通信和业务处理处于不同的层级,在进行网络通信时底层看到的都是二进制序列的数据,而在进行业务处理时看得到则是可被上层识别的数据。如果数据需要在业务处理和网络通信之间进行转换,则需要对数据进行对应的序列化或反序列化操作。
在这里插入图片描述

http://www.lryc.cn/news/204614.html

相关文章:

  • Hadoop3教程(三十四):(生产调优篇)MapReduce生产经验汇总
  • Unity⭐️Win和Mac安卓打包环境配置
  • STM32F4XX之串口
  • 【J-Long Group Limited】申请1500万美元纳斯达克IPO上市
  • 上传文件到google drive
  • 用VLOOKUP快速合并两个表格
  • Vue ref属性
  • 【python入门】函数,类和对象
  • alibaba.fastjson的使用(二)-- jar包导入
  • A_搜索(A Star)算法
  • Tinywebserve学习之linux 用户态内核态
  • AI之浅谈
  • 20231024后端研发面经整理
  • 【前段基础入门之】=>CSS3新增渐变颜色属性
  • 深入浅出排序算法之归并排序
  • opencv dnn模块 示例(19) 目标检测 object_detection 之 yolox
  • 微信小程序阻止返回事件
  • YOLOv7改进:新颖的上下文解耦头TSCODE,即插即用,各个数据集下实现暴力涨点
  • Unity中Shader阴影的接收
  • ✔ ★【备战实习(面经+项目+算法)】 10.22学习时间表(总计学习时间:4.5h)(算法刷题:7道)
  • Amazonlinux2023(AL2023)获取metadata
  • C++(Chapter 3)
  • 优化单元测试效率:Spring 工程启动耗时统计
  • 华纳云:连接mysql出现2059错误怎么解决
  • 零基础Linux_22(多线程)线程控制和和C++的多线程和笔试选择题
  • docker版本的Jenkins安装与更新技巧
  • [C++]3.类和对象下(this指针补充)+ 类和对象中构造函数和析构函数。
  • OpenLDAP LDIF详解
  • Leetcode.33 搜索旋转排序数组
  • ES 8.x 向量检索性能测试 把向量检索性能提升100倍!