编程语言
首页 > 编程语言> > 程序员内功修炼 计算机网络 互联⽹协议⼊⻔(上)

程序员内功修炼 计算机网络 互联⽹协议⼊⻔(上)

作者:互联网

目录

前⾔

天各⼀⽅的两台计算机是如何通信的呢?在成千上万的计算机中,为什么⼀台计算机能够准确着寻找到另外⼀台计算机,并且把数据发送给它呢?

可能很多⼈都听说过⽹络通信的 5 层模型,但是可能并不是很清楚为什么需要五层模型,五层模型负责的任务也有可能经常混淆。下⾯是⽹络通信的五层模型
在这里插入图片描述

1. 物理层

⼀台计算机与另⼀台计算机要进⾏通信,第⼀件要做的事是什么?当然是要把这台计算机与另外的其他计算机连起来啊,这样,我们才能把数据传输过去。例如可以通过光纤啊,电缆啊,双绞线啊等介质把他们连接起来,然后才能进⾏通信。
在这里插入图片描述
也就是说,物理层负责把两台计算机连起来,然后在计算机之间通过⾼低电频来传送0,1这样的电信号。

2. 数据链路层

前⾯说了,物理层它只是单纯着负责把计算机连接起来,并且在计算机之间传输0,1这样的电信号。如果这些0,1组合的传送毫⽆规则的话,计算机是解读不了的。⼀⼤堆0,1谁知道是什么⻤啊。在这里插入图片描述
因此,我们需要制定⼀套规则来进⾏0,1的传送。例如多少个电信号为⼀组啊,每⼀组信号应该如何标识才能让计算机读懂啊等等。
于是,有了以太⽹协议。

2.1. 以太⽹协议

以太⽹协议规定,⼀组电信号构成⼀个数据包,我们把这个数据包称之为帧。每⼀个桢由标头(Head)和数据(Data)两部分组成。
在这里插入图片描述
帧的⼤⼩⼀般为 64 - 1518 个字节。假如需要传送的数据很⼤的话,就分成多个桢来进⾏传送。

对于表头和数据这两个部分,他们存放的都是⼀些什么数据呢?我猜你眯着眼睛都能想到他们应该放什么数据。 毫⽆疑问,我们⾄少得知道这个桢是谁发送,发送给谁的等这些信息吧?所以标头部分主要是⼀些说明数据,例如发送者,接收者等信息。⽽数据部分则是这个数据包具体的,想给接守者的内容。

⼤家想⼀个问题,⼀个桢的⻓度是 64~1518 个字节,也就是说桢的⻓度不是固定的,那你觉得标头部分的字节⻓度是固定的吗?它当然是固定的啊,假如不是固定的,每个桢都是单独发的,那计算机怎么知道标头是⼏个字节,数据是⼏个字节呢。所以标头部分的字节是固定的,并且固定为18个字节。

把⼀台计算的的数据通过物理层和链路层发送给另⼀台计算机,究竟是谁发给谁的,计算机与计算机之间如何区分,你总得给他们⼀个唯⼀的标识吧?

于是,MAC 地址出现了。

2.2. MAC 地址

连⼊⽹络的每⼀个计算机都会有⽹卡接⼝,每⼀个⽹卡都会有⼀个唯⼀的地址,这个地址就叫做 MAC地址。计算机之间的数据传送,就是通过 MAC 地址来唯⼀寻找、传送的。
在这里插入图片描述
MAC地址 由 48 个字节所构成,在⽹卡⽣产时就被唯⼀标识了。

2.3. ⼴播与ARP协议

2.3.1. ⼴播

在这里插入图片描述
如图,假如计算机 A 知道了计算机 B 的 MAC 地址,然后计算机 A 想要给计算机 B 传送数据,虽然计算机 A 知道了计算机 B 的 MAC 地址,可是它要怎么给它传送数据呢?计算机 A 不仅连着计算机 B,⽽且计算机 A 也还连着其他的计算机。 虽然计算机 A 知道计算机 B 的 MAC 地址,可是计算机 A 却不知道知道计算机 B 是分布在哪边路线上,为了解决这个问题,于是,有了⼴播的出现。

