子网掩码、IP以及MAC

子网掩码是什么?

子网掩码是配合IP地址(IPv4,以下不特指均为IPv4)使用的,主要用来区分IP地址的网络标识主机标识
子网掩码使用全1位屏蔽IP地址的网络部分,对于A、B、C类的IP地址,默认的子网掩码分别是255.0.0.0、255.255.0.0、255.255.255.0。
举个例子:

  • 对于IP地址172.20.0.18,属于B类地址,设置其子网掩码为255.255.0.0,因此该IP的网络部分为172.20;
  • 对于IP地址172.20.3.18,属于B类地址,设置其子网掩码为255.255.0.0,因此该IP的网络部分为172.20;
  • 子网掩码有两个特殊地址,当子网掩码的主机地址全为0时,表示该网络地址(172.20.0.0),当子网掩码的主机地址全为1时,表示该网络的广播地址(172.20.255.255)。

路由器在根据IP进行寻址时,只关注网络部分如上面例子中的172.20;对于后面的0.18和3.18属于172.20子网内的主机号;

其他表示方式:如172.20.1.16/24 等价于 子网掩码 255.255.255.0,24代表IP地址从头前24个比特代表网络地址

子网掩码有什么用

我们知道,两台主机要想通信,必须处在同一个数据链路内,即在一个子网下ARP协议才能解析出对方的MAC地址从而进行通信;如果不在同一个子网内,则需要三层交换机或路由器的帮助才能进行通信。

  1. 划分子网
  • 把一个C段IP:192.168.0.0划成两个网段,那我们使用子网掩码255.255.255.128
  • 第一个网段:192.168.0.0/255.255.255.128
  • 第二个网段:192.168.0.128/255.255.255.128
  • 第一个网段起网关:192.168.0.1/255.255.255.128
  • 第二个网段起网关:192.168.0.129/255.255.255.128

这样这个C的IP就被划分为两段。前半段必须使用前半段的网关,后半段必须使用后半段的网关。如果给前半段IP配置后半段的网关系统会给我们提示错误。参考文献

  1. 合并子网
  • 假设两个IP地址分别是172.20.0.18和172.20.1.16,子网掩码都是255.255.255.0。
  • 两者的网络标识分别是172.20.0和172.20.1,无法直接通信
  • 将子网掩码改成255.255.0.0
  • 两者的网络标识均是172.20,即将两个网段合并成一个了

子网掩码的计算方式

根据子网数

