大家好,又见面了,我是你们的朋友全栈君。
前言
在上一篇我们聊到了简单的了解到了计算机的通信方式,并且都是处于同一个网段下的通信,简要理解(大局观)计算机之间的通信方式【同一网段】(直接相连,同轴电缆,集线器,网桥,交换机),今天我们聊聊路由器和MAC地址IP地址的基础知识
文章目录
计算机之间连接方式—路由器连接
我们知道如果全世界都用交换机连接网络的话,会导致广播风暴,即,当在由交换机连接网络的时候,两台计算机通信,首先会发ARP广播得到对方的MAC地址,于此同时交换机就会记录经过交换机的数据包传过的MAC,全世界那么多电脑,这样会导致要询问全世界的电脑MAC地址,很明显占用网络资源非常严重,所以不适用都是交换机来连接全世界的计算机,再说了,交换机连接是属于同一网段的网络,这样也会导致IP地址肯定不够用的。
总结一下:同轴电缆,集线器,网桥,交换机连接的设备都是处于同一个网段,这也意味着他们连接的设备处于同一个广播域(一个设备发ARP广播包,全部连接在同一个网段都可以收到;
网桥和交换机相比集线器同轴电缆来说,可以一定程度的隔绝冲突域。
所以我们引入了一个更实用的路由器,它所连接的网络是处于不同网段的网络,能够使得数据包在不同网段之间转换数据。
看橙色的大筐筐和紫色大筐筐,中间有个路由器,橙色的大筐筐就是192.168.1.0
网段,紫色大筐筐是192.168.2.0
网段。
在有路由器之后,想给对方发送数据时候,就不是直接发送ARP广播包询问对方的MAC地址了,而是
先判断对方计算机的IP地址是否和原IP地址处于同一个网段:
处于同一个网段:就发ARP广播询问对方MAC地址;
处于不同网段:就通过路由器经行转发数据包(此时也会发ARP广播包,只不过是获取路由器网关的MAC地址);
那如何通过路由器转发数据包呢?其实就是路由器的网关起作用。
网关这个相当于是路由器的接口,类似路由器众多IP地址中的一个,网关要和它相连的设备处于同一个网段,并且,与路由器相连的计算机需要给他们配置默认网关地址,默认网关就是经过路由器网关(接口)的IP地址,才可以经过这个对应的网关。
比如下图:路由器有两个网关,每个网关都只能通过和网关IP处于同一个网段的数据包。
而对于左边的计算机2计算机3都需要设置默认网关:192.168.3.1,右边的计算机4和计算机5也需要设置默认网关192.168.4.1;这样才可以经过路由器网关。
一般网关的主机号都是设置位1,当然设置其他的号也行,只是大家习惯规定而以。
路由器可以隔绝广播域:即假如计算机2给同一网段的计算机3发送ARP广播包时候,并不会经过路由器转发到其他网段去,当路由器接收到这个ARP广播包时候,发现不是询问路由器的MAC地址,那么路由器就会丢弃数据包。隔绝两下图左右两边的广播域。
在路由器中,连接不同网段的数据,是通过路由器的网关来帮助转发的。比如假如上图计算机2和计算机5通信:
(忽略了交换机记录MAC地址的过程,这里主要关注是路由器不同网段的数据发送过程)
-
首先判断不处于同一个网段,所以要路由器转发数据,由于路由器网关1的地址和计算机2处于同一个网段,所以计算机2首先会发一个ARP广播包,为了获取网关1的MAC地址;
-
然后就可以经过路由器,路由器发现这个数据包是给计算机5,然后就转发给网关2,转发给网关2的原因是因为计算机5和网关2处于同一个网段;
-
再由于还是不知道计算机5的MAC地址,所以网关2会发一个ARP广播包,询问得到计算机5的MAC地址后,就可以往计算机5发送数据了;
-
最后于此同时,计算机5也会返回一个响应包给计算机2。
假如有路由器,是处于同一个网段的转发数据包呢?
比如上图的计算机2和计算机3通信,那么就是简单的同一个局域网通信了:
- 首先计算机2而判断出是处于同一个网段,计算机2就会发广播包询问计算机3的MAC地址;
- 此时经过交换机发送给计算机3和路由器,路由器由于发现不是要自己的MAC地址,那么就丢弃,计算机3发现是需要自己的MAC地址就接收;
- 于此同时计算机3就返回响应包,告诉计算机2MAC地址是它,此时,经过交换机并不会再次广播给路由器,因为交换机有记忆每个端口MAC地址功能,能够准确精确给计算机2发回去响应数据包。
- 此时计算机2就可根据MAC和IP地址给计算机3发送数据包了。
现在我们再思考多一个场景:我们知道路由器是连接不同网段的网络的,那我假如路由器连接相同的网段,那数据包会发送过去吗?
答案是不会的,因为数据包发送的时候,会判断对方的IP地址是否和自己处于同一个网段,假如路由器相连接同一个网段的话,那就发一个ARP广播,但是我们知道路由器是有网关地址的,你要经过路由器相连的的另一台设备,那么先经过路由器,路由器的网关,那么数据包就会直接发送给网关了,路由器网关一看数据包,不是询问自己的MAC地址,那就丢弃啦,都不可能通过路由器转发到另一个设备中。
MAC地址
首先MAC地址是固化在网卡中的,每个MAC地址都是6个字节(48个bit)。
MAC地址分为两个部分:第一个部分是组织唯一标识符;第二个部分是网络接口标识符。
MAC地址是全球唯一的,由IEEE802标准会规定,标准会给厂家分配前三个字节,即MAC地址组织唯一标识符,后三个字节是厂家自家分配。
查询厂家的MAC地址前三个字节的网址:http://standards-oui.ieee.org/oui/oui.txt
我截个图给你们看看
也可以查看自家的MAC地址,如在cmd敲命令:ipconfig /all
不同操作系统的MAC地址可能表现得形式会有不一样。
特殊的MAC地址:
当48bit,即6个字节都是1的时候,表示位广播地址,即ARP广播包MAC地址。
由十六进制表示就是全是FF FF FF FF FF FF。
所以以后我们看到一些数据包,都是全1的,或者十六进制表示全F的MAC地址,要反应出这是广播数据包。
MAC地址的获取:当我们不知道对方的MAC地址时候,就会发一个ARP广播包,获取到对方的MAC地址时候,就会缓存对应的IP和MAC地址之间的映射(即对应关系),这就是ARP缓存机制。
IP地址
IP地址,互联网每一台计算机都有IP地址
IPV4是32位的IP地址,2019年11月25日已经使用完了;
IPV6是32位的IP地址,目前使用的是IPV6的地址,有生之年都够用。
但是下面我说的都是IPV4,默认条件下。
下图位IP地址的表现形式
IP地址的组成:IP地址是由两部分组成,一部分是网络标识,另一部分主机标识。
那如何判断一个IP地址的网络标识和主机标识部分?
通过子网掩码结合IP地址去判断,子网掩码前面bit位全是1表示对应IP地址部分为网络标识,全为0对应IP地址表示为主机标识。
所以当我们说IP地址时候,是隐藏了IP地址对应的子网掩码的。只有配合了子网掩码才可以判断出一个IP地址的网络标识和主机标识的位置。
而我们通常说的处于统一网段的设备,即处于同一个网络标识的IP地址。
那么网段是如何计算的呢?
网段 = IP地址 & 子网掩码。即IP地址与子网掩码按位与。
子网掩码的主要作用就是用来计算网段的,判断多个IP地址是否处于同一个网段,它的作用就很重要;于此同时还是可以用来判断IP地址的网络标识和主机标识。
对于一个IP地址的网络标识可以用来判断IP地址处于哪一个网段;而对于主机标识,则表示处于这个网段上可以有多数台主机可以使用这个网段的IP地址。
比如上图的网段192.168.1.0,我们知道网络标识是192.168.1,而主机标识位有8个bit 即可以表示的数据范围是 0 ~ 28 – 1 = 0 ~ 255; 即有255 – 0 + 1 = 256 个主机号。
但是这0 ~ 255数据范围内,要扣去主机位全0,和主机位全1的,因为主机位全0的IP地址,表示网段的IP地址,主机位全1的IP地址,表示这个网段的广播包IP地址。所以这个192.168.1.0的网段可以有256 – 2 = 254台设备使用。
要理解这里的主机位全0,全1,这都是对二进制来说的,后面讲到子网划分和超网时候,可能以10进制形式书写的IP地址上对于IP地址后8位bit转换10进制写的时候,不都是0,也可能表示是网段的IP,或者广播包IP哦。
对比一下MAC地址全为1的广播包和处于某一个网段IP地址主机位全是1的广播包:
MAC地址全为1的广播包是在响应时候,只会得到目标IP地址的响应;
而在某一个网段下,主机位全是1的IP地址广播包,返回响应的是,处于同一网段的响应都会返回;
IP地址的分类
只有A类B类C类的IP才可以分配给主机使用;
以后对于一个IP地址,我们至少可以得到一个信息,通过IP地址的第一部分的数据判断它属于哪类的地址。
A类地址
- A类地址,前8bit为网络部分,后24bit为主机部分;那子网掩码自然而然就知道是:255.0.0.0网络部分第一位为0;
- 所以我们知道网络部分可以表示的范围是 0 ~ 27 – 1 = 0 ~ 127;对于A类地址来说,网络部分还有一定的限定,网络部分全为0(8bit都为0)的网段不可以用,并且网络部分为127的网段作为保留网段,所以
对于A类地址来说:网络部分的表示网段的适用范围是1~126
;- 对于主机部分,由于又24bit,分为3个字节,每个字节的范围是0~28-1 = 0~255;所以每个字节的数据个数又256,有3个字节,所以对于主机部分:能够表示主机的数量有256256256台,但是,由于主机部分也有限定:全0和全1不能给主机分配,所以
最终A类地址,对于一个网段来说,主机数最大的容量是256*256*256-2台
所以当我们看到一个IP地址时候,至少需要有个反应,知道它是哪一类的地址。
比如:123.123.232.1,看前面的8为二进制,也就是第一部分,显示的是123,属于1~126的A类地址范围呢,所以说这是一个A类网络的IP地址
B类地址
B类地址,网络部分为16bit,主机部分为16bit,所以子网掩码为:255.255.0.0;网络部分是以10开头,占两个bit;
所以说网络部分的最小值是:10 000000 00000000;转化为十进制 128.0;
网络部分的最大值是:10 111111 11111111;转化为十进制 191.255;
我们这就可以知道第1部分的数据范围是128~191;第2部分的数据范围是0 ~ 255;
那么主机ID,16个bit,分为两部分,对于B类地址的某一网段来说,主机最大数为256*256-2台;
虽然我们知道B类地址的网络部分是16个bit,但是整个IP地址(32位)区分位4个部分时候,网络部分就占了两个部分,但是我们可以根据第一部分的数据,判断IP地址属于哪一类的地址。
比如:129.124.123.1的IP地址,很明显看出这IP地址为B类地址,因为129属于B类地址的第一部分数据范围:128 ~ 191;
C类地址
D和E类地址
子网掩码的CIDN表示方法
通过这个方式,我们就可以一下子知道IP地址和子网掩码与此同时得到网段;
为什么需要子网划分
假如有个场景需求,我们要求分配200台计算机的IP地址,但是我希望这来200台计算机处于同一网段,很好想到,我们可以分配给它们200台计算机的C类IP地址,因为一个网段下的C类IP地址可以容纳主机最大数量是254台。比如分配:192.168.1.0/24网段下的,那么对于这个C类IP地址的网段:192.168.1.0/24使用200台后,还剩下54个此网段的IP地址可以用。这其实算是一个合理利用了。
假如我要分配500台计算机的IP地址处于同一网段下的呢?你发现对于C类地址来说,是不够用的,因为C类地址的网段最大容纳也是254台;那你可能会想,为了处于同一网段下,必须分配容量更大的IP地址才可以,你就想到B类地址,因为对于某一网段的B类地址可以容纳256*256 -2 = 65534 台主机,比如:128.100.0.0/16网段,但是当你分配500台计算机给128.100.0.0/16网段的B类地址时候,还剩下65304空闲的该网段的B类IP地址,此时你意识到,这是极大的浪费。
所以为了能够合理的利用IP地址的资源,我们需要对IP地址进行子网划分。
什么是子网划分
子网划分,我的理解就是把一个大的网段,划分为多个不同的小的网段,这多个不同的小网段就是大网段的子网;这样就可以合理利用该网段的IP地址,合理分配计算机的数量了。
至于如何划分多个不同的网段,也就是说,如何子网划分呢?
子网划分的方法就是:借助IP地址的主机位作为子网位,划分多个子网
而对于子网划分又分为两大类:
- 等长子网划分:将一个网段,分为多个子网,每个子网的可用IP地址数量是一样的。
比如:对于 192.168.100.0/24这个网段,可以用IP地址数量为254,我将它划分为2个不同的子网,这2个子网的可用IP地址是一样的,每个子网的可用IP地址数量都是127个,这就是等长子网划分;- 变长子网划分:划分一个网段时候,子网的可用IP地址数量是不一样。
比如:对于 192.168.100.0/24这个网段,我把它划分为3个子网,分别给这三个子网分配的可用IP地址数量不一致就行了。
等长子网划分——划分两个子网
我们以C类地址192.186.0.0/24这个网段来说明这个问题,划分两个子网的过程。
等长子网划分——划分4个网段
其实很容易发现规律的:划分n段就用主机位的范围数除以 n;
比如这个C类地址,主机位8个bit,数据范围是0~255;有256个数字;划分4段;256 / 4 = 64;
然后加个辅助的数轴,分4个64的数据在数轴画起来来,然后在每一段排除掉全是 0 和全是 1的,剩下的每一段就表示该网段的IP地址可用数量;
其实分类还有变长子网划分,还有超网等概念。其实我不打算写,这些只要自己有了等长子网划分的基础,可以百度,或者看书去了解,如果你感兴趣的话。
网段计算的注意事项
反正明白两个点:对于一个IP地址:IP地址第一部分可以知道它属于什么类型的IP地址,IP地址加上子网掩码按位与可以算出网段,不要看到同一IP地址的十进制数的子网掩码个数相同,还有十进制的IP表现形式相同,就判断它们属于用以网段,还要结合IP地址和子网掩码的按位于去计算
这个就是C类地址,你以为前面24个位的IP地址形式一样就是同一网段了嘛?当然不是,网段是需要结合子网掩码算的。经过计算很明显上面的网段是不一样的。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137556.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...