在同⼀个⼦⽹中,计算机 A 要向计算机 B 发送⼀个数据包,这个数据包会包含接收者的 MAC 地址。当发送时,计算机 A 是通过⼴播的⽅式发送的,这时同⼀个⼦⽹中的计算机 C, D 也会收到这个数据包的,然后收到这个数据包的计算机,会把数据包的 MAC 地址取出来,与⾃身的 MAC 地址对⽐,如果两者相同,则接受这个数据包,否则就丢弃这个数据包。这种发送⽅式我们称之为⼴播,就像我们平时在⼴场上通过⼴播的形式呼叫某个⼈⼀样,如果这个名字是你,你就理会⼀下,如果不是你,你就当作听不⻅。

2.3.2. ARP 协议。

那么问题来了,计算机 A 是如何知道计算机 B 的 MAC 地址的呢?这个时候就得由 ARP 协议这个家伙来解决了,不过 ARP 协议会涉及到IP地址,我们下⾯才会扯到IP地址。因此我们先放着,就当作是有这么⼀个 ARP 协议,通过它我们可以知道⼦⽹中其他计算机的 MAC 地址。

3. ⽹络层

上⾯我们有说到⼦⽹这个关键词,实际上我们所处的⽹络,是由⽆数个⼦⽹络构成的。⼴播的时候,也只有同⼀个⼦⽹⾥⾯的计算机能够收到。

假如没有⼦⽹这种划分的话,计算机 A 通过⼴播的⽅式发⼀个数据包给计算机 B , 其他所有计算机也都能收到这个数据包,然后进⾏对⽐再舍弃。世界上有那么多它计算机,每⼀台计算机都能收到其他所有计算机的数据包,那就不得了了。那还不得奔溃。 因此产⽣了⼦⽹这么⼀个东⻄。

那么问题来了,我们如何区分哪些 MAC 地址是属于同⼀个⼦⽹的呢?假如是同⼀个⼦⽹,那我们就⽤⼴播的形式把数据传送给对⽅,如果不是同⼀个⼦⽹的,我们就会把数据发给⽹关,让⽹关进⾏转发。

为了解决这个问题,于是,有了 IP 协议。

3.1. IP协议

IP协议,它所定义的地址,我们称之为IP地址。IP协议有两种版本,⼀种是 IPv4,另⼀种是 IPv6。不过我们⽬前⼤多数⽤的还是 IPv4,我们现在也只讨论 IPv4 这个版本的协议。

这个 IP 地址由 32 位的⼆进制数组成,我们⼀般把它分成4段的⼗进制表示,地址范围为0.0.0.0~255.255.255.255。

每⼀台想要联⽹的计算机都会有⼀个IP地址。这个IP地址被分为两部分,前⾯⼀部分代表⽹络部分,后⾯⼀部分代表主机部分。并且⽹络部分和主机部分所占⽤的⼆进制位数是不固定的。

假如两台计算机的⽹络部分是⼀模⼀样的,我们就说这两台计算机是处于同⼀个⼦⽹中。例如192.168.43.1 和 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地址是否处于同⼀个⼦⽹中呢。显然,知道了⼦⽹掩码,相当于我们知道了⽹络部分是⼏位,主机部分是⼏位。我们只需要把 IP 地址与它的⼦⽹掩码做与(and)运算,然后把各⾃的结果进⾏⽐较就⾏了,如果⽐较的结果相同,则代表是同⼀个⼦⽹,否则不是同⼀个⼦⽹。

例如,192.168.43.1和192.168.43.2的⼦码掩码都为255.255.255.0,把IP与⼦码掩码相与,可以得到他们都为192.168.43.0,进⽽他们处于同⼀个⼦⽹中。

3.2. ARP协议

有了上⾯IP协议的知识,我们回来讲⼀下ARP协议。

有了两台计算机的IP地址与⼦⽹掩码,我们就可以判断出它们是否处于同⼀个⼦⽹之中了。

假如他们处于同⼀个⼦⽹之中,计算机A要给计算机B发送数据时。我们可以通过ARP协议来得到计算机B的MAC地址。