利用子网数来计算
在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。

  1. 将子网数目转化为二进制来表示
  2. 取得该二进制的位数,为 N
  3. 取得该IP地址的类子网掩码,将其主机地址部分的前N位置1 即得出该IP地址划分子网的子网掩码。
    如欲将B类IP地址168.195.0.0划分成27个子网:
  • 27=11011
  • 该二进制为五位数,N = 5
  • 将B类地址的子网掩码255.255.0.0的主机地址前5位置1(B类地址的主机位包括后两个字节,所以这里要把第三个字节的前5位置1,得到 255.255.248.0
  • 即为划分成27个子网的B类IP地址 168.195.0.0的子网掩码(实际上是划成了32-2=30个子网)。
    这一段介绍的是旧标准下计算的方法,关于旧的标准后文在介绍,在新标准中则可以先将27减去1,因为计算机是从0开始计算的,从0到27实际上是有28个,所以说如果需要27个就需要将27减去1。
根据主机数

利用主机数来计算

  1. 将主机数目转化为二进制来表示
  2. 如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为 N,这里肯定N<8。如果大于254,则 N>8,这就是说主机地址将占据不止8位。
  3. 使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。
    如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:
  • 700=1010111100
  • 该二进制为十位数,N = 10
  • 将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255然后再从后向前将后10位置0,即为: 11111111.11111111.11111100.00000000即255.255.252.0。这就是该欲划分成主机为700台的B类IP地址168.195.0.0的子网掩码

参考文献:百度百科子网掩码

为什么必须要有子网掩码

根据上述可知,子网掩码其实就是划分子网用的,它制定了你的网络处于哪个子网中,处于同一个子网的计算机能够通过ARP协议直接进行通信,如果需要与其他子网的计算机通信,需要通过ARP拿到路由器的MAC地址,将消息发送给路由器,由路由器进行路由转发

为什么有了MAC(IP)还需要IP(MAC)

  1. MAC地址是数据链路层使用的,IP是网络层使用的,分层设计有利于实现简单
  2. 在数据链路层是使用MAC直接通信的,只有MAC没有IP是可以通信的,但当全球几十亿甚至几百亿台设备接入互联网时,只用MAC进行寻址通信需要一张大到难以想象的表来维持(可以类比知道一个人的身份证号在全世界找这个人的难度)
  3. IP提供网络分层概念,通过路由的IP路由查找确定通信目标所在子网,在子网内通过ARP协议拿到MAC地址进行目标寻址。
  4. 那为什么有了IP还需要MAC呢?IP是最终地址不会改变,而MAC是下一跳地址是会改变的。假如IP够用路由器支持下一条IP地址直接寻址的话,理论上不用MAC也可以的

以一个快递的例子:
同一个子网内:
王大妈家在太阳城小区有两套房,给了他儿子一套,在不同单元。王大妈给他儿子买了些衣服,但这时邻居蔡大娘打电话三缺一,王大妈听了后将衣服塞给了张大爷,让他帮忙送一下给他儿子,但没说他儿子具体住几单元几号房

  • 张大爷(发送端)掏出手机在小区微信群里吼了一嗓子:王小二你妈喊你收衣服!你住在哪?(ARP协议
  • 王小二看到后在群里说:大爷,我住在5撞2401(MAC地址),我现在不在家您能帮我放门口吗?
  • 大爷提气运功随手一扔将快递扔到了对面5撞24楼一号房的阳台上,拍拍手不留一片云彩(消息送达

不同子网:
王大妈儿子拿到衣服后感觉不合身,于是想到了远在杭州的大舅子,想把衣服送给他。

  • 王大妈儿子打开微信群问道:“张大爷你现在在哪?”(ARP
  • 张大爷回复:“我在3撞楼下练太极”(路由器的MAC
  • 王大妈儿子来到3撞楼下将衣服塞给张大爷:“你帮我把衣服扔到这个地址呗,省一笔快递费”
  • 张大爷拿起纸条一看,地址为浙江省 杭州市 余杭区 阿里巴巴西溪园区 马爸爸 收目标IP
  • 张大爷皱皱眉说,太远了我内力不够,我得找我几个老朋友帮帮忙,然后他掏出手机打开微信查了一圈(路由控制表),找到了在浙江杭州(下一跳路由器IP)的李大爷家的地址(下一跳路由器MAC
  • 张大爷提气运功随手一扔,一包衣服冲天而起奔着杭州飞去。
  • 李大爷正门口躺椅睡觉呢脑门子上砸下来一包衣服,看了纸条后了解的情况,然后 掏出手机打开微信查了一圈(路由控制表),找到了在余杭区(下一跳路由器IP)的刘大爷家的地址(下一跳路由器MAC),随手一扔。
  • 刘大爷家正好就在阿里巴巴西溪园区旁边,他拿到包裹后拿出手机打开叮叮群,吼了一嗓子:“小马你在哪?有你的快递!”(ARP协议
  • 小马回复:“我在会议室开会”(MAC地址
  • 刘大爷使出佛山无影脚将包裹踢向了顶层的会议室(送达

总结:
IP地址是网络层,主要用来网络分层和定位;
MAC是数据链路层用的,是传输消息时使用的真正的地址;
传输过程中IP用来分层查找,通过ARP拿到MAC地址后才能去发送数据;

你可能感兴趣的:(tcp/ip)