在讲述这个故事之前,首先来看一下早期的网络是怎样连接的

两个设备如何通信?
最开始的时候人们使用一根同轴电缆连接两台设备,这里用到了一种叫做调制解调器的设备,这种设备可以将信号调制叠加成电信号,然后由电缆输送,对端设备同样需要调制解调器把收到的电信号解调制,这样就能获取到数据;

这样的通信方式不需要ip也不需要mac,因为一共就只有两台设备…

但是两台设备指定是不够组成网络的,不过这种方式也是能够把两台以上的设备连接起来的;最早人们使用Full Mesh连接,也就是每台设备都保有和网路中其他设备的专用连接,这样就需要很多线路,也需要很多猫,成本过高,管理难度也过高;

为了降低成本,人们使用了总线网络,所有的设备都被连接到一条总线上,这条总线是复用的,大家都可以通过这条总线通信;每个设备也只需要一个猫就可以和总线通信,四舍五入就算是可以和网络中的每个设备通信了;

当然总线网络因为可能存在冲突所以引入了载波侦听多路访问和碰撞检测机制,这里不讨论这两个机制;我们来讨论一下总线网络引发的另一个问题,大家都在一个总线里面,某个设备发送的信息其实大家都可以时候到,那么这个时候,到底那个设备才是目标呢?

因为这个问题的存在,网络中引入了地址;

设备需要自觉的比对某个信息是不是发送给自己的

源地址的设备发送的信息携带了目标地址的信息,这时候总线是会把这条信息发送给所有的设备的,设备会自主的对比自身的地址和信息中携带的地址,如果对上了,那么这个信息就是发送给自己的,收下就可以了;

地址的引入引发了新的问题,如何规划地址?

在mac地址诞生之前,存在一种叫做ARCNET的地址协议,这玩意地址只有一个字节,也就是做多能供给256台设备划分地址;使用这种协议的网卡拥有一个拨码开关…可以手动给设备编码;

抛开这些上古时期的协议…我们来看看现在的MAC地址…

以太网协议规定,mac地址是一个48位的mac地址,每个mac地址应当全球唯一;

MAC地址是全球唯一的,那么为什么需要IP地址?

先说结论,因为传播路径

我们使用的互联网本质上是有很多局域网组成的,但是每台设备都有能和互联网中另一台设备通信的能力;如何将本局域网中的一个设备送给另个局域网中的设备?答案是通过转发;

局域网是通过具备mac学习能力的设备连接在一起的,为什么要学习mac?因为这些设备需要知道,某个包的目的是否包含在它连接的另一个局域网中,如果在才会进行转发;这样做的好处是能够降低线路负载,不用什么包都发送给另一局域网;

这样会引发一个问题,如果局域网大了,网桥中保存的mac地址数量就会很多;随着设备接入、退出这个局域网,这个表还需要及时的更新;这就更麻烦了;

IP地址的引入就解决了这个麻烦,有了IP地址,一个局域网中的通信就可以使用IP作为逻辑地址;局域网中大家的IP地址前缀都是一样的,如此一来,如果是本局域网中的通信数据包就能被很快的识别出来,网桥就不需要再去查询某个包是不是要进行转发了(直接使用IP地址的前缀去确认)