介绍

本文简单介绍了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。(和所扩大占用的网络位地址和广播地址)
不过问题很小,因为访问的概率很低很低。