计算机网络——两台天各一方的计算机,是如何把数据发送给对方的?
用最简洁的模式,通过网络通信的五层模型来讲解一台计算机是如何找到另外一台计算机并且把数据发送给另一台计算机的。
以下是计算机网络五层模型:
一、物理层
如果一台计算机要传输数据给另外一台计算机,第一件要做的事情是什么?最容易想到的就是要把这台计算机通过某种介质与另外一台计算机连起来,这样我们才能把数据传输过去。例如:通过光纤、电缆、双绞线等。
也就是说,物理层通过负责把两台计算机连起来,然后在计算机之间通过高低电频来传送0,1信号。
二、数据链路层
前面说了,物理层它只是单纯负责把计算机连接起来,并且在计算机之间传输01这样的信号。
很显然,如果这些0,1组合的数据毫无规则的话,计算机是解读不了的。
因此我们需要制定一套规则来进行0,1的传送。例如多少个电信号为一组,每一组信号应该如何标识才能让计算机读懂。
于是就引出了以太网协议。
1. 以太网协议
以太网协议规定,一组电信号构成一个数据包,我们把这个数据包称之为帧。每一个帧由标头(head)和数据(data)两部分构成。
帧的大小一般为64-1518个字节。假如需要传送的数据很大的话,就分成多个帧来进行传送。
问题:对于表头和数据两个部分,他们存放的是一些什么数据呢?
首先我们至少知道这个帧是谁传送的,发送给谁等这些信息,所以标头部分主要是一些说明数据,例如:发送者,接收者等信息。而数据部分则是这个数据包具体想给接收者的内容。
一个帧的长度是64~1518字节,也就是说帧的长度不是固定的,但是标头部分的字节长度是固定的,并且固定为18个字节。
把一台计算机的数据通过物理层和链路层发送给另外一台计算机,究竟是谁发给谁的,计算机与计算机之间是如何区分的,总得给他们一个标识吧。
于是相应的MAC地址就出现了。
2.MAC地址
连入网络的的每一个计算机都会有网卡接口,每一个网卡都会有一个唯一的地址,这个地址我们称之为MAC地址。计算机之间的数据传送,就是通过MAC地址来唯一确定身份的。
MAC地址由48个字节所构成,在网卡生产时就唯一标识了。
3.广播与ARP协议
(1)广播
如图,假如计算机A知道了计算机B的MAC地址,然后计算机A想要给计算机B传送数据,虽然计算机A知道了计算机B的MAC地址,可是它要怎么给它传送数据呢?和计算机A连接在一起的计算机有很多台,虽然计算机A知道计算机B的MAC地址,可是计算机A不知道计算机B分布在哪条线上,为了解决这个问题,于是,有了广播的出现。
在同一个子网中,计算机A要向计算机B发送一个数据包,这个数据包包含接收者的MAC地址。当发送时,计算机A是通过广播的方式发送的,这时同一个子网计算机C,D也会接收到这个数据包,然后接收到这个数据包的计算机,会把数据包的MAC地址取出来,与自身的MAC地址对比,如果两者相同,则接受这个数据包,否则抛弃这个数据包。这种方式称之为:广播。
(2)ARP协议
问题:计算机A是如何知道计算机B的MAC地址的呢?
通过这个协议,可以知道子网中其他计算机的MAC地址。
三、网络层
1.子网
假如没有子网这种划分的话,计算机A通过广播的方式发一个数据包给计算机B,其他所有的计算机也都能接收到这个数据包,然后进行对比再舍弃。那么网络将会崩溃。
问题:如何分哪些MAC地址是属于同一个子网的呢?
假如是同一个子网,那我们就用广播的形式把数据传给对方,如果不是同一个子网的,我们就会把数据传给网关,让网关进行转发,为了解决这个问题就出现了ip协议。
网关的概念: 网关又称为网间连接器、协议转换器。网关在网络层以上实现网络互连,是复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网的互连。网关相当于一个翻译器,是一个网络连接到另一个网络的“关口”。
2.IP协议
IP协议,它所定义的地址,我们称之为IP地址。 IP协议有两种版本,一种是IPv4,一种是IPv6.我们目前大多数使用的是IPv4.
这个IP地址是由32位的二进制数组成,我们一般把它分成4段的十进制表示,地址范围为:0.0.0.0~255.255.255.255。
每一台想要联网的计算机都会有一个IP地址。这个IP地址分为两个部分,前面一部分代表网络部分, 后面一部分代表主机部分。 并且网络部分和主机部分所占用的二进制位数是 不固定的。
假如两部计算机的网络部分 是一模一样的,我们就说这两台计算机是处于同一个子网中。例如:
192.168.43.2,假如这两个IP地址的网络部分为24位,主机部分为8位。那么他们的网络部分都为192.168.43,所以他们都在同一个子网当中。
可是问题来了,你怎么知道网络部分是占几位,主机部分又是占几位?也就是说,单单从两台计算机的IP地址,我们是无法判断他们是否处于同一个子网当中。
这就引申出了另外一个关键词——子网掩码。子网掩码和IP地址一样是32位数的二进制数,不过他的网络部分全部规定为1,主机部分全部规定为0,也就是说,假如上面两个IP地址的网络部分为24位,主机地址8位的话,那么他们的子网掩码就是:11111111.11111111.11111111.00000000,用十进制表示的话:255.255.255.0
子网掩码本质就是区分网络部分和主机部分
那有了子网掩码,如何来判断IP地址是否处于同一个子网当中?
显然,知道了子网掩码,通过子网掩码前半部分1的个数和后半部分0的个数,我们可以知道IP地址的网络部分是几位,主机部分是几位。然后我们只需要把IP地址和它的子网掩码做与运算(and),再把各自的结果进行比较就行了。如果比较的结果相同,则代表是同一个子网,反之则不是。
例如,192.168.43.1和192.168.43.2的子网掩码都是255.255.255.0,把IP与子网掩码做与运算,可以得到他们都为192.168.43.0,进而他们都在同一个子网中。
3.ARP协议
假如两台计算机处于同一个子网当中,计算机A要给计算机B发送数据的时候,我们可以通过ARP协议来得到计算机B的MAC地址。
ARP协议会通过广播的形式给同一个子网中的每台电脑发送一个数据包(当然,这个数据包会包含接收方的IP地址,例如计算机B的IP地址)。子网中的计算机收到这个数据包之后,会取出数据包中的IP 地址和自身的IP地址进行对比,如果相同,则将自己的MAC地址回复给对方,否则丢弃这个数据包。这样计算机A就知道计算机B的地址了。
而这种通过广播获取对方MAC地址的协议,我们也称之为ARP协议。
问题:知道了MAC地址之后,发送数据是以广播的形式进行发送,询问对方的MAC地址也是通过广播的形式进行,那么怎么知道是要传送数据还是询问MAC地址?
解决方案: 为了解决这个问题,其实我们可以做一些约定。如果要获取地方的MAC地址,我们可以在发广播的时候,在对方的MAC地址这一栏中,填一个特殊的MAC地址,其他计算机看到这个特殊的MAC地址的时候,就知道广播要获取MAC地址,而不是获取数据了。
假如两台计算机的IP不是处于同一个子网之中,这个时候,我们就会把数据包发送给网关,然后让网关帮我们进行转发。
4.DNS服务器
问题:在使用ARP协议的时候,需要获取对方的MAC地址,我们是需要知道对应的IP地址的,我们是如何知道对方计算机的IP地址的呢?
当我们想要访问某个网站的时候,我们可以输入IP地址来进行访问,但是大多数人通过输入一个网址来进行访问的,因为网址容易记住,而IP地址太长太繁杂
其实当我们输入这个域名的时候,会有一个叫做DNS服务器的家伙帮我们解析这个域名,通过DNS服务器的帮忙,我们就可以获得相应的IP地址。
因此,网络层的功能是让我们在茫茫人海当中找到另外一部计算机的位置,是否属于同一个子网。
四、传输层
通过网络层的IP地址,我们可以知道对方位于哪一个子网中,通过ARP协议,我们知道了对方的MAC地址,通过广播的形式发送数据包,我们成功把数据包发送给对方。
也就是说,通过物理层、数据链路层以及网络层的相互帮助,我们已经成功把数据成功从计算机A传送给计算机B了。可是,计算机B里面有各式各样的应用程序,计算机如何知道把这些数据发送给谁呢?
为了解决这个问题,我们需要给每个程序做一个表示,于是,端口(Port) 这个家伙就上场了,每个应用程序启动时,都会产生一个进程,而每一个想要接受网络数据的进程,都会给她分配一个端口号。
和网络层相比,传输层的功能就是建立端口到端口的通信,而网络层功能就是建立主机与主机的通信。
也就是说,只要有了IP和端口,我们才能进行准确的通信。这个时候有人可能会说,我在浏览器输入IP地址或者网址的时候并没有指定一个端口。其实,对于有些传输协议,已经设定了一些默认端口。例如:http的传输默认端口是8080,也就是说虽然你在输入地址没有指定端口,但是会默认帮你指定8080端口。
TCP和UDP
问题:在传输数据包时,万一把数据包丢了怎么办?万一数据包里的数据出现了错误怎么办?
其实在传输层,主要有两大协议,分别是TCP和UDP,TCP是一种可靠传输协议,什么是可靠?意思就是TCP协议可以保证数据正确传输,不用担心数据包丢了出现数据缺失,TCP协议还有流量控制和拥塞控制功能。
五、应用层
问题:我们该如何知道收到的数据是什么格式的呢?
这就是应用层需要帮我们搞定的事情了。对于应用协议,最常见的就是HTTP协议,我们可以从HTTP数据包中,看到这些数据格式,编码方式等,有了这些数据的格式,编码方式等,有了这些格式、编码的说明,我们就可以根据对应的规则来进行解码,渲染了。
参考:https://mp.weixin.qq.com/s/K1QnQADiO6wCXxAGdcEQjA