# 6.Linux 系统网络配置

# 1. 网络协议介绍

1.1 网络协议的概念
网络协议是网络上所有设备 (网络服务器、计算机及交换机、路由器、防火墙等) 之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。大多数网络都采用分层的体系结构,每一层都建立在它的下层之上,向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。

1.2 TCP/IP 协议
TCP/IP 字面上代表了两个协议:TCP(传输控制协议)和 IP(网际协议)。1983 年 1 月 1 日,在因特网的前身(ARPA 网)中,TCP/IP 协议取代了旧的网络控制协议(NCP, Network Control Protocol),从而成为今天的互联网的基石。

1.3 常见的网络应用协议
HTTP 协议
超文本传输协议(HTTP,HyperText Transfer Protocol):是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。1960 年美国人 Ted Nelson 构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext), 这成为了 HTTP 超文本传输协议标准架构的发展根基。
DNS 协议
DNS 是域名系统 (DomainNameSystem) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的 IP 地址,在 Internet 上域名与 IP 地址之间是一一对应的,DNS 就是进行域名解析的服务器。 DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。DNS 是因特网的一项核心服务,它作为可以将域名和 IP 地址相互映射的一个分布式数据库。
FTP 协议
FTP (File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。 FTP 协议包括两个组成部分,其一为 FTP 服务器,其二为 FTP 客户端。其中 FTP 服务器用来存储文件,用户可以使用 FTP 客户端通过 FTP 协议访问位于 FTP 服务器上的资源。在开发网站的时候,通常利用 FTP 协议把网页或程序传到 Web 服务器上。此外,由于 FTP 传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
Telnet 协议
**Telnet 协议是 TCP/IP 协议族中的一员,是 Internet 远程登陆服务的标准协议和主要方式。** 它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用 telnet 程序,用它连接到服务器。终端使用者可以在 telnet 程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个 telnet 会话,必须输入用户名和密码来登录服务器。 Telnet 是常用的远程控制 Web 服务器的方法。

# 2. 查看 Linux 网络配置

2.1 查看网络接口信息
在 Centos7 中,要查看网络接口的信息,不再使用 ifconfig 命令,而是使用了 ip 命令。 ip 命令用来显示或操纵 Linux 主机的路由、网络设备、策略路由和隧道,是 Linux 下较新的功能强大的网络配置工具。

ip 是 iproute2 软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。
命令格式:
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
常用实例:
ip link show 显示设备属性
ip address show 显示协议地址

centos7 中提供了强大的图形化配置工具,里面有两个命令:nmcli 和 nmtui 。
nmcli:NetworkManageCommandLine Interface
nmtui:NetworkManageTextUser Iterface
1.通过 nmcli d 命令来查看网卡
2.通过 nmtui 命令可以配置网络
3.ip link show 命令
显示出所有可用网络接口的列表(无论接口是否激活)
ip link show up :可以查看激活的接口信息。
ip -s link show 网络接口名称:可以查看更加详细的接口信息。
4.ip addr 命令
ip addr 命令用于获取网卡配置与网络状态等信息。
ip addr 命令是 ip address show 命令简写。
使用 ip addr 命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet 参数后面的 IP 地址、ether 参数后面的网卡物理地址(又称为 MAC 地址):

2.2 查看 DNS 服务器地址
DNS 服务器和域名服务器同义。DNS(Domain Name Server,域名服务器)是进行域名 (domain name) 和与之相对应的 IP 地址 (IP address) 转换的服务器。在 Centos 7 上,需要查看 DNS 服务器地址可以查看 /etc/resolv.conf 文件内容。

2.3 查看本机路由表
使用下面的 route 命令可以查看 Linux 内核路由表。
使用 iproute2 工具包中的 ip route list 也可以查看路由表的内容

2.4 查看主机名称
使用 hostname 命令可以查看当前系统主机名。
如果需要看更详细的信息,可以使用 hostnamectl 命令查看主机信息。

# 3. 网络配置文件介绍

3.1 配置文件介绍
在 RHEL 或者 CentOS 等 Redhat 系的 Linux 系统里,跟网络有关的主要设置文件如下:

位置文件说明
/etc/host.conf配置域名服务客户端的控制文件
/etc/hosts完成主机名映射为 IP 地址的功能
/etc/resolv.conf域名服务客户端的配置文件,用于指定域名服务器位置
/etc/sysconfig/network包含了主机最基本的网络信息,用于系统启动.
/etc/sysconfig/network-script/系统启动时初始化网络的一些信息
/etc/networks完成域名与网络地址的映射
/etc/protocols设定了主机使用的协议以及各个协议的协议号
/etc/services设定主机的不同端口的网络服务

3.2 网络接口配置文件介绍
进入 Linux 环境中,在 /etc/sysconfig/network-scripts/ 目录中有很多跟网络相关的脚本文件,其中就有网络接口配置文件 ifcfg - 网络接口名称。
ifcfg-lo 是环路地址的配置文件
ifup 是开启网络接口的脚本文件
ifdown 是关闭网络接口的脚本文件

打开 /etc/sysconfig/network-scripts/ifcfg-eno** 网络接口配置文件,可以看到里面有许多配置项目。
其他配置项目

代码说明
TYPE设备类型
BOOTPROTO获取 IP 地址的方法。static:静态配置,dhcp:dhcp 协议
DEVICE表示物理设备的名字
IPADDR表示赋给该网卡的 IP 地址
NETMASK表示子网掩码
GATEWAY=表示默认网关
MACADDR=表示指定一个 MAC 地址
USERCTL是否允许非 root 用户控制该设备 yes/no
DNS1表示 DNS 服务器地址
ONBOOT开机启动方式。yes 开机启动,no 开机不启动

3.3 主机名称配置文件介绍
/etc/hostname 文件中放置的是系统的主机名称,默认情况下 Linux 环境的主机名称为 localhost.localdomain。

3.4 地址解析配置文件介绍
/etc/host.conf 是用来配置域名服务客户端的控制文件,主要内容如下:
multi on #允许主机拥有多个 IP 地址
order hosts,bind #主机名解析顺序,即本地解析,DNS 域名解析的顺序
这个文件一般不需要我们修改,默认的解析顺序是本地解析,DNS 服务器解析。也就是说在本系统里对于一个主机名首先进行本地解析,如果本地解析没有,然后进行 DNS 服务器解析。

/etc/hosts 是完成主机名映射为 IP 地址的具体信息文件,主要内容如下:
127.0.0.1 localhost localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
可见,默认的情况是本机 ip 和本机一些主机名的对应关系,第一行是 ipv4 信息,第二行是 ipv6 信息,如果用不上 ipv6 本机解析,一般把该行注释掉。

/etc/resolv.conf 是指定域名解析的 DNS 服务器 IP 等信息的配置文件,配置参数一般接触到的有 4 个:
nameserver 指定 DNS 服务器的 IP 地址
domain 定义本地域名信息
search 定义域名的搜索列表
sortlist 对 gethostbyname 返回的地址进行排序
但是最常用的配置参数是 nameserver,其他的可以不设置,这个参数指定了 DNS 服务器的 IP 地址,如果设置不正确,就无法进行正常的域名解析。

# 4. 临时配置网络信息

4.1 临时配置 IP 地址和子网掩码
使用 ip addr 可以查看网络接口的 IP 地址,也可以临时为网络接口配置一个 IP 地址和子网掩码,具体格式如下:
# ip addr add/del IP地址/掩码 [broadcast 广播地址] dev 网络接口名称
例如:
# ip addr add 192.168.0.1/24 dev ens33 # 设置 ens33 网卡 IP 地址 192.168.0.1
# ip addr del 192.168.0.1/24 dev ens33 # 删除 ens33 网卡 IP 地址 192.168.0.1
在不重启 network 网络服务的基础上,临时 IP 地址和子网掩码是有效的,一旦重启机器或者重启 network 服务,临时配置的设置会清除。可以给网卡配置多个 IP 地址。

4.2 临时配置网关
在网络中,不同网段通信要通过网关,所以网关的设定也很重要,临时设置网关可以使用如下命令:
# ip route add/del default via 网关地址 dev 网络接口名称
配置默认网关:
# ip route list # 查看路由信息
# ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为 192.168.0.254
# ip route del default #删除默认路由

配置某网段网关:
# ip route list # 查看路由信息
# ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 #设置 192.168.4.0 网段的网关为 192.168.0.254, 数据走 eth0 接口
# ip route del 192.168.4.0/24 # 删除 192.168.4.0 网段的网关

# 5. 永久配置网络信息

5.1 永久配置 IP 地址等网络信息
修改网络接口配置文件 /etc/sysconfig/network-scripts/ifcfg-en*** 文件内容,可以把 IPV6 的部分注释掉。

BOOTPROTO=static #开机协议设置为 static
ONBOOT=yes		#设置为开机启动
DNS1=144.144.144.144	#设置主 DNS1 地址
IPADDR=192.168.2.2		#设置固定的 IP 地址
NETMASK=255.255.255.0	#设置子网掩码
GATEWAY=192.168.2.1		#网关

注意:在 Linux 环境中,修改了配置文件,一定要重启相关服务才能生效。在修改了网络接口配置文件后,要重启 network 网络服务。
network 网络服务的设置:
systemctl start network.service 启动 network 网络服务
systemctl restart network.service 重启 network 网络服务
systemctl stop network.service 停止 network 网络服务
systemctl status network.service 查询 network 网络服务状态
ifup 网络接口名称 激活指定的网络接口
ifdown 网络接口名称 禁用指定的网络接口

5.2 永久配置主机名称
使用 hostnamectl 可以查看详细的主机信息,也可以修改主机的名称。使用 hostnamectl set-hostname 命令修改主机名,可永久生效。
除了使用命令来修改主机名称以外,还可以直接修改配置文件 /etc/hostname.

# 6. 网络管理命令

6.1 网络管理命令介绍
计算机网络的主要优点是能够实现资源和信息的共享,并且用户可以远程访问信息。Linux 提供了一组强有力的网络命令来为用户服务,这些工具能够帮助用户登录到远程计算机上、传输文件和执行远程命令等。
ping 查询某个机器是否在工作
netstat 查看网络的状况
nslookup 查询域名和 IP 地址的对应
last 命令和 lastlog 命令查询用户登录信息
traceroute 命令用来检测传输的路径

6.2 ping 命令
ping 命令的全称是 Packet Internet Grope,即因特网包探索器。Ping 在网络中使用很广泛,一般用来测试源主机到目的主机网络的连通性。
当网络不通时,一般可以通过该命令来检查和判断网络出现故障的原因。Ping 命令通过调用 ICMP (因特网控制报文协议),发送一份 ICMP 回显请求报文给目的主机,并等待返回 ICMP 回显应答。
命令格式: ping(选项)(参数)
常用选项:
-c <完成次数>:设置完成要求回应的次数;
-v:详细显示指令的执行过程。
-s <数据包大小>:设置数据包的大小;
-t <存活数值>:设置存活数值 TTL 的大小;
注意:在 linux 环境中,ping 命令如果不附加 - c 选项会一直发数据包进行测试。

6.3 netstat 命令和 ss 命令
Netstat 是一个监控 TCP/IP 网络的非常有用的工具,它可以显示路由表、实际的 TCP 网络连接,TCP 和 UDP 监听,进程内存管理以及每一个网络接口设备的状态信息。Netstat 用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况,让用户得知有哪些网络连接正在运作。
注意:最小化安装 centos7 需要安装 net-tools 软件包才能使用 netstat 命令。

netstat 命令
命令格式: netstat [选项] [参数]
常用选项:
-a (all) 显示所有选项,netstat 默认不显示 LISTEN 相关
- s 按各个协议进行统计
- n 拒绝显示别名,能显示数字的全部转化成数字。
-t (tcp) 仅显示 tcp 相关选项 - u (udp) 仅显示 udp 相关选项
- l 仅列出有在 Listen (监听) 的服務状态
- p 显示建立相关链接的程序名 (macOS 中表示协议 - p protocol)
-c 每隔一个固定时间,执行该 netstat 命令。
例子:
显示所有协议内容: netstat -anp
列出所有端口: netstat -a
列出所有 tcp 端口: netstat -at
列出所有 udp 端口: netstat -au
只显示监听端口: netstat -l
只列出所有监听 tcp 端口: netstat -lt
只列出所有监听 udp 端口: netstat -lu
只列出所有监听 UNIX 端口: netstat -lx
显示每个协议的统计信息: netstat -s
显示 PID 和进程名称: netstat -pt
显示核心路由信息: netstat -rn
找出运行在指定端口的进程: netstat -an | grep “:22”
显示网络接口列表: netstat -i

ss 命令
ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息,它可以显示和 netstat 类似的内容。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快速更高效。
命令格式: ss [参数] [过滤]
常用选项:
-V, --version 程序版本信息
- o, --options 显示计时器信息
- n, --numeric 不解析服务名称
- e, --extended 显示详细的套接字(sockets)信息
- r, --resolve 解析主机名
- m, --memory 显示套接字(socket)的内存使用情况
- a, --all 显示所有套接字(sockets)
-p, --processes 显示使用套接字(socket)的进程
- t, --tcp 仅显示 TCP 套接字(sockets)
-i, --info 显示 TCP 内部信息
例子:
显示 TCP 连接:ss -t -a
列出所有打开的网络连接端口:ss -l
查看进程使用的 socket:ss -pl
显示所有 UDP Sockets: ss -u -a
匹配远程地址和端口号:ss dst ADDRESS_PATTERN
匹配本地地址和端口号:ss src ADDRESS_PATTERN

6.4 last 命令和 lastlog 命令
last 命令:查看目前和过去的用户登录信息
lastlog 命令:只显示用户最后登录信息

6.5 traceroute 命令
traceroute 命令用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是 40 字节。通过 traceroute 我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地 (destination) 走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
语法格式: traceroute(选项)(参数)

-->