一文解析局域网工作机制和网络地址配置
本篇博文将通过解析局域网的工作机制,以及如何进行局域网的网络地址配置,以掌握局域网组网方法,实现服务器集群/分布式集群环境的搭建。
更多系列博文:
一文解析服务器域名无法解析 && 连接超时 && 访问受限问题
如果文中有表述不正确的地方,望各位大佬不吝指正~~~
局域网工作机制
↓↓↓↓↓↓ 实际场景描述 ↓↓↓↓↓↓
工作中,通常会分配给你一台 PC 机器用于日常的开发工作,开发完成后你需要将代码上传至本地服务器(Servers)环境中进行运行测试和发布,PC 和这些 Servers 就共同组成一个局域网环境,共用公司网络部门分配的网段 IP 资源(内网 IP)。这个局域网环境通常是对外网隔离的,如果你的项目要求访问外网,可能还会给你分配一台代理服务器用于对外访问。
家庭中上网常常是添加一个无线路由器,其它设备(PC/手机/其它移动设备)通过登录路由器来实现 Wifi 上网,所有登录到路由上的设备(动态获得 IP)同样组成了一个家庭局域网。
那么,局域网的工作机制到底是什么样的?!!局域网内的终端设备是否支持互相访问?!!又是如何进行相互访问的?!!
| ================================================== Split Line =============================================== |
思考家庭或公司局域网模式,以探究局域网工作模式。这里先给出本章节最终的局域网工作机制示意图:
关于硬件设备说明
假设目前我们有一台个人 PC,以及三台空闲服务器(Server 01 & Server 02 && Server 03),那么如何让其进行协作,并且具有上网功能呢?!!
需要有一台路由器(交换机/网桥/网关),它提供有多个 LAN 口,以支持通过物理网线连接所有的终端设备。并且,所有的终端设备都至少有一块物理网卡以支持 TCP/IP 网络通信。
如果你想要上网(访问 Internet),你还需要一条宽带以支持路由访问外部网路。
| ================================================== Split Line =============================================== |
关于软件描述
我们的个人 PC 上使用的是 Windows 操作系统,而三台 Server 上安装了 Linux CentOS7。
想要连网以及支持相互访问操作,CentOS 操作系统需要进行一定的网络配置,也就是配置网卡(网络接口卡,NIC)的 TCI/IP 信息,其涉及到:
- IP:IP 地址;
- NETMASK:子网掩码;
- GATEWAY:网关;
- DNS:DNS 解析服务器地址;
- HWADDR:物理(Mac)地址 <<< 物理自带,不需要配置
PC 上的 Windows 默认采用 DHCP 动态上网的方式(CentOS 也可以采用 DHCP 的上网方式),当然你也可以采用 CentOS 配置网卡(网络接口卡,NIC)的 TCI/IP 信息的方法,为 Windows 的网络适配器进行配置,以获取固定 IP。
NIC 网络配置
以 CentOS Server 01 的网络配置为例,讲解如何配置网卡的 IP && NETMASK && GATEWAY && DNS。
Begin
……
| ================================================== Split Line =============================================== |
配置 IP 地址
IP 地址如何配?!!
随便定一个:192.168.0.1 或者 192.168.0.2 或者 192.168.0.3/....
可以么?!!
不行的~~~
事实上,IP 地址的配置不是由当前 Server 决定的,而是由其连接的网关决定的(路由/交换机,均是网关)!!!
| ================================================== Split Line =============================================== |
↓↓↓↓↓↓ 网关 IP 地址 ↓↓↓↓↓↓
网关自身有一个 IP 地址,例如路由器底部有一个默认地址(我这里是 192.168.33.1
,通过在浏览器中输入该地址可以登入路由器进行路由的相关设置),这就是路由器默认网关 IP 地址。
| ================================================== Split Line =============================================== |
假设网关的 IP 地址是 192.168.33.1
,那么 Server 01 中网卡的 IP 地址可以设置为:
1 | 192.168.33.2 ~ 192.168.33.254 |
↓↓↓↓↓↓ 为什么是 2~254
?!! ↓↓↓↓↓↓
事实上,IP 地址本质是一个 32 bit 的二进制数,但通常会使用 “点式十进制” 来表示(每 8 bit 分隔一下,最大表示 255)。
↓↓↓↓↓↓ 关于网段和其广播地址 ↓↓↓↓↓↓
你可能会疑惑 >>> 192.168.33.0
和 192.168.33.255
这两个地址不能用么?!!确实如此:
192.168.33.0
被用来标识 “网段” 了(192.168.33.2 ~ 192.168.33.254
);192.168.33.255
被用来标识广播地址了(如果向该地址发送信息,则会向整个网段发送信息)。
需要注意的是 >>> 网关 IP 地址可以为网段中的任意 IP(如:
192.168.33.3
),只是约定俗成的采用第一个 IP(192.168.33.1
)来作为网关 IP。网段中某个 IP 一旦被网关使用后,同一局域网中的其它设备只可以使用网段 IP 资源池中的其它 IP 了。
关于 IP 地址更为深入的了解,可以参考系列博文【一文解析网络中的 IP 唯一性】。
配置 NETMASK
NETMASK,是指子网掩码,常见的有 255.255.255.0
&& 255.255.0.0
,也采用 “点式十进制” 表示。
NETMASK 可以用来限制网段中 IP 资源数量的。
你可以通过计算 NETMASK 和网关 IP 的与(&)操作,来获取当前网关 IP 所支持的网段(IP 资源池):
1 | IP 地址的二进制 & NETMASK 的二进制 = 网段地址 |
以网关 IP:192.168.33.1
和 NETMASK:255.255.255.0
为例:
1 | 192.168.33.2 & 255.255.255.0 = 192.168.33.0 |
任意设备的 IP 地址和其子网掩码的与(&)操作,可以查看其所属的网段。如果两个 IP 地址的网段相同,我们就说这两台机器属于同一个网段。
| ================================================== Split Line =============================================== |
↓↓↓↓↓↓ 限制网段中 IP 资源数量的?!! ↓↓↓↓↓↓
再看一下网关 IP:192.168.33.1
和 NETMASK:255.255.0.0
的与(&)操作:
1 | 192.168.33.2 & 255.255.0.0 = 192.168.0.0 |
此时,网关 IP 所支持的网段:192.168.0.0 ~ 192.168.255.255
,当前网段的 IP 资源池更大,可分配更多的 IP 给网络中的设备。
配置 GATEWAY
GATEWAY,是指网络的总入口/出口,就是指的网关!!!故:
1 | GATEWAY=192.168.33.1 |
设置了网关(GATEWAY)和子网掩码(NETMASK),就确定了网段(IP 资源池),然后想要连网的设备就可以从网段中选择 IP 了。
配置 DNS
DNS,是指域名解析服务器,配置 DNS 就是配置 域名解析服务器的地址。
服务器好理解,何为域名解析呢?!!
由于篇幅原因,关于域名解析的流程可以参见后文【域名解析和主机名映射】章节中,关于【域名解析工作流程】的描述。
……
阅读完后,你应该知道了:
DNS 可以配置为当前网络服务商提供的 DNS 服务器地址。
如果你不知道的话,可以配置为网关的地址(网关知道哪里去找 DNS 服务器):
1 | DNS=192.168.33.1 |
除此之外,你还可以将其配置为第三方提供的 DNS 解析服务器地址:
1 | # Microsoft |
| ================================================== Split Line =============================================== |
最后,来看一下 Server 01 完整的网络配置:
1 | IP=192.168.33.2 |
同理,我们可以给出 Server 02 && Server 03 的网络配置(只修改 IP 即可):
1 | # Server 02 |
域名解析和主机名映射
这一小节来看何为域名?!!何为 DNS 服务器?!!何为域名解析?!!如何进行主机名映射,以支持 Server 间通过服务器名进行访问。
| ================================================== Split Line =============================================== |
域名解析工作流程
先给出域名解析工作流程示意图,对照该示意图完成这一小节内容的阅读:
[1] >>> 关于域名
域名,即服务器 IP 地址的别名,而 IP 地址用来唯一标识互联网上的设备。
关于域名的说明,可以参见【网站基础之 URL 结构解析】>>>【URL 标准语法】>>>【Domain】中关于域名的描述。
[2] >>> 关于域名解析
而,域名解析就是 >>> 服务器通过域名(Domain)访问互联网上的某个 Web Server 时,必须拿到域名对应的 IP 地址(域名解析),然后再通过 IP 地址请求服务器上的文件。
| ================================================== Split Line =============================================== |
[3] >>> 关于 DNS 服务器
我们知道,域名解析就是获取域名对应的 IP 地址的过程。
当路由/网关,检测到一个域名请求时(例如访问:www.baidu.com
),会拿着域名去网络服务商(移动/电信/联通)或设置的第三方(Google、Baidu…)提供的 DNS 服务器(支持 域名 --> IP
映射解析服务)上获取域名所对应的 IP。故,用于解析域名的 DNS 服务器,也被称为:域名解析服务器。
网关是知道去哪里找域名服务器的!!!
↓↓↓↓↓↓ 关于域名注册 ↓↓↓↓↓↓
如果你自己随便定义了一个域名(server01.com
)是没卵用的,公网上是访问不了的,因为没有一个 DNS 服务器能解析你的域名。此时需要去注册你定义的域名,目的是为了将你的域名写入到公网上的 DNS 服务器上,你的域名在网络上就生效了。
| ================================================== Split Line =============================================== |
[4] >>> 关于域名/主机名映射文件
而根据 Windows/Linux 系统规定,在进行 DNS 请求以前,Windows/Linux 系统会先检查自己的 hosts 文件(域名/主机名映射文件)中是否有当前网络域名的映射关系(”域名 –> IP” 的映射,例如:140.82.113.3 github.com
)。
如果有,则调用这个 IP 地址映射;如果没有,再向网络运营商或已设置的 DNS 服务器提出域名解析获取 IP 地址。
也就是说, hosts 的请求级别比 DNS 高!!!
域名/主机名映射文件
hosts 文件,被称为:域名/主机名映射文件。
hosts 文件采用 ascii 编码方式,没有后缀名的!!!你可以使用任意一款文本编辑器打开修改它。
Windows 中 hosts 文件的位置: C:\windows\system32\drivers\etc\hosts
,Linux 中 hosts 文件的位置: /etc/hosts
。
👇👇👇 关于域名映射 👇👇👇
打开 Windows 中的 hosts 文件观察一下:
1 | # Copyright (c) 1993-2009 Microsoft Corp. |
也就是说,当我们访问后面的域名时,网关会拿着域名前面的 IP 去访问 Web Server。
| ================================================== Split Line =============================================== |
↓↓↓↓↓↓ hosts 文件的域名映射记录如何写 ↓↓↓↓↓↓
- IP 地址与域名间至少要有一空格;
- 最后一行书写域名映射时,一定要加上回车再保存以避免最后一行不生效;
- 注释:如果某条映射记录暂时不用,只需要在它前面加一个
#
号即可。
以 Github 域名映射为例,其域名映射记录为:
1 | 140.82.113.3 github.com |
表示访问 https://github.com
这个网址时,将解析到 64.233.162.83
这个 IP 上。
关于域名所对应的 IP,你可以通过访问站点 |>>>> Ipaddress <<<<| 进行获取:
找到【Domain 搜索框】 >>> 输入待查询域名【github.com】>>> 确认【Enter】>>> 页面中 DNS Resource Records 中记录的就是域名对应的 IP(可能有多个)
| ================================================== Split Line =============================================== |
↓↓↓↓↓↓ 使用场景 ↓↓↓↓↓↓
如果你的网络运营商 DNS 屏蔽/限制了对某个域名(如 github.com
)的访问,你可以通过 Ipaddress 工具获取其 IP 地址,借此 IP 绕开网络运营商 DNS 限制,直接通过 IP 地址访问目标服务器。
更多应用,可以参见【一文解析服务器域名无法解析 && 连接超时 && 访问受限问题】这里。
👇👇👇 关于主机名映射 👇👇👇
当局域网中的 Server 较多时,通过 IP 访问极不方便,使用主机名(Hostname)更好记一些。
既然域名和 IP 可以映射,那服务器主机名和 IP 是否也可以映射?!!
也是可以的~~~
类似于域名映射 >>> 直接将域名替换为主机名,IP 地址修改为主机所设定的 IP 地址,即可建立起 主机名 --> IP
的映射关系(一个 IP 地址可以指向多个主机名和域名)。
以 Server 01 服务器配置为例:
1 | 192.168.33.2 server01 |
此时,在 Server 01 服务器上,通过主机名 server02
访问 Server 02 已经通了。
并且,想要让所有服务器都能通过主机名访问局域网内的其它 Server,所有服务器都要配置。否则产生错误:
1 | Unknown host |
install_url
to use ShareThis. Please set it in _config.yml
.