Android与物联网设备通信-数据传递的本质

前面我们了解了一些基本通信机制。为了更系统全面的学习,今天我来看一数据到底在传输中是什么东西,又是怎么解析的。

章节

目录

  • 数字信号
  • 时钟信号
  • 信号衰减和抗干扰
  • 包数据MAC帧

我们知道对于计算机来说,所有的数据都是二进制,非零即一。那么有没有想过在数据传输中电信号长什么样子呢?

就像这样的结构,组成所有的数据。

数字信号

image.png

我们的数据由一块叫网卡的硬件把数据包转换成电信号,通过网线进行传输到另一端。
转换的过程就是电压和电流的输出变化

时钟信号

image.png

接受端收到信号的时候会根据信号时钟去切割比特信号,因为当连续的1111 0000 1111
这种情况下接收方就不知道有几个1,几个0。所以会根据时钟信号去切割。通俗的说这里的时钟信号就是间隔多少算一个比特

信号衰减和抗干扰

image.png

实际场景在电信号传播中会受干扰。现在我们熟悉的计算机网络环境一般是使用RJ-45接口。也就是网口来作为端口。任何在地球上存在的能量都会因为熵导致损失或丢失。那么一个正常的正方波信号在传输中就会变成弯弯扭扭的线条。这时伟大的人想出了很多办法来解决这个问题。

其中双绞线(网线)就是一种优秀的抑制噪声方案。尽可能的去抗干扰和减少熵丢失,就是两根线像麻花一样缠绕在一起可以抵消一部分干扰。深究更细的颗粒度需要读者自行学习。

image.png

包数据MAC帧

这里的包是指网络数据包,网络包是将电信号转换成一组数据后的最基本单位。它的基本结构是这样的:

image.png

  • 包头:各种网络底层的控制信息
  • 数据体:上层数据的一个载体。(网络模型章节详解)

网络包是一层一层的关系,非常类似俄罗斯套娃的结构,一层层包裹着内部。

image.png

我们来看一个网络包中最外层的MAC帧结构:

image.png

上面图中的结构是802.3以太网帧的结构。我们生活中大部分802.3(有线),802.11(WIFI无线)。其中一组帧允许传输1500个字节,即1500×8比特数据。MAC帧的标准有多种,和历史包袱,我们只关注现在最常用的就好了。

  • 前导码和帧开始符:作为帧数据的开始标记(防粘包用)。
  • 报文头:接收方MAC地址、发送方MAC地址、802.1Q可选字段、以太网类型
  • 负载:数据体,即上层协议的报文头和数据。(类似俄罗斯套娃)
  • 沉余校验:32位的循环冗余校验码,用于验证帧数据是否被损坏。
  • 帧间距:16个空字节,用于切割开下一组MAC帧数据,防止粘连。

MAC帧的上层一般装的是IP头报文和数据体。其实IP报文和MAC报文有些类似,但是IP报文更加复杂。这是由于网络分层导致的结果。也正式因为这样才可以让每一层协议不关注上层协议在做什么事情,到达解耦的目的。

再往上一层是IP报文结构,感兴趣的读者可以点这里查看。整体来看我们的数据就是下面这样的,也就是我前面提到的俄罗斯套娃结构。

image.png


这么底层的协议和我们开发一个物联网通信应用有什么关系。现在我可以告诉你,其实和写业务代码没有太大干系,因为我们是在应用层上做设计。很多时候是基于一些稳定的协议内去做消息透传。但是呢,由于这部分是很基础的核心内容。可以说做android应用层的同学很难真正要碰到要自己去解析它们,一旦碰到了问题,或者硬件工程师和我们沟通起来却不明白它们在说什么岂不是很尴尬?嗯哼

下一节我们继续学习网络模型分层,来领略一下每层结构的意义,会和本节的关联比较大。

随缘打赏!