前面提到网络层的作用是连接网络的网络,同时还能兼容底层不同的协议。
有了要解决的问题。现在就是要想的就是问题的解决办法。
链路层完成了局域网内的数据通信,假设这时候大家可以直接通过数据链路层传递数据
A_0,A_1,A_2,A_3,A_4共同组成了一个局域网,A_0视为中间设备,他们共同支持协议A
B_0,B_1,B_2,B_3,B_4共同组成了一个局域网,B_0视为中间设备,他们共同支持协议B
那么如何让A_1与B_1通信?直接将A_0与B_0连接吗?
确实在物理上这是连通了,但是A_0发送的数据帧的格式与B_0的数据帧格式大概率是不一样的。没有达成约定,如果两个人中一个只懂中文,一个只懂英文,那么两个人能交流吗?显然是不能的。
所以说需要一个转换的过程,这个转换谁来做?中间设备,也就是说,中间设备是一个既懂中文,又懂英文的人,他来充当翻译。
那就把中间设备C加上去。
到这儿已经能实现不同网络之间,计算机相互理解所传输的数据是什么了。
但是,数据链路层的之前的问题又来了,虽然能在数据链路层保证计算机之间数据能够传递到指定位置?发送的计算机吼一声说这是给哪个MAC地址发的数据。这可行吗,可行,但是这合理吗?小范围是合理的,但是要是主机变成了下面这样呢?A_1与B_1通信,这还合理吗?这不合理。
所以得想个更好的办法,即一个更好的标识寻址方案
尽可能的用一种低消耗的方法把各个计算机标识起来以避免通信靠吼的局面。
交换机在数据链路层做的事情在这儿值得借鉴,那就是做一个记录。数据来了我记录一条,看看是谁发的,是谁收的,如果对照记录表知道是谁收,往哪边走,那就直接发过去,顺便看看是谁发的,他从哪边来,对照记录表,视情况更新。如果不知道是谁收的,那就喊一嗓子,再看是谁发的,视情况更新记录表。
这个方式很好,因此网络层的中间设备,可以借鉴
那用什么标识方案呢?
首先想到的肯定是改造现有的MAC地址,但是MAC能改造吗?改造得符合要求。难啊,因为MAC是写死在硬件上的,完全没有规律可言。
那也就是说,如果用MAC地址来寻找,还要避免广播,那就只能是记住每一个MAC该从哪个接口转发到接口,而世界上有如此多的网络设备,大家都有MAC地址,每一个中间设备都需要维护一张包含所有的MAC地址的表,显然是消耗巨大的。
所以只好新建一套标识方案,这个标识方案就是IP。

other

附:有了IP为什么还要MAC—知乎回答
在想上面的那些内容的时候,我一直在想,自底向上,一层一层,在第二层的就有了一个MAC,为何第三层还要用一个IP,为什么不能找一种能复用MAC的方法来达到目的,或者说,为什么不在一开始设计的时候,就将MAC与IP统一起来。怎么也想不通,在这上面花了我两天的时间。后来就看到了上面的那个知乎回答。我想我的疑惑解除了。
考虑到当时的历史背景,不管是IP还是MAC,他们都是用来解决当时面临问题的技术手段,在当时的视角来看,也许新建一套IP标识体系解决要比复用MAC简单得多。两层的耦合也更低。

计算机网络各个层都是从局部到整体,从混乱到有序,慢慢解决每个问题形成的,然后由标准化组织召集各个研发者开会商议一个统一的标准。 技术先于标准,而不是标准发明技术。而我们所学的,大多是标准中包含的内容,很容易以为技术就是从上往下从整体到局部,一步成形,不是的。
技术有很多地方没有什么必然的原因,都是历史造就的。一个技术解决一个问题就会出现下一个问题,然后又有新的技术。如果从现在的眼光看过去,就觉得可以重新设计另一套更好的网络分层,但就商业化来讲这是不可能的。

比如在当时的视角看32位的IPv4就能满足地址的分配需求了,但是谁能想到,在IP问世还不到50年的时间里,IPv4就分配完了呢?所以才需要发展128位的IPv6来解决问题。并且,即使当时的设计者,意识到了地址不够用的问题,考虑到成本,可能仍然会选择IPv4的解决方案,毕竟在那个年代,存储空间是昂贵的,每多存储一点信息,就会需要更多的存储空间,成本也会增加。
此外,虽然以现在的视角来看,IPv6完全能解决地址不够用的问题,毕竟声称能为地球上的每一粒沙子都分配一个地址。但是谁能保证,在未来,不会有为每一粒原子分配ip的需求?那时候IPv6还够用吗, 那就可能需要发展新的标识技术。或者说,跳离使用IP的标识方式,转而使用一种全新的,以我们现有的视角无法想象的标识方式也是有可能的。

如果在学习的时候,能够把视角放到当时的时代背景去看,那么很多问题就很好解释了。以现有的视角去看前人的解决方案,反而会很难理解设计者当时的想法。说不定再过多少年,新科学体系的视角下,现有科技体系只是沙滩上的积木,一推就倒,对未来的科技体系没有多大帮助。但是在现在的视角下,它仍然是宏伟的,壮观的,对我们来说是有效的。
我们不能拿本朝的剑,斩前朝的官。不能以现有的法,定前人的罪。