本文最后更新于 2024年3月26日 下午
介绍
本文简单介绍了Windows下的IP地址、子网掩码、网关的作用
IP地址与子网掩码
如下所示,我在Windows上配置了一个IP(192.168.0.100) 和子网掩码(/24)
1 2 3 4 5 6 7 8 9 10 11
| C:\Users\admin>ipconfig
Windows IP Configuration
Ethernet adapter Ethernet0:
Connection-specific DNS Suffix . : IPv4 Address. . . . . . . . . . . : 192.168.0.100 Subnet Mask . . . . . . . . . . . : 255.255.255.0
|
查看路由表增加了那些条目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| C:\Users\admin>route -4 print 192.168.0* =========================================================================== Interface List 15...00 0c 29 35 f6 ba ......Intel(R) 82574L Gigabit Network Connection 1...........................Software Loopback Interface 1 ===========================================================================
IPv4 Route Table =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 192.168.0.0 255.255.255.0 On-link 192.168.0.100 281 192.168.0.100 255.255.255.255 On-link 192.168.0.100 281 192.168.0.255 255.255.255.255 On-link 192.168.0.100 281 =========================================================================
|
可以看到增加了三条。
第一条为子网掩码所配置的二层通信范围。 192.168.0.0/24 (本地子网)。
第二条代表自己配置的IP地址。
第三条为此子网的广播地址。
可以看到第一条路由的网关是on-link,表示都是直达的。二层直接通信的。
什么是二层直接通信
192.168.0.100/24 主机A想要访问主机192.168.0.128/24,会直接发送ARP广播报文,获取到192.168.0.128/24主机B的MAC地址。
(如下图,192.168.0.100/24 主机A发送一条ARP 请求广播报文后,192.168.0.128/24主机B会返回一条单播回复报文。
而此时,主机A知道了主机B的MAC地址,而主机B也知道了主机A的MAC地址。)
而当双方互相知道对方的MAC之后,就可以发送正式的IP报文了,其中源MAC为发送网卡的MAC地址,目的MAC为对方IP对应的MAC地址。
(如下图,二层通信不会更改源目MAC地址)
子网掩码有什么意义?
正规的讲子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
意义
有什么意义吗?意义就是划定二层通信的范围,这个范围包括其他主机或三层网关。
如果错误的设定过大或过小会怎么样?
如果过小,就无法访问到正确的网关,或与子网内的其他主机进行通信。
如果过大,就会导致子网划分范围内的IP地址,都通过二层通信访问,而不是扔给网关。
但如果要访问的主机没有在一个广播域,需要通过网关访问,那就会无法互相通信。
默认网关
如下面所示,我增加一个网关 192.168.0.1
1 2 3 4 5 6 7 8 9 10 11 12
| C:\Users\admin>ipconfig
Windows IP Configuration
Ethernet adapter Ethernet0:
Connection-specific DNS Suffix . : IPv4 Address. . . . . . . . . . . : 192.168.0.100 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.0.1
|
路由条目如下,只增加一条 0.0.0.0/0 的路由指向我所配置的网关IP。
这代表了,除了子网范围的IP通讯,都要扔向网关。
为什么0.0.0.0/0 匹配了所有路由,子网范围的通讯不受其影响呢?
因为有子网掩码最长匹配原则,而/24,明显比/0长。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| C:\Users\admin>route -4 print 0.0.0.0 =========================================================================== Interface List 15...00 0c 29 35 f6 ba ......Intel(R) 82574L Gigabit Network Connection 1...........................Software Loopback Interface 1 ===========================================================================
IPv4 Route Table =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.0.2 192.168.0.100 281 =========================================================================== Persistent Routes: Network Address Netmask Gateway Address Metric 0.0.0.0 0.0.0.0 192.168.0.2 Default ===========================================================================
|
当我访问一个不在子网范围的IP会发生什么呢?
我去Ping 114.114.114.114,很明显IP通讯会扔向默认网关。
但目的的MAC地址写什么呢? 写网关的MAC地址(00:50:56:f6:76:d6)。也是通过ARP报文获取的
Ping 产生的ICMP报文抓取
可以看到上图中,Ping 114.114.114的目的MAC地址,是网关的MAC地址。
而源目IP都和网关无关,三层通讯是不会更改IP地址的。但路由器与路由器之间转发会更改MAC地址 (NAT会)
三层通讯也不需要知道目标IP的MAC地址。
主机与网关之间是二层通讯。
网关的意义?
在TCP/IP网络体系中,网关的基本作用是根据目的IP地址的网络号与子网号,选择最佳的出口对IP分组进行转发,实现跨网段的数据通信。
但在上面抓包中,网关貌似只是为了获取网关接口的MAC地址?
正常跨网段的通信好像和网关的IP地址无关?
那网关本身不能对外通讯可以吗?
可以的,有些时候为了节省公网IP,可以配置一个假网关。这个假网关的IP可能在其他子网在使用。
这样做有什么问题吗?
会有问题,会导致使用假网关的子网内主机,访问不到假网关占用的IP。(和所扩大占用的网络位地址和广播地址)
不过问题很小,因为访问的概率很低很低。