菜单导航

从 IP 到 IP,聊聊计算机网络中那些“没用的”知

作者: 精装之家 来源: 精装之家 发布时间: 2022年03月25日 21:32:03

,与百万开发者在一起

来源 | 神光的编程秘籍ID:gh_7aed10cde089

已获得原公众号的授权转载

web 开发离不开计算机网络,计算机网络很重要,但不是所有的网络知识对软件开发都是有用的。

我们知道,网络是分层的,OSI 体系中分了 7 层,但实际上使用的 TCP/IP 体系中分了 4 层,学习的时候为了方便,我们还是把物理层、数据链路层分开学的,所以是 5 层。

开发时我们会用 IP、TCP、HTTP 等协议来完成计算机之间的通信,网页运行时还会涉及到 DNS 等协议,这些协议都是在网络层之上的,也就是基于 IP 到 IP 的传输来完成各种协议的数据通信。

那之下的部分呢?IP 到 IP 的通信是如何实现的?

这就涉及到物理层、数据链路层还有网络层的知识了,这些知识对实际的开发没啥用,因为代码里已经默认了 IP 和 IP 之间是可以通信的,但是了解这些可以让我们对网络有一个全面的理解。这部分涉及到网络硬件、涉及到通信原理,还是挺有意思的。

这篇文章就浅谈下 IP 和 IP 之间的通信的知识。

不同类型的网络

把不同的计算机连接起来,可以做数据通信,可以共享软件、硬件,这就叫做计算机网络。

这种连接方式有很多种,自然也就有不同的网络。比如拨号上网,是利用电话通信的网络来传输数据的,就像打电话一样,所以叫拨号,只不过传输的数据不是通话数据。比如卫星上网,是利用卫星信号来传输数据,这也是一种网络。

这两种都是用的现有的网络来实现计算机通信。而我们自己组建的网络都是用网线连接的,这种是最常见的网络。

比如这样:

这种通过一根线把所有的计算机连接起来的网络连接方式叫做以太网。

在讲以太网之前,不知道大家是否已经感受到了网络分层的好处:

不管是利用电信网络的拨号上网,还是利用卫星通信的卫星上网,或者是用网线连接起来的以太网,这些不同结构的网络都能很自然的融合在一起,就是因为做了很好的分层,只要实现了 IP 协议,那么不管网络是怎么实现的,都能实现更上层协议的通信。

这就像软件开发领域的面向接口编程的思想,只要你能实现 IP 到 IP 的通信,不管你是怎么传输的数据,都可以。

电信和卫星的网络不咋用关注,我们还是继续讲以太网:

多台计算机已经用网线连接起来了,那怎么通信呢?

直接通过这条网线传递数据就行,只不过现在是一个发其余的都能接收到,要让目标计算机能接收,那就得标识下目的地址是啥,所以以太网的数据帧格式是这样的:

除了数据外,额外加上了目的地址、原地址等信息。

这样每台计算机接收到网络传过来的数据之后,判断下是否目的地址是自己,是就接收,否则丢弃。这样就实现了网络通信。

这就是一个网络了?就这么简单?

这确实是一个小型网络,但还不完善。如果多台计算机同时发消息怎么办,数据不就混在一块了?

所以要做是否冲突的检测,现在以太网用的方式是这样:想要通过网络发消息时,先检测下网络中有没有电信号,没有的话就发,有的话就等待 1.x 秒,x 是随机的,如果到了时间还有冲突,那就等待 2.x 秒、4.x 秒、8.x 秒,通过这样的方式来避免冲突,实现准确的通信,这叫做“指数退避”。

这样确实不会冲突了,但是还有问题,如果计算机连了很多,虽然能准确的通信,但时不时就冲突的话效率也太低了。

能不能减少冲突呢?

连在一起的以太网的计算机因为是广播通信的,所以可能可能冲突,这叫做一个“冲突域”。如果能把大的冲突域给拆小,那不就能减少冲突的概率了?

这就是交换机做的事情了:

几台电脑之间加一个交换机来隔开,这样传输消息的时候,如果是同一个小网段内的通信,会直接传给目标计算机,不会传到其他网段里去,本网段没有该 mac 地址的时候才传到其他网段,这样就 把大的网络分成了一个个小的网段,减少了冲突的概率,提高了网络传输效率,这就是交换机的意义。

这样,我们就组建了一个以太网。

互联网