天各一方的两台计算机是如何找到对方并进行数据传输的?这一切要从计算机网络中五层模型开始讲起。五层模型有以下这些

小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP

了解五层模型基本上就知道一台计算机如何把数据发送给另一台计算机了。不过标题也说了,这是小白级别,文章会省略许多繁琐的细节。

一、物理层

如果两台计算机要通信,首先需要的就是把两台计算机用线链接起来,例如用光纤、电缆、双绞线等。就像这样子

小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP

建立链接的目的就是为了通信。由于计算机之间只能传输0和1这样子的电信号,所以我们发送给其他计算机的数据最终都会转化成一大串只包含0和1这样的电信号。

二、数据链路层

由于发送过来的数据是一串只包含0和1的电信号,我们根本看不懂,需要一些规定来识别这些电信号。只需要将发过来的数据加头加尾封装成帧就能完成标识了。变成下面这样子

小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP

帧首部里的信息主要是:要发送给谁,谁发送的,等等。帧尾部就是数据接收结束的信息。
帧的数据部分也就是你要发送给对方的信息。当然如果你的数据比较大的话,会被封装成多个帧进行发送。

要发送给谁,需要有个标识把。这个标识就是MAC地址。对方的MAC地址和自己的MAC地址存放的位置都是在帧首部。

MAC地址(也叫物理地址):

在计算机里存在于网卡中
小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP

网络中每台设备都有一个唯一的网络标识,这个网络标识叫MAC地址或网卡地址。这个地址是由网络设备制造商生产时写在硬件内部的。

假如知道对方的MAC地址,计算机A要怎样发送信息给计算机B呢?要知道计算机A不止连着计算机B,还连着其他计算机。就像这样子
小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP
计算机A并不知道计算机B在哪里,所以只能把信息发送给所有计算机,这种一次给多台计算机发送数据的方式我们称为广播。计算机收到数据后看一下帧头里的MAC地址,如果和自己的一样就接收,如果不一样就丢弃。就像我们平时听到的广播一样,如果广播里喊的是自己的名字,我们就回应,如果不是自己的名字,就直接忽略。

不过现在还有个问题,我们并不知道对方的MAC地址是什么。

我们要怎么在那么多个MAC地址找到我们要找的那一个呢?这个时候需要通过ARP协议来找对方的MAC地址。ARP协议的功能是通过对方IP地址获取对方MAC地址。不过IP地址是在网络层。在链路层这里只需要知道通过ARP协议可以获得MAC地址就行了。

三、网络层

说到网络层就得先讲一下子网,前面也讲到了子网。我们所处的网络是由无数的子网组成的。把一个大的网络划分成小的网络就叫做子网划分,划分出来的小的网络就叫做子网。

那为什么要进行子网划分呢?试想一下如果不进行子网划分的话,计算机A每发送一条数据,网络(范围很大)上的其他计算机都会收到这条数据,这样子想想就觉得不恰当,又比如反过来说,全世界的计算机都发送一条信息,你的计算机都会收到这条信息,我想你的计算机分分钟崩溃。所以需要进行子网划分。

子网划分的好处可以这样子来看。计算机A发送一条数据给计算机B,一开始只有自己所在的子网里的计算机能够收到这条数据,如果计算机B在自己所在的子网里,就将数据发送给计算机B,如果不在的话,就会将数据发送给网关,让网关进行转发。

那么如何判断对方计算机是否和自己的计算机是否在同一个子网呢?这就需要用到IP协议了。

IP协议规定网络上所有的设备都必须有一个独一无二的IP地址。

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。

每台计算机都有一个IP地址,这个IP地址被分为两部分,前面一部分代表网络部分,后面一部分代表主机部分。并且网络部分和主机部分所占用的二进制位是不固定的。

如果两台计算机的网络部分一样,我们就说这两台计算机在同一个子网中。例如192.168.6.1和192.168.6.2,假如这两个IP地址的网络部分为24位,主机部分则为8位。它们的网络部分都为192.168.6。所以它们处于同一个子网中。

那如何知道网络部分和主机部分占几位。

这需要另一个东西---子网掩码

子网掩码和ip地址一样是32位(具有一一对应的关系),网络部分对应的子网掩码都是1,主机部分对应的子网掩码都是0。如上们的ip地址。网络部分为24位的话对应的子网掩码就是11111111.11111111.11111111.00000000,即255.255.255.0。
用子网掩码和ip地址进行与(and)运算就可以知道网络部分是什么。

知道了网络部分怎么来,但我们还不知道IP地址是怎么来的。其实IP地址是我们自己输入的。就比如我们要访问百度,我们一般在地址栏中输入www.baidu.com 这个域名从而访问百度,那这个和IP地址有什么关系呢?表面上我们输入的是www.baidu.com ,实际上是会经过一个DNS域名系统帮助我们将其解析成IP地址39.156.69.79。用域名访问网站和用ip地址访问网站效果是一样的。

有了ip协议的知识之后,再来看一下ARP协议。

ARP协议是通过IP地址得到MAC地址的一种协议。也是以广播的形式发送一个数据包,数据包里包含对方的IP地址,首先需要判断对方的IP地址和自己的IP地址是否在同一个子网中,如果不在一个网关里,需要交给网关进行转发。如果在同一个网关里,只需要再判断数据包里的IP地址是否和自己的IP地址一样就行了,如果和自己的IP地址一样,就把自己的MAC地址发回给对方,如果不是,就丢弃。
就像这样子

小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP

四、传输层
每台电脑上都有很多的应用程序,我们目前还不知道是哪个应用程序应该接受数据,所以引入端口这个词。传输层提供了主机应用程序之间的端到端的服务。端即为端口。我们访问百度的时候似乎不需要输入端口号啊,其实访问百度的时候采用的是默认端口80,像http这类域名用的都是端口80。

五、应用层

应用层可以为用户提供具体服务,是与我们最紧密相关的一层。我们从传输层收到的数据格式有很多,例如.txt.jpg,png.mp4等等。而应用层就是帮助我们完成分析这些数据格式。

六、最后用几幅图来总结一下以上内容。

应用层:

一开始只有计算机A向计算机B之间通信
小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP

计算机B收到101101101011后根本就看不懂。

数据链路层:

于是链路层上场了,将数据封装成帧

小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP

这下计算机B收到信息后总算能看出一点头绪了。

但之后不久计算机A又连了计算机C和计算机D。

小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP

计算机A此时又想发送信息给计算机B。计算机C和计算机D并不想接受计算机A发给计算机B的信息。于是产生了MAC地址来进行处理,当计算机C和计算机D发现MAC地址和自己的MAC地址不一样时就将数据包抛弃。

网络层:

但是计算机A并不知道计算机B的MAC地址是啥。于是产生了ARP协议。通过ARP协议能够获取计算机B的MAC地址。ARP协议是通过IP地址得到MAC地址的一种协议。

小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP

就这样计算机A得到了计算机B的MAC地址,于是可以开始进行数据交流了。

小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP

如果觉得有收获,不妨花个几秒钟点个赞,欢迎关注我的公众号玩编程地码农,目前专注写数据结构与算法和计算机基础等相关知识。

小白级别,一台计算机如何把数据发送给另一台计算机-LMLPHP

08-16 17:59