【计算机网络】认识协议

目录

一、应用层

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

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

二、协议

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

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

分析:

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

三、序列化和反序列化

序列化和反序列化:

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

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

序列化和反序列化的目的

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

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

相关推荐
Leinwin3 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382503 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇3 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7593 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
Thera7773 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
运维小欣3 小时前
智能体选型实战指南
运维·人工智能
yy55274 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ4 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
君义_noip5 小时前
信息学奥赛一本通 1952:【10NOIP普及组】三国游戏 | 洛谷 P1199 [NOIP 2010 普及组] 三国游戏
c++·信息学奥赛·csp-s
左左右右左右摇晃5 小时前
计算机网络笔记整理
笔记·计算机网络