目录

网络通信基本原理

网络通信基本原理

通讯的必要条件

  • 主机之间需要有 传输介质 。光纤、蓝牙、wify

  • 主机上必须有 网卡设备 。把二进制信息转为高低电压的过程就是数据的调制过程。把电信号转为二进制信息的过程为解调制。

  • 主机之间需要协商 网络速率

    https://i-blog.csdnimg.cn/blog_migrate/d97de6ae6616169048db1c96661760af.png

网路的通讯方式

日常生活中,我们通讯的方式不可能只有两台主机,如何建立多台主机互连,假如要与十台电脑通讯,那么不可能去买一台有十个网卡的主机,所以这个时候就可以通过 交换机路由器 完成这个事情。

如何建立多台主机互连?如何定位局域网中的其它主机?

通过 交换机 我们可以将多台电脑进行连接。

a主机将消息发送给交换机,交换机将消息广播给其他主机,在这个过程中其他机器都会收到这条消息,然后b主机就通过 MAC地址 发现a想找的是自己,而其他的主机就会将这条消息当作垃圾丢弃。这个过程就是通过交换机来完成局域网通信的操作。

https://i-blog.csdnimg.cn/blog_migrate/85aba6408efc46a716d62b374f646a16.png

通过交换机来完成局域网通信有哪些问题?

通过交换机来完成局域网通信是无法满足互联网的需求。比如说我们不可能将所有电脑都放在一个局域网内,因为交换机的接口数量是有上限的,而且如果我们把所有机器放在一个局域网里,那么这个时候 广播风暴 就会尤为明显!因为任意一条消息的发送都会被其他主机所接收,然后还要确认是否有效。基于这种情况, 网路就被分为许多较小的局域网,然后就是城域网,最后是互联网

https://i-blog.csdnimg.cn/blog_migrate/a4a9bd523fb93d8e7027a78c6c57c116.png

如何实现?

我们现在能访问百度,但是百度并不在局域网内,所以我们与百度的主机分属于不同的局域网,那这两个局域网之间该如何建立通讯呢?这里我们就需要用来 路由器 来进行数据的交换了。首先我们的电脑要去访问百度的主机,我们不仅需要知道百度的 网卡地址 ,还需要知道它在哪个网络里,这块就需要用到 ip地址 了。这里要说明的是,我们数据在发送的时候不仅只有程序代码所接收到的数据, 还有原mac地址、原ip地址和目标mac地址、目标ip地址 等等。这些内容呢首先会被组装成一条大的数据,之后再发送到路由器上,路由器是可以识别当前要找的主机它在不在这个局域网内。如果说它不在当前的局域网内,这个时候他会按照路由表上的信息去帮助我们通过网络路由来找到对应的网络,之后再去把数据发送过去。发送到对应的网络之后,由那边的交换机完成定位功能。那这样的话我们就通过了路由器实现了不同网络之间的主机通讯。

https://i-blog.csdnimg.cn/blog_migrate/d2e1c80258abd8beb954a311d5eada68.png

网络层次模型

对于网络通信来说它是一个复杂的工程,它需要有很多的基础硬件设备,而这些设备又有很多的厂商在进行生产,所以为了方便网络的实施与管理维护就会有相应的组织来推出相应的标准规范 。目前最常见的就是 OSI七层模型TCP、IP的四层模型 。TCP、IP是建立在OSI之上的另外四种模型。无论我们采用的哪一种模型,它其实都是对通信的过程进行分层,然后每层当中也存在很多的协议。例如我们常用的http就属于应用层的协议,而tcp和udp就属于传输层的协议。下面就以OSI为例来介绍它的七层分层以及每一次做了哪些事情。它的作用就是更加清晰规范的完成网络通讯。

这里主要掌握分层的目的,七层的名称和作用,还有就是一些常见的协议名称

OSI七层模型

  • 应用层 : 用户与网络的接口

    • 利用 http 协议完成网站服务
    • 利用 ftp 协议完成文件的传输服务
    • 利用 ssh 协议完成远程登陆服务
  • 表示层 : 数据加密、转换、压缩

  • 会话层 : 控制网络连接建立与终止

  • 传输层 :保证数据传输的可靠性

    • 在封装的时候还会携带目标占用的端口号,例如访问网站的时候会携带80端口( TCP , UDP )
  • 网络层 : 通过路由来找到目标网络

    • 常见的就是ip协议,让我们根据ip地址来确定源和目标的网络
  • 数据链路层 :确定目标主机

    • 这一层就是确定了目标网路并进入了某一个局域网内
  • 物理层 : 各种网络物理设备和标准

    数据从A至B,先封装再解封

