跳到主要内容

网络通信

网络通信基本原理

通信必要条件
  • 主机之间需要有传输介质(比如网线、光纤、蓝牙、wifi ...)

  • 主机上必须有网卡设备(网卡可以完成信号的调制与解调制,其中将二进制转为高低电压的过程就是数据的调制过程)

    假设当前有 AB 主机建立的网线的链接想进行通信,此时 A 主机就会将封装好的数据经过 A 主机的网卡进行调制,处理成为电信号,电信号经过网线传递到 B 主机,B 主机上的网卡会进行解调制,拿到封装之后的数据。之后经过 B 主机的通讯体系进行拆包解包,最终在某一个应用程序中获取到 A 主机发送来的数据。

  • 主机之间需要协商网络速率(通讯之前的工作,AB 主机之间的速率可能不同)

常见通讯方式

备注
  • 交换机通讯
  • 路由器通讯

日常使用的网络可能存在多台主机,依据通讯的基础条件首先需要考虑的问题是 “如何建立多台主机的互相连接” ,假设现在需要与其他 10 台电脑进行通讯,我们可以通过交换机来完成这件事情(见图 1)(说明:不考虑交换机的层级)交换机可以完成多台主机的互连。当我们通过交换机将多台主机进行连接后,他们形成了一个网络局域网。假设在当前局域网内有主机 ABCD,当主机 A 想要和主机 B 进行通信的时候,是“如何定位局域网中的其他主机”,这个工作还是由交换机进行完成的。交换机通过 Mac 地址(任意的一台主机都有一个唯一标识的网卡设备的 MAC 地址物理地址)进行查询。这样 A 主机发送消息到交换机,交换机会将消息进行广播,当主机 B 收到消息之后就会知道 A 找的是自己,其他主机会将此次消息丢弃。

交换机通讯

图1

我们会发现交换机的接口数量是有上限的,也存在大量主机 会造成广播风暴的风险。基于此,网络被分为多个较小的局域网,广域网,因特网。

局域网之间的通信通过路由器进行实现。(见图 2)

假设现在有局域网 1 下的主机 A 想要访问局域网 2 下的主机 B,此时需要知道主机 B 的网卡地址和主机 B 所在的网络(需要明确主机 IP 地址)。数据在发送的时候,不仅包含了程序代码所接收到的数据,还有源 MAC 地址、源 IP 地址、目标 MAC 地址、目标 IP 等信息,所有内容会被组装成一条数据,之后被发送到路由器上。路由器可以识别当前要找的主机是否在局域网内,如果不在当前局域网内,就会根据路由表上记录的信息帮助我们通过网络路由找到对应的网络,之后将数据发送过去,发送到对应的网络后,由对应的交换机完成最终的定位功能。

路由器通讯

图2

网络层次模型

备注

最常见的 OSI 七层模型 & TCP/IP 四层模型

TCP/IP 四层模型 只是在 OSI 七层模型 上进行了一些简化

  • 应用层:用户/应用程序与网络的接口(可以通过不同的网络协议完成用户请求的各种服务,比如利用 http 协议完成网站服务,利用 ftp 协议完成文件传输服务,利用 ssh 完成远程登录服务等)
  • 表示层:数据加密、转换、压缩
  • 会话层:控制网络连接建立与终止
  • 传输层:控制数据传输可靠性(基于端口的协议层,必须携带目标程序所占用的端口号)
  • 网络层:确定目标网络(比如 IP 协议)
  • 数据链路层:确定目标主机(arp 寻址协议)
  • 物理层:各种物理设备和标准

OSI 七层模型 的作用就是更加清晰规范的完成网络通信。

数据封装与解封装

结合 TCP/IP 五层模型 说明 数据封装与解封装的过程

备注
  1. 应用层产出要被传输的数据【data

  2. 数据传输到传输层会被包裹上【目标端口|源端口|data

    在当前层最常见的就是 TCP、UDP 协议,这两个协议都是基于端口的,端口的作用是在主机上用于确定唯一应用进程

  3. 数据传递到网络层会被包裹上【目标 IP|源 IP|目标端口|源端口|data

    我们的主机都是处于不同的网络中的,需要通过 IP 协议确定目标主机所在的网络,因此在当前层会被包裹上目标主机的 IP 和源主机 IP

  4. 数据传递到数据链路层会被包裹【目标 Mac|源 Mac|目标 IP|源 IP|目标端口|源端口|data

    当前层主要的作用是通过 MAC 地址完成寻址操作。(至此,完整信息数据被封装完成)

  5. 将完整数据传递到网络,经过网卡(物理层)的调制后将数据变为高低电压进行传输。

静态服务工具

利用 nodeJS 提供的内置核心模块,配合三方工具包实现一个命令行工具

可以调用相应的命令,在指定目录下启动一个 web 服务

可以通过浏览器访问当前服务下的静态资源

例如: VS-code Live Server