一文解析局域网工作机制和网络地址配置

本篇博文将通过解析局域网的工作机制,以及如何进行局域网的网络地址配置,以掌握局域网组网方法,实现服务器集群/分布式集群环境的搭建。

更多系列博文:

网站基础之 URL 结构解析

一文解析局域网工作机制和网络地址配置

一文解析基于局域网工作模式的虚拟机网络配置

一文解析服务器域名无法解析 && 连接超时 && 访问受限问题

一文解析网络中的 IP 唯一性

如果文中有表述不正确的地方,望各位大佬不吝指正~~~


局域网工作机制

↓↓↓↓↓↓ 实际场景描述 ↓↓↓↓↓↓

工作中,通常会分配给你一台 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.0192.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
2
3
4
5
6
7
8
# Microsoft
4.2.2.1

# Google
8.8.8.8

# China
114.114.114.114

| ================================================== Split Line =============================================== |

最后,来看一下 Server 01 完整的网络配置:

1
2
3
4
IP=192.168.33.2
NETMASK=255.255.255.0
GATEWAY=192.168.33.1
DNS=192.168.33.1

同理,我们可以给出 Server 02 && Server 03 的网络配置(只修改 IP 即可):

1
2
3
4
5
6
7
8
9
10
11
12
# Server 02
IP=192.168.33.3
NETMASK=255.255.255.0
GATEWAY=192.168.33.1
DNS=192.168.33.1


# Server 03
IP=192.168.33.4
NETMASK=255.255.255.0
GATEWAY=192.168.33.1
DNS=192.168.33.1

域名解析和主机名映射

这一小节来看何为域名?!!何为 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost

# GitHub Start
140.82.113.3 Build software better, together
140.82.113.4 gist.github.com
185.199.108.133 assets-cdn.github.com
185.199.108.133 raw.githubusercontent.com
185.199.108.133 gist.githubusercontent.com
185.199.108.133 cloud.githubusercontent.com
185.199.108.133 camo.githubusercontent.com
185.199.108.133 avatars0.githubusercontent.com
185.199.108.133 avatars1.githubusercontent.com
185.199.108.133 avatars2.githubusercontent.com
185.199.108.133 avatars3.githubusercontent.com
185.199.108.133 avatars4.githubusercontent.com
185.199.108.133 avatars5.githubusercontent.com
185.199.108.133 avatars6.githubusercontent.com
185.199.108.133 avatars7.githubusercontent.com
185.199.108.133 Build software better, together
# GitHub End

也就是说,当我们访问后面的域名时,网关会拿着域名前面的 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
2
3
192.168.33.2 server01
192.168.33.2 server02
192.168.33.3 server03

此时,在 Server 01 服务器上,通过主机名 server02 访问 Server 02 已经通了。

并且,想要让所有服务器都能通过主机名访问局域网内的其它 Server,所有服务器都要配置。否则产生错误:

1
Unknown host

Author

Waldeinsamkeit

Posted on

2015-04-12

Updated on

2024-03-06

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.