TCP IP四层模型

  • 应用层
    • 就是将OSI的应用层、表示层、会话层合并
  • 传输层
    • 就是OSI的传输层
  • 主机层
    • 就是OSI的网络层
  • 接入层
    • 就是将OSI的数据链路层、物理层合并

数据从A到B

  • 按照分层自上向下一层一层封装
  • 到了B主机的网卡协调之后,再按照自下向上的顺序进行拆解
  • 最后在应用层里拿到A主机所发送过来的数据

数据封装与解封的过程

  • 第一步在应用层产出需要使用的数据data

    https://i-blog.csdnimg.cn/blog_migrate/057ee9757f133013a64364c15908b242.png

  • 然后data数据就传向了传输层。在这一层对于我们来说最熟悉的就是TCP与UDP协议,这两个协议都是基于端口的,而端口的作用就是在主机上用于确定唯一一个应用进程。所以数据在这层就会包裹上目标应用端口和应用在当前主机上的源端口

    https://i-blog.csdnimg.cn/blog_migrate/6070641ee3652d22bcb881be5b0cbd3c.png

  • 数据再传到网络层,因为我们的主机是在不同的网络里的,所以需要通过IP协议来确定目标主机所在的网络。因此数据在这一层中会包裹目标主机的mac地址、目标主机的ip地址和当前主机的源ip地址。有了这些地址之后我们只是能确定某一个网络,并不能确定在这个网络里边那一台机器是我们想要的,所以接下来数据就到达了链路层

    https://i-blog.csdnimg.cn/blog_migrate/db75e7a6d5d502a1b86f1c577ed88341.png

  • 在这一层主要是通过mac地址来完成 寻址 操作,所以数据在这一层会被包裹目标主机的mac地址与当前主机的mac地址。至此一条具备完整信息的数据就封装ok了。

    https://i-blog.csdnimg.cn/blog_migrate/a19a87bff14bea2dd810d452bd3b5356.png

  • 这个时候就要传递给网络了,而我们知道网线是不能识别二进制的,所以经过 物理层(网卡) 的调制之后就会变成 高低电压 ,而我们这里任然是以二进制的数据来表示转换之后的数据,有了高低电压之后经过网络路由器的分配和传输介质的运输,最终就到达了目标主机的网卡。 mac地址是由硬件厂商确认好的,也就是网卡设备(一般电脑有两个网卡,一个是有线一个是无线)

    https://i-blog.csdnimg.cn/blog_migrate/c59c2de029e2897af6188d72cd79866f.png

  • 这个时候已经到 目标设备了 ,它要去做数据的解调,将电信号变成二进制,然后再向上一层一层的 验证

    https://i-blog.csdnimg.cn/blog_migrate/471d009b60eb071c78aaadf7516d3311.png

  • 到达链路层之后它就去分析一下,目标的mac地址是不是当前主机的mac地址,如果是则继续向上传递至网络层

    https://i-blog.csdnimg.cn/blog_migrate/b2d01bf6033ae490931f92581e48e8db.png

  • 在这层就要去校验目标的ip是不是当前自己的ip,如果是,则继续拆包。向上传输至传输层

    https://i-blog.csdnimg.cn/blog_migrate/2ab59ed4dc8956e3427fd0d1187a9acc.png

  • 这里再次确定当前的端口是不是自己,如果是的话,则再次拆解数据,向上传递至应用层

    https://i-blog.csdnimg.cn/blog_migrate/83780fc0db4d558bb3da8ec2302c4c33.png

  • 到了应用层之后,当前网络里的目标应用就拿到了另外一个网络当中的某一台主机上的某一个应用所传递过来的数据。 这个过程就是数据在通讯过程中的封装与解封的步骤。

    https://i-blog.csdnimg.cn/blog_migrate/f020d99345b06ad1d6b028c7eb223a82.png