ARP协议也是通过⼴播的形式给同⼀个⼦⽹中的每台电脑发送⼀个数据包(当然,这个数据包会包含接收⽅的IP地址)。对⽅收到这个数据包之后,会取出IP地址与⾃身的对⽐,如果相同,则把⾃⼰的MAC地址回复给对⽅,否则就丢弃这个数据包。这样,计算机A就能知道计算机B的MAC地址了。在这里插入图片描述
可能有⼈会问,知道了MAC地址之后,发送数据是通过⼴播的形式发送,询问对⽅的MAC地址也是通过⼴播的形式来发送,那其他计算机怎么知道你是要传送数据还是要询问MAC地址呢?其实在询问MAC地址的数据包中,在对⽅的MAC地址这⼀栏中,填的是⼀个特殊的MAC地址,其他计算机看到这个特殊的MAC地址之后,就能知道⼴播想⼲嘛了。

假如两台计算机的IP不是处于同⼀个⼦⽹之中,这个时候,我们就会把数据包发送给⽹关,然后让⽹关让我们进⾏转发传送。

3.3. DNS服务器

这⾥再说⼀个问题,我们是如何知道对⽅计算机的IP地址的呢?这个问题可能有⼈会觉得很⽩痴,⼼想,当然是计算机的操作者来进⾏输⼊了。这没错,当我们想要访问某个⽹站的时候,我们可以输⼊IP来进⾏访问,但是我相信绝⼤多数⼈是输⼊⼀个⽹址域名的,例如访问百度是输⼊ www.baidu.com 这个域名。其实当我们输⼊这个域名时,会有⼀个叫做DNS服务器的家伙来帮我们解析这个域名,然后返回这个域名对应的IP给我们的。

因此,⽹络层的功能就是让我们在茫茫⼈海中,能够找到另⼀台计算机在哪⾥,是否属于同⼀个⼦⽹等。

4. 传输层

通过物理层、数据链路层以及⽹络层的互相帮助,我们已经把数据成功从计算机A传送到计算机B了,可是,计算机B⾥⾯有各种各样的应⽤程序,计算机该如何知道这些数据是给谁的呢?

这个时候,端⼝(Port)这个家伙就上场了,也就是说,我们在从计算机A传数据给计算机B的时候,还得指定⼀个端⼝,以供特定的应⽤程序来接受处理。

也就是说,传输层的功能就是建⽴端⼝到端⼝的通信。相⽐⽹络层的功能是建⽴主机到主机的通信。

也就是说,只有有了IP和端⼝,我们才能进⾏准确着通信。这个时候可能有⼈会说,我输⼊IP地址的时候并没有指定⼀个端⼝啊。其实呢,对于有些传输协议,已经有设定了⼀些默认端⼝了。例如http的传输默认端⼝是80,这些端⼝信息也会包含在数据包⾥的。

传输层最常⻅的两⼤协议是 TCP 协议和 UDP 协议,其中 TCP 协议与 UDP 最⼤的不同就是 TCP 提供可靠的传输,⽽ UDP 提供的是不可靠传输。

5. 应⽤层

终于说到应⽤层了,应⽤层这⼀层最接近我们⽤户了。

虽然我们收到了传输层传来的数据,可是这些传过来的数据五花⼋⻔,有html格式的,有mp4格式的,各种各样。你确定你能看的懂?

因此我们需要指定这些数据的格式规则,收到后才好解读渲染。例如我们最常⻅的 Http 数据包中,就会指定该数据包是 什么格式的⽂件了。

总结

五层模型⾄此讲到这⾥。对于有些层讲的⽐较简洁,就随便概况了⼀下。因为如果我说的详细⼀点的话,篇幅肯定会特别特别⻓,我着已经是尽最⼤的努⼒以最简洁的⽅式来讲的了。如果你想详细去了解,可以去买计算机⽹络相应的资料,强烈推荐《计算机⽹络:⾃顶向下》这本书。

标签:互联,协议,计算机,MAC,程序员,内功,IP地址,地址,数据包
来源: https://blog.csdn.net/congxing9333/article/details/112692252