前言
不管你是从事研发、网络、运维等相关工作,我相信大家和我都有这样一个疑问,就是我们在对服务器配置静态 IP 时为什么要配置网关地址吗?我想大家都会说,网关不就是网络的出口吗,肯定要配置啊,要不然怎么上网。其实这个说法没错,但很多人都只是片面的文字上的理解,却不清楚其真正的作用。接下来,聊聊我对网关地址的理解。
计算网络体系结构
搞懂这个问题之前,首先明确计算机网络体系结构的概念,即著名的开放式互联基本参考模型(OSI/RM)
,我相信这是各位每次去面试都必问的。这个体系结构理论是成功的,但实践是失败的,因为现如今规模最大的、基于 TCP/IP 的互联网并未使用 OSI 标准,因为 OSI 协议实现过于复杂、标准的定义周期长,且层次划分不太合理。因此,目前使用的都是基于 TCP/IP 的五层协议,严格意义上来说,TCP/IP 协议只有四层,但在计算机网络理论学习中,往往综合 OSI 和 TCP/IP 的优点,采用了五层协议的体系结构。
物理层 => 链路层 => 网络层 => 运输层 => 应用层
而我们今天的主题“网关”的配置就应用到了网络层这个知识点,首先网络层有 IP 协议、ICMP 协议和 ARP 等协议。ARP 协议
就是我们今天的主角,即地址解析协议。
这里可能又会有朋友有疑问, ARP 不是链路层的协议吗?严格意义上来讲是网络层的协议,之所以大家的认知都是链路层,是因为 ARP 协议的用途是为了从网络层使用的 IP 地址,解析出在链路层使用的 MAC 地址,因此某些教科书按照协议的用途,就把 ARP 协议划在了数据链路层。
ARP 协议在通信中的作用
假设主机 A 向主机 B 发送一个报文,且主机 A、B 处于不同的网络。那报文就会经历分段、分组、成帧,从离散信号到连续信号的过程,最终将数据报发送给主机 B。那我们知道,如果是处于通过以太网下,主机 A 向 B 发送数据时,直接通过 ARP 地址解析协议,以广播的形式发送 ARP 分组(广播内容可通俗地理解为:谁是 IP 地址为X.X.X.X
的设备?请告诉我你的 MAC 地址。),获得同个以太网下主机 B 的单播 ARP 响应,并获取到主机 B 的 MAC 地址,最终 A 主机就在其 ARP 高速缓存中写入主机 B 的 IP 地址到硬件地址的映射。而我们刚刚提到的“成帧”,就是 ARP 协议获取 IP 数据报中的 IP 地址,并解析出将要在数据链路层中使用到的 MAC 地址,然后在链路层通过加头加尾,头部信息就包含了 MAC 地址,最终“成帧”,最终这个数据帧就会在相邻两个节点直接进行转发了。
到这里似乎都很正常,感觉和我们的标题没多大关系。但大家有没有想过一个问题,如果 AB 主机不再同一个以太网下,如果在 ARP 广播的时候,是无法获取到 B 主机的 MAC 地址的,那我们是怎么解决的呢?答案就是主机 A 通过配置网关地址实现的。
给一段假设为 A 主机的静态 IP 配置示例:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens192
UUID=c4dc99e5-af15-466a-9f8a-4e171835ba78
DEVICE=ens192
ONBOOT=yes
IPADDR=192.168.1.16
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=61.139.2.69
其中 GATEWAY=192.168.1.1
就是我们配置的网关地址,这个网关的作用就是在主机 A 无法直接找到目标主机 B 的 IP 地址时,负责将数据包转发到这个 192.168.1.1
,因为默认网关的 IP 地址通常与主机 A 处于同一个局域网,当然,默认网关的 IP 地址对应的设备(通常就是我们的路由器)有一个MAC地址,主机 A 需要知道它才能将数据发送给路由器。
例如,当主机 A 发送 ARP 请求寻找 172.16.11.19
时,局域网内的其他设备会检查自己的 IP 地址。如果没有设备的 IP 地址匹配172.16.11.19
,目标地址就被视为不在本地网络。此时,主机 A 会将目标地址的数据包交给默认网关(路由器),由它负责转发。
因此,我们配置静态 IP 时,必须配置网关地址(DHCP 除外),否则就不能与不在本地网络的其他主机进行通信。
–END