前言#
计算机是我们最熟悉的工具,地球上有很多计算机,那我们的两台计算机是如何实现相互传递信息的呢?
很多人肯定说,这是这是因为计算机的五层模型,但你知道他们的作用吗?
下面就是这五层模型
说实话,这五层模型是十分复杂的,但是今天我要用最简洁的语言,来讲解一下两台计算机是如何通信的,就算你没有学过计算机网络也能听懂
1. 物理层#
一台计算机和另一台计算机要通信要通信,肯定要将两台计算机连起来呀
也就是,物理层将两台计算机连接起来,然后通过高低电频来传输 0,1 这样的电信号
2. 数据链路层#
前面说了,物理层只是单纯的连接两个计算机,并且在其之间传输传输电信号,那如果这电信号没有规范,那谁看的懂呢?
所以,就有了一套规则可以让计算机读懂,于是就有了以太网协议
2.1. 以太网协议#
以太网协议规定,一组电信号就是一个数据包,我们把这个数据包成为‘帧’。每一个帧由 标头 (Head) 和 数据 (Data) 两部分组成
标头 (Head) | 数据 (Data) |
---|
标头存放着发送者和接受者的信息,而数据就是存放着要发送的数据了
把一台计算的的数据通过物理层和链路层发送给另一台计算机,究竟是谁发给谁的,计算机与计算机之间如何区分,你总得给他们一个唯一的标识吧?
于是,MAC 地址出现了。
2.2.MAC 地址#
连入网络的每一个计算机都会有网卡接口,每一个网卡都会有一个唯一的地址,这个地址就叫做 MAC 地址。计算机之间的数据传送,就是通过 MAC 地址来唯一寻找、传送的。
2.3. 广播与 ARP 协议#
2.3.1 广播
再想一个问题,计算机 A 不仅连着计算机 B,而且计算机 A 也还连着其他的计算机。 虽然计算机 A 知道计算机 B 的 MAC 地址,可是计算机 A 却不知道知道计算机 B 是分布在哪边路线上,为了解决这个问题,于是,有了广播的出现。
在同一个子网中,A 会向 B 发送数据包,这个数据包会包含 B 的 MAC 地址,当发送是,A 是通过广播的形式发送的,此时 B、C、D 都会接收到这个数据包,然后收到这个数据包的计算机,会把数据包的 MAC 地址取出来,与自身的 MAC 地址对比,如果两者相同,则接受这个数据包,否则就丢弃这个数据包。
这种方式就像你玩的晚,妈妈们通过广播的形式叫孩子回家吃饭,如果这个名字是你,你就理会一下,如果不是你,你就当作听不见。
2.3.2ARP 协议
那我们来思考一个问题,A 是怎么知道 B 的 MAC 地址的呢?这个时候就得由 ARP 协议这个家伙来解决了,不过 ARP 协议会涉及到 IP 地址,我们下面才会扯到 IP 地址。因此我们先放着,就当作是有这么一个 ARP 协议,通过它我们可以知道子网中其他计算机的 MAC 地址。
3. 网络层#
上面我们说了子网这个词,我们身处的网络由无数个子网构成,在广播的时候,也只能在同一个子网内进行。
假如没有子网这种划分的话,计算机 A 通过广播的方式发一个数据包给计算机 B , 其他所有计算机也都能收到这个数据包,然后进行对比再舍弃。世界上有那么多它计算机,每一台计算机都能收到其他所有计算机的数据包,那就不得了了。那还不得奔溃。 因此产生了子网这么一个东西。
那么问题来了,我们是如何区分 MAC 地址属于哪一个子网呢?假如是同一个子网,那我们就用广播的形式把数据传送给对方,如果不是同一个子网的,我们就会把数据发给网关,让网关进行转发。
为了解决这个问题,于是,有了 IP 协议。
3.1IP 协议#
IP 协议,它所定义的地址,我们称之为 IP 地址。IP 协议有两种版本,一种是 IPv4, 另一种是 IPv6。不过我们目前大多数用的还是 IPv4,我们现在也只讨论 IPv4 这个版本的协议
每一台联网的计算机都有一个 IP 地址,IP 地址分为两部分,前面代表网络部分,后面代表主机部分,并且网络部分和主机部分所占用的二进制位数是不固定的。
那么问题又来了,既然不固定,那怎么知道网络部分是占几位,主机部分又是占几位呢?也就是说,两个 IP 地址,我们如何判断他俩是否在同一个子网中呢?
这就引申出来一个关键字:子网掩码
网掩码和 IP 地址一样也是 32 位二进制数,不过它的网络部分规定全部为 1,主机部分规定全部为 0
例如:192.168.43.1 和 192.168.43.2,这两个 IP 地址的网络部分为 24 位,主机部分为 8 位的话,那他们的子网掩码都为 11111111.11111111.11111111.00000000,即 255.255.255.0
那我们知道了子网掩码,如何来判端 IP 地址是否处于同一个子网中呢?我们只需要把 IP 地址与它的子网掩码做与 (and) 运算,然后把各自的结果进行比较就行了,如果比较的结果相同,则代表是同一个子网,否则不是同一个子网。
例如,192.168.43.1 和 192.168.43.2 的子码掩码都为 255.255.255.0,把 IP 与子码掩码相与,可以得到他们都为 192.168.43.0,进而他们处于同一个子网中。
3.2ARP 协议#
接着上面没有讲完的继续讲,计算机 A 要给计算机 B 发送数据时。我们可以通过 ARP 协议来得到计算机 B 的 MAC 地址。那 ARP 协议是如何工作的呢?
例如:计算机 A 给计算机 B 要发送数据,此时 A 还不知道 B 的 MAC 地址,这时 A 就会给子网的每一个计算机发送包含接收方IP 地址的数据包,对方收到这个数据包之后,会取出 IP 地址与自身的对比,如果相同,则把自己的 MAC 地址回复给对方,否则就丢弃这个数据包。这样,计算机 A 就能知道计算机 B 的 MAC 地址了。
3.3 DNS 服务器#
那么问题又来了,我们时如何知道接收方的 IP 地址的呢?
当我们想要访问某个网站的时候,我们可以输入 IP 来进行访问,但是我相信绝大多数人是输入一个网址域名的,例如访问百度是输入 www.baidu.com 这个域名。其实当我们输入这个域名时,会有一个叫做 DNS 服务器的家伙来帮我们解析这个域名,然后返回这个域名对应的 IP 给我们的。
因此,网络层的功能就是让我们在茫茫人海中,能够找到另一台计算机在哪里,是否属于同一个子网等。
4. 传输层#
通过物理层、数据链路层以及网络层的互相帮助,我们已经把数据成功从计算机 A 传送到计算机 B 了,可是,计算机 B 里面有各种各样的应用程序,计算机该如何知道这些数据是给谁的呢?这个时候,** 端口 (Port)** 这个家伙就上场了,也就是说,我们在从计算机 A 传数据给计算表 B 的时候,还得指定一个端口,以供特定的应用程序来接受处理。
传输层最常见的两大协议是 TCP 协议和 UDP 协议,其中 TCP 协议与 UDP 最大的不同就是 TCP 提供可靠的传输,而 UDP 提供的是不可靠传输。
也就是说,传输层的功能就是建立端口到端口的通信。相比网络层的功能是建立主机到主机的通信。
5. 应用层#
终于到最后一层了,应用层是距离我们用户最近的一层
虽然我们收到了传输层传来的数据,可是这些传过来的数据五花八门,有 html 格式的,有 mp4 格式的,各种各样。你确定你能看的懂?
因此我们需要指定这些数据的格式规则,收到后才好解读渲染。例如我们最常见的 Http 数据包中,就会指定该数据包是 什么格式的文件了。