深入理解子网

我们知道,两台电脑之间可以连接一根网线就可以进行通信,但是如果三台电脑之间相互通信,那每台电脑就必须有两个网口,好像也能接受,但随着越来越多的电脑接入网络,每台电脑也需要装上越来越多的网口,很显然是不现实的,于是便出现了交换机。
me6xzq0k.png
所有电脑都连接到交换机,电脑之间相互通信时先把数据发送到交换机,交换机再把数据转发到目标机器。
那么,交换机是如何准确的把数据发送到目标主机呢?原因在于交换机中维护着一张mac表,表中记录了交换机每个端口所连接的电脑的mac地址,当电脑A给电脑B发送数据时,数据先发送到交换机,交换机再通过mac表查询电脑B的mac地址和交换机端口的关系,最终将数据发送到电脑B。
me6z0yn0.png
这个过程看似很完美,其实还存在很多问题:

  • 交换机并不认识电脑A或电脑B,它只认识mac地址
  • 一开始的时候交换机里面的mac表是空表,它是如何得到每台电脑mac与交换机端口的隐射关系呢?
    这两个问题其实是靠IP、Arp、和广播来解决的,Arp记录着电脑IP与mac的映射关系,当电脑A与电脑B进行通信时,需要先获取电脑B的IP地址(如通过DNS解析),获取电脑B的IP地址后,电脑A会在自己的的Arp缓存表中查看B的IP所对应的mac地址,然后将目标mac和请求数据封装成数据包,然后将数据包发送给交换机,交换机再查看mac表,最终将数据包送达。如果A和B是第一次通信,那么Arp缓存表中是没有B的记录的,这时候A就会发送广播数据:
    me73og47.png

A发送广播数据包:

源mac:aa-aa-aa-aa-aa-aa

目标mac:FF:FF:FF:FF:FF:FF

内容:谁是192.168.1.3?请告诉我你的mac地址

交换机收到数据包:发现目标地址是广播地址,将数据内容发送给局域网内除了A以外的所有的电脑。

B收到广播后回复:

源mac:bb-bb-bb-bb-bb-bb

目标mac:aa-aa-aa-aa-aa-aa

内容:我是192.168.1.3,我的mac是bb-bb-bb-bb-bb-bb

A收到回复后会将B的mac添加到Arp缓存表中,这时候如果交换机中的mac表没有B的mac映射关系,则交换机会将该映射关系添加到mac表中。

继续深入,当接入的电脑越来越多,一个交换机已经满足不了需求,就需要多个交换机相连,但是这会使交换机中的mac表维护越来越困难,于是为了解决这一问题,又诞生了一个新设备,叫做路由器。
多台交换机连接在同一路由器上,路由器将这些交换机分割开,每台交换机组成的网络叫做子网,每台交换机只需维护所在子网内的mac表,跨子网数据直接丢给路由器处理。
me74q52h.png
那么,当A给B发送数据时怎么判断到底有没有跨子网呢?
靠子网掩码!A给B发送数据时会将A的IP地址和B的IP地址分别和子网掩码进行与运算,当运算结果相同即为同一子网,不相同则不在同一子网。与运算方法:二进制“同1则1,否则为0”,如:

A的IP:192.168.1.2和子网掩码255.255.255.0进行与运算:
11000000.10101000.00000001.00000010
                 &
11111111.11111111.11111111.00000000

11000000.10101000.00000001.00000000
即:192.168.1.0

B的IP:192.168.1.3和子网掩码255.255.255.0进行与运算:
11000000.10101000.00000001.00000010
                 &
11111111.11111111.11111111.00000000

11000000.10101000.00000001.00000000
即:192.168.1.0

A与B的运算结果相同,即在同一子网。其中192.168.1.0是目标网络(Destination)。
这里有一个快捷计算方法:子网掩码为255位置所对应的IP段相同则在同一子网,否则不在同一子网,因为0和任何数进行与运算都为0,所以子网掩码为0位置所对应的IP段无论怎么变最终的与运算结果都相同为0,所以只需保持255所对应的IP段一致即可。
如:
子网掩码为:255.255.255.0

       192.168.2.25
       192.168.2.37

255位置对应的IP段均为192.168.2,则俩IP在同一子网,因为0与25、37进行与运算结果均为0,最终结果都是192.168.2.0
me76qctv.png
上图中A与C通信时,A的数据传到路由器,路由器将数据包中的目标地址192.168.2.4与子网掩码255.255.255.0进行与运算来匹配最长前缀的目标网络(Destination)192.168.2.0,并选择与之对应的网络端口发送数据。

Destination    Gateway       Netmask        Interface
192.168.1.0    0.0.0.0       255.255.255.0  eth0  # 直连子网1
192.168.2.0    0.0.0.0       255.255.255.0  eth1  # 直连子网2
0.0.0.0        203.0.113.1   0.0.0.0        eth2  # 默认路由
无标签
评论区
头像