【知识梳理】互联网协议学习(二)

238 阅读7分钟

概述


  老早前,看了一些博客与资料,学习了互联网协议簇,但是仅仅是将博文生硬地摘抄下来,大脑主动参与的思考很有限。以至于,现在回忆起来,忘记得差不多了,所以现在以自己的思路,顺着逻辑,将知识消化吸收,赋予他生命力。

  这里提及一下,让自己警惕:学习东西,避免“无效的勤奋”,不带脑子的学习,花了大把时间,结果平平甚至没有一点收获。要专注,心思放上去,大脑主动积极参与思考,保持疑惑,寻求答案。

面临的问题


  一个东西,一种制度被发明出来,是为了解决某种问题的,互联网协议也不意外。互联网协议是依托于互联网的,互联网被发明的目的是什么呢?是为了共享信息,跨越空间上的距离,与此同时,也跨越了时间上的距离。共享信息,其本质上也就是数据交换。

  那么为了实现“数据交换”这一目的,下一步需要了解行为的主体,那就是计算机,计算机之间的数据交换。 但这个过程很麻烦,需要一个规范,规定两台计算机如何进行通讯,这就是互联网协议需要解决的问题。

解决的思路


  上面说了,互联网协议簇是为了解决两台计算机是如何进行通讯的而制定的一系列规则。这些规则很多,也很广,涉及到计算机之间如何连接和组网。这其中涉及到很多点,设想一下你的收音机出了问题,你首先会看是否是扬声器那里坏了,不可能去看其他地方。那为什么我们会这样想呢?因为潜意识我们将收音机的功能与硬件部分进行了一一对应。这样对应的功能出错,我们就去检查对应的硬件,便于查出错误。 对于计算机通讯之间的过程,也是这样,很复杂,硬件与软件都参与其中。对于这种复杂的过程,我们倾向于将其简单化,结构化。所以最后的具体方案就是——分层,将互联网协议簇进行分层,不同层实现不同的功能,层次之间相互依靠,这样不同协议层对应功能的实现与检查,就可以在各自对应层里进行。清晰,明了。 五层模型

设计者的角度


  首先,我们从互联网协议簇的设计者的角度来看看每一层的作用。由下而上,实体层,也叫做物理层(Physical Layer)就是从物理层面上,将计算机连接起来,具体可以通过双绞线,海底光缆等等。

  这也是互联网通讯的物理基础,只有两台计算机连接起来后,才能发送和接受电气信号,也就是一连串的0和1。接下来,问题就来了,一连串的电气信号0和1,或者说一连串的二进制位,计算机并不知道他代表着什么意思。这就需要将电气信号,进行分组,并且规定信号背后代表的含义。这就是 链接层(Link Layer)的作用。 链接层的协议负责对电气信号进行分组和赋予意义,当时百家争鸣,各自推出了自家公司的电气信号分组方案,都想成为制定行业标准的人。最后,由于各种原因,被业界广泛采用并最后成为了标准的方案就是以太网协议。

以太网协议


  以太网规定一组电气信号构成一个数据包,叫做"帧"。以太网数据包分为两个部分,标头(Head)和数据(Data)。 标头是数据包的说明项,例如发送者、接收者、数据类型等等信息,固定长度为18个字节,数据部分字节大小在46-1500字节。超出范围,则需要将数据分割为多个以太网数据包。

  以太网规定接入网络的所有设备都必须要具有"网卡"接口。(网卡,又叫网络适配器,是被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。)数据包必须从一块网卡,传送到另一块网卡,网卡的地址,就是发送者和接收者的地址,叫做MAC地址。MAC地址是在出厂前,有生产产商写入网卡内部的48个二进制位,通常用12个十六进制数表示。每台接入网络的设备的MAC地址都是独一无二的。MAC地址有两部分组成,分别是生产厂商编号和设备的流水号。 自此每台计算机都有了一个身份——MAC地址。

广播(broadcasting)


  假设数据发送方已经知道了自己和接收方的MAC地址,那我们如何发送数据呢?是像寄信那样点对点的发送吗?事实是不是的,原因我想了一下,因为MAC地址只是区分了不同的设备,并没有表示出设备的位置信息。所以我们无法通过MAC地址具体找到特定的计算机。

  这时候,一种发送数据的方式就被发明了,那就是广播。数据发送者向同一子网络里的所有计算机发送数据包,数据包的标头,写入了接收者MAC地址。当所有计算机接收到了数据包,查看标头的接收者MAC地址,符合的接收数据包,不符合的丢弃数据包。 以太网协议依靠MAC地址通过广播的方式发送数据。 广播

不同子网络


  上面所讲的广播的方式发送数据包,是有一个大的前提的,那就是两台计算机都处于一个子网络。那什么是子网络呢?我们要明白互联网是由无数子网络共同组成的一个巨型网络。就像是,中国的城市属于各个省,各个省的上级是重要。不是所有城市都是直属于中央管辖的。

  这样一来,又面临了一个问题,对于不同子网络的计算机,广播的方式发送数据是没有用的,其他子网络的计算机世界收不到广播发送的数据包的。这也是以太网协议特意设计的地方。 同时MAC地址只能区分设备,不能区分网络。这就需要增加一个新的身份识别机制,来区分不同的子网络。那就是IP地址。

IP地址


  IP协议属于网络层(Network Layer),是为了将数据包传输到不同的子网络的目的而出现的。IP地址是由32个二进制位组成的,习惯上分成四段的十进制数来表示。从0.0.0.0到255.255.255.255。 IP地址也是由两部分组成的: 网路地址和主机地址。处于同一子网络的主机的网络地址是完全相同的,但是主机部分是不一样的。

子网掩码


  新的问题又来了,IP协议并没有规定,IP地址的那些部分是网络地址,有可能前24位是网络地址,也有可能是前12位是网络地址。这就需要额外的参数来确定,网络地址的位置。那就是子网掩码。

  子网掩码的格式和IP地址是一样的,数据上不同的是网络地址的位置都是1,主机的位置都是0。这就规定了该IP地址的网络-主机位置模板了。

  为了让计算机知道这个模板情况,只需要将IP地址与子网掩码,进行二进制位运算,就行了。同一子网络下的主机,计算结果是一样的,这就区分了,两台计算机是否处于同一子网络下。

双重身份


  说道这里,我们已经知道了每台计算机都具有两个身份——MAC地址与IP地址。逻辑上,发送数据时,首先使用IP地址判断,是否属于同一子网络,是那就使用MAC地址广播传输数据到指定的接收设备。如果不是,那就将数据传输到网关,让网关通过路由发送到指定计算机所在的子网络。