这里有两台电脑通过一根网线将两台电脑连接起来,设备之间可以相互传输数据。现在增加一台电脑,总数变为三台,任意两台电脑想要传数据,需要三根网线,并且每台设备需要两个网口。再增加一台电脑,四台设备实现任意两台互联,每台电脑需要三个网口,并且需要六根网线。随着设备数量的增加,对网口和网线的数量要求呈几何级增长。比较理性的朋友肯定会发现,这么搞下去,成本实在太高,太费钱。
为了省下网口和网线的钱,KAPANAN公司在1989年发明了第一台网络交换机,这台交换机可以识别各个设备的MAC地址,也就是电子设备的身份证。实现点对点收发数据。每台设备只需要一个网口一根网线,连接到交换机接口上,当设备发送和接受数据时,交换机就会依据MAC地址自动把数据发送到指定设备。大大简化了网络链路,降低了成本。 交换机的英文名称是Switch,直译过来是开关。国内的专家觉得“开关”这个名词非常不直观,把开关打开,这里的开关是指电源开关呢?还是交换机呢?而交换机这个名字听起来更强大,看名字就了解实际功能。(交换机字面意思:用于交换数据的机器)这里海翎光电的小编要吐槽一下Kalpana公司了,你知不知道你起的名字,给多少美国儿童带来了噩梦啊?如下图:小朋友生日时想要一Switch,结果收到的却是交换机。哈哈哈。
说起路由器,想必大家都不会陌生。每个家庭都会至少有一个路由器来连接网络设备。但是还有小伙伴提到,交换机是用来做什么的?它与路由器有什么区别呢?我们经常听到的网关和路由又是什么意思呢?
交换机的主要功能就是把数据包发送到正确的位置。交换机相当于邮递员,根据数据包中的目标mac地址,找到它对应的物理端口。一台交换机有很多个端口,它们都有自己的编号(如下图)。计算机的网卡通过网线连接到交换机的网口上,这个端口就是一个确定的物理位置。我们只要知道某个网卡的mac地址在哪个端口上,我们就能正确的把数据包发给它。
所以在交换机中有一张端口与mac地址的映射关系表,交换机维护这张映射关系表,想要与某个mac地址通信时,只需要来查询一下这个mac在哪个端口上,然后从对应的端口发送出去就可以了。
每一包数据都会有两个mac地址,一个是发送方的mac地址,称为源mac。另一个是接收方的mac地址称为目标mac。交换机收到一包数据后,首先要把这包数据的源mca与接收端口进行绑定,然后交换机要根据目标mac查找,从哪个端口把数据包发送出去。
这个时候就会出现两种情况。第一种情况是mac地址表中查询到关联的端口,则直接从关联端口发出。第二种情况是mac地址表中没有查询到关联的端口,则向除了接收端口之外的所有端口群发。这种行为称之为泛洪。如果目标mac地址在这个网络中则它一定能收到群发的数据包。如此运行一段时间后,通过交换机的mac地址表,就可以找到网络中的所有网卡设备。
由此可见,交换机只会关心数据包中的mac地址,而不会关心IP地址。mac地址在TCP/IP协议中,处于第二层数据链路层。
我们再来看一下路由器,我们知道路由器有两种接口,一种是LAN口,一种是WAN口。LAN口可以有多个,用来接家庭网络设备。比如台式机,手机,笔记本。其中,手机和笔记本是通过WIFI连接到路由器的设备。也相当于连接到了LAN口上。WAN口只有一个用来接入运营商网络。连接到互联网中。 如果把路由器的WAN口忽略,只用LAN口。其实路由器就是一台交换机。那考虑到WAN口呢?这里我们就要引入一个概念就是网关。网关是干什么的呢?为了说明网关的作用,我们需要先了解一下子网是如何划分的。我们把IP地址和子网掩码按位相与,与的意思就是1与几就是几,而0与几都是0。 我们常用的子网掩码,255.255.255.0前3个字节也就是前24位全是1后8位全为0。所以按位相与的结果,一定是这个IP地址的前三个字节不变,而最一个字节是0。
比如192.168.1.10与255.255.255.0等于192.168.1.0。 我们把IP地址与子网掩码相与之后的结果相同的两个IP认为是在同一个子网,也就是说IP为162.168.1.10,子码掩网为 255.255.255.0的这张网卡与另一个192.168.1.X的网卡,一定是在同一个子网当中。 因为子网掩码都是连续的1和连续的0。所以我们通常用1的数量来表示子网掩码。 比如255.255.255.0就是24。我们用IP/子网掩码来表示一个网络。 比如192.168.1.0/24表示的网络中拥有255个IP地址。 所以如果想扩大子网中IP地址的数量,我们只需要把子网掩码调小。 如果想减少子网中IP地址的数量,我们只需要把子网掩码调大就可以了。
知道了子网的概念,那子网有什么意义呢?因为tcp/ip协议规定,不同子网之间是不可以直接通信的。如果要通信需要通过网关来进行转发。网关上有两张网卡分别配置了属于两个子网的IP地址。可以在两个网络之间转发数据包,这样我们就拥有了一个连接了两个子网的网络。
我们举一个简单的例子:子网1中的计算机a发送数据包时,首先计算机a会根据目标IP判断是否跟自己属于同一个子网。如果是同一个子网则直接从网卡发出。如果不是同一个子网,则需要把数据包的目标mac地址改为网关mac,然后发送给网关。 网关拿到这一包数据后,再通过路由表查询到这一包数据属于子网2,网关修改目标mac地址为计算机b的mac地址,修改源mac为自己的mac,然后从子网2的网卡发出,以上出现了多次根据目标ip判断数据包应该如何发送的行为,我们就称之为路由。
路由器有一个WAN口接入互联网,多个LAN接入本地网络。他们就分别属于不同的子网,所以从内网访问互联网就是跨网络的行为,这时候就需要路由器来担任网关的角色。他的行为就叫路由。
细心的小伙伴可能已经发现问题了,两个不同家庭中的计算机可能都是192.168.1.10这个IP地址。如果按照上面所说的情况发送到互联网上,那互联网上不就会存在无数个相同的IP地址了?这确实是一个问题,欢迎大家在评论区讨论交流。