11.1 网络基础知识
一台主机需要配置必要的网络信息,才可以连接到互联网。需要的配置网络信息包括IP,子网掩码,网关和DNS。
11.1.1 IP地址
在计算机中对IP的标记使用的是32bit的二进制,例如,
shell
11000000 10101000 00011010 01100100
这里共有32位由1和0的组合的二进制数字,这样的地址对于人类来说并不好记忆,所以用3个点把这32位的二进制隔成4个部分,每个部分8个二进制数字。
shell
11000000 .10101000 .00011010 .01100100
然后我们把每个部分的二进制转换成十进制之后,IP的格式就是下面这个样子的了:
shell
192.168.26.100
这种对IP的表示方法叫作"点分十进制"。
如同我们的电话号码由"区号+电话号码"组成,例如,下面两个电话号码01088888888和02188888888,一看这个号码我们就知道01088888888是北京的电话号码,02188888888是上海的电话号码。因为不同的城市都有自己的区号,所以不同的城市即使电话号码一样也不会冲突,因为区号不一样。
同理,对于一个IP地址来说也是分成两个部分,一个网络位一个是主机位。对于电话号码来说,我们能一眼判断出来哪个是区号,哪个是电话号,但是对于IP来说(如192.168.26.100),哪些是网络位哪些是主机位呢?这时就需要用到子网掩码了。
子网掩码是用来标记一个IP里面哪些是主机位,哪些是网络位的。例如,看一个二进制类型的IP地址,共写了两行。
shell
11000000 10101000 00011010 01100100
11111111 11111111 11111111 00000000
第一行是IP地址,第二行是子网掩码,两者都是二进制格式的。需要注意的是,第二行子网掩码的格式是连续的1和连续的0组成。
子网掩码为1的那部分,对应IP地址的网络位部分,子网掩码为0的部分,对应IP地址的主机位部分。对二者分别用3个点隔成4个部分,变成如下内容。
shell
11000000 .10101000. 00011010. 01100100
11111111 .11111111 .11111111 .00000000
再次分别转换成10进制,得到的结果是:
shell
192.168.26.100
255.255.255.0
所以,我们表示一个IP地址,具体的就是192.168.26.100/255.255.255.0或写成192.168.26.100/24,这里24表示子网掩码中有24个1,即前24位都是网络位。
11.1.2网关
我们把一个网络中的网关理解为一个城市中的高铁站,如果我们想从一个城市去往另外一个城市,需要先到高铁站,坐上高铁之后,高铁会把我们送往另外的一个城市。同样的到底,如果一个网络中的主机发送一个数据包要去往另外一个网络,则需要先把这个数据包发送到网关,然后由网关把这个数据包转发到另外一个网络。
所以,如果我们如果没有给一台机器配置网关,则这台机器的数据包是不能和其他网络的主机进行通信的,只能和他同一个网段的数据包通信。
注意:给机器配置的IP和网关必须要是属于同一个网段的。在我们的练习环境中,本书所使用的网段是192.168.26.0/24网段,我们需要把网关设置为192.168.26.2。如果读者所使用的网络是192.168.X.0/24网段,则需要把网关设置为192.168.26.X.2,这里的X是一个数字。
11.1.3 DNS
两台主机通信时依赖的是IP,但是IP地址并不好记忆,不如主机名好记,例如,www.rhce.cc这样,再如,www.baidu.com这样。但是我们说两台主机通信依赖的是IP,但是我们访问www.rhce.cc时,这是主机名不是IP,那么是怎么通信的呢?这里就要用到dns了。
DNS服务器的主要作用是用于做域名解析的,可以把主机名解析成IP地址,所以我们需要给系统指定DNS服务器。当我们指定了DNS服务器地址之后,我们在浏览器中输入"www.rhce.cc"时,系统会向dns服务器查询www.rhce.cc的IP,然后再通过这个IP来访问。
在我们练习环境中,本书所使用的网段是192.168.26.0/24网段,我们需要把DNS设置为192.168.26.2。如果读者所使用的网络是192.168.X.0/24网段,则需要把DNS设置为192.168.26.X.2,这里的X是一个数字。
下面我们开始讲解如何查看这些网络信息,以及如何配置这些网络信息。
11.2 查看网络信息
查看IP信息可以通过ifconfig命令,命令如下所示。
shell
[root@server ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.26.130 netmask 255.255.255.0 broadcast 192.168.26.255
inet6 fe80::20c:29ff:fec4:5b02 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:c4:5b:02 txqueuelen 1000 (Ethernet)
RX packets 34942 bytes 5009818 (4.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 25451 bytes 2424735 (2.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
...输出...
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 52:54:00:b2:c1:98 txqueuelen 1000 (Ethernet)
...输出...
[root@server ~]#
这里查看的是所有活跃网卡的信息,如果想查看不管活跃还是不活跃网卡的信息可以通过ifconfig -a查看。这里ens160是网卡名,如果只想查看某张网卡的信息,可以通过"ifconfig 网卡名"来查看,例如,只查看ens160的网络信息,命令如下所示。
shell
[root@server ~]# ifconfig ens160
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.26.130 netmask 255.255.255.0 broadcast 192.168.26.255
inet6 fe80::20c:29ff:fec4:5b02 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:c4:5b:02 txqueuelen 1000 (Ethernet)
RX packets 35037 bytes 5022038 (4.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 25564 bytes 2439402 (2.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@server ~]#
这里inet 后面跟的是此网卡的IP,ether后面跟的是此网卡的MAC地址。
也可以通过"ip address show 网卡名"来查看,例如,查看ens160的网络信息,命令如下所示。
shell
[root@server ~]# ip address show ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:c4:5b:02 brd ff:ff:ff:ff:ff:ff
inet 192.168.26.130/24 brd 192.168.26.255 scope global dynamic noprefixroute ens160
valid_lft 1537sec preferred_lft 1537sec
inet6 fe80::20c:29ff:fec4:5b02/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@server ~]#
这里address可以简写为addr或a,show可以简写为sh。
如果要查看所有网卡的信息,可以写为"ip a"。如果网卡ens160上配置了多个IP,通过ifconfig ens160命令只能看到一个IP,如果要看到所有的IP可以通过ip address show ens160才可以。
查看网关可以通过route -n命令,这里-n的意思是为了防止反向解析,即防止把IP解析成主机名,命令如下所示。
shell
[root@server ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.26.2 0.0.0.0 UG 100 0 0 ens160
192.168.26.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
[root@server ~]#
这里可以看到,网关是192.168.26.2。
查看DNS,所使用的dns记录在/etc/resolv.conf中。
shell
[root@server ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain rhce.cc
nameserver 192.168.26.2
[root@server ~]#
在nameserver后面指定的就是当前默认使用的dns。
为了好理解,这里我们举个例子。我们在一张标签上写上IP、子网掩码、网关、DNS等信息,然后把这个标签贴到网卡上,那么这张网卡就有了这些网络信息了,如图11-1所示。
这个标签就叫作连接(connection),给网卡配置IP,只要给这个网卡建立一个连接就可以了。
通过nmcli connection 或简写为nmcli conn查看当前连接,命令如下所示。
shell
[root@server ~]# nmcli connection
NAME UUID TYPE DEVICE
ens160 935ffc86-d4ce-465e-a32a-7d5aec8a9771 ethernet ens160
[root@server ~]#
这里DEVICE所对应的是网卡名,NAME对应的是连接名。整句的意思就是网卡ens160存在了一个连接,名称叫作ens160。
查看连接的具体属性,可以通过"nmcli conn show 连接名"来查看。
下面查看ens160属性中和iPv4相关的条目,命令如下所示。
shell
[root@server ~]# nmcli connection show ens160 | grep ipv4
ipv4.method: auto
ipv4.dns: --
...输出...
ipv4.dhcp-reject-servers: --
[root@server ~]#
这里可以看到,ens160获取IP的方式是DHCP。
因为我们要练习创建连接,所以这里先把此连接删除。
shell
[root@server ~]# nmcli connection delete ens160
成功删除连接 "ens160" (935ffc86-d4ce-465e-a32a-7d5aec8a9771)。
[root@server ~]#
这里已经查看到了相关的网络信息了,如果要配置IP、网关、DNS等网络信息呢?下面我们来分别来讲解如何通过图形化的方式、修改配置文件的方式、命令行的方式来配置网络信息。
11.3 图形化界面修改
在root用户或者普通用户下执行nm-connection-editor。
shell
[root@server ~]# nm-connection-editor
[1] 45012
[root@server ~]#
即可打开【网络连接】图形化界面窗口,这个窗口显示了当前具有的连接,单击左下角的【+】按钮,添加一个连接。
在【选择连接类型】对话框中选择"以太网",单击【创建】按钮,如图11-3所示。
打开【编辑ens160】对话框,在【常规】选项卡下的【连接名称】文本框中输入"ens160",这个是创建连接的名称,名称可以随意取,不必和网卡名一致。在常规中,选中【自动以优先级连接】复选框,然后选择【以太网】选项卡,如图11-4所示。
在【设备】下拉列表中选择"ens160",意思就是为网卡ens160创建一个连接,名称为ens160。选择【IPv4设置】选项卡,如图11-5所示。
这里设置的是连接ens160是通过什么方式获取IP,可以是手动设置也可以通过DHCP获取。在【方法】下拉列表中选择"手动",单击下面的【添加】按钮,输入IP地址、子网掩码、网关、DNS等。然后单击右下角的【保存】按钮,如图11-6所示。
如果要为ens160配置第二个IP,点击图11-6右侧的添加,然后输入IP即可。之后就可以看到已经创建了一个连接ens160,如图11-7所示。
在另外的一个终端中,输入"ifconfig ens160",如下所示。
shell
[lduan@server ~]$ ifconfig ens160
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.26.100 netmask 255.255.255.0 broadcast 192.168.26.255
inet6 fe80::5cea:baf4:d0a6:930b prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:c4:5b:02 txqueuelen 1000 (Ethernet)
RX packets 41293 bytes 7450588 (7.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 29131 bytes 2651574 (2.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[lduan@server ~]$
可以看到,这里的IP为192.168.26.100,就是我们刚刚设置的IP。
也可以通过查看连接ens160的属性也能看到IP信息。
shell
[lduan@server ~]$ nmcli connection show ens160 | grep ipv4
ipv4.method: manual
ipv4.dns: 192.168.26.2
ipv4.dns-search: --
ipv4.dns-options: --
ipv4.dns-priority: 0
ipv4.addresses: 192.168.26.100/24
ipv4.gateway: 192.168.26.2
...输出...
[lduan@server ~]$
这里可以看到,IP、网关、DNS等信息。
因为这个连接是新创建的,所以创建好之后是可以立即生效。
下面介绍如何修改已经存在连接的IP。
选中"ens160",单击下方的齿轮按钮,如图11-8所示。
单击【IPv4设置】选项卡,将IP地址设置为192.168.26.101,单击【保存】按钮,如图11-9所示。
在终端中查看ens160的IP。
lduan@server \~\]$ ifconfig ens160
```shell
ens160: flags=4163