Linux 网络管理

Linux网络管理与配置详解

网络模型及IP地址

OSI模型将网络分为7层进行解释,从下至上依次为:

  1. 物理层:负责在物理介质上传输原始比特流;如网线、光纤、无线信号调制等,物理层确定了电压电平、物理连接器、线缆类型、传输速率和物理拓扑结构等,确保比特流的正确传输;
  2. 数据链路层:负责在‌同一物理网络内‌的两个‌直接相连‌的节点之间进行数据帧传输;数据链路层将网络层的数据包封装成‌帧‌,添加物理地址(如MAC地址);网卡和以太网交换机工作在数据链路层;
  3. 网络层:负责在‌不同网络之间‌进行数据的‌逻辑寻址和路由‌;定义逻辑地址(如IP地址),将传输层的报文段封装成‌数据包‌,并选择最佳路径将数据包从源主机通过一个或多个网络传输到目的主机;路由器工作在这一层;
  4. 传输层:负责提供端到端(源主机到目的主机或进程到进程)的可靠或不可靠数据传输服务;将网络层数据分割成更小的‌报文段‌(TCP)或‌数据报‌(UDP)进行传输;端口号用于区分同一主机上的不同应用程序
  5. 会话层:负责建立、管理和终止‌应用程序进程之间‌的‌会话;提供会话控制机制,如会话建立、同步点设置、会话恢复和释放;
  6. 表示层:负责数据的‌表示‌、‌加密‌和‌压缩‌;进行数据格式转换,确保一个系统的应用层发送的数据能被另一个系统的应用层理解;
  7. 应用层:用户和应用程序与网络服务之间的接口‌;包含各种用户应用程序使用的协议,如HTTP, HTTPS, FTP, SMTP等,实现特定的网络应用功能;

TCP/IP 模型将会话层、表示层、应用层合并为应用层;其余不变。

简单来说,网络的基础连接可以想象成一条线;比如将两台电脑通过网线连接在一起,就可以在两台电脑间进行数据传输了,这就是最简单的网络。
但是由于现实世界里需要连接的设备太多,就需要一种机制来唯一标识网络中的设备并指明其位置,以保证传输的数据能够到达正确的终端,这个机制就是IP地址;IP地址是用于在网络中唯一标识一台主机(如电脑、服务器、路由器等)的逻辑地址,并指示该主机在网络中的位置,从而实现数据包的正确路由和交付

IPv4(‌I‌nternet ‌P‌rotocol ‌v‌ersion ‌4‌)是互联网协议(IP)的‌第四个版本‌,也是目前全球互联网和大多数计算机网络‌最核心、使用最广泛的网络层协议‌。由 32 位二进制数组成,通常用‌点分十进制‌表示,如192.168.1.1。

可以使用ip -br a显示所有接口的简洁信息:
ip命令完整语法:ip [选项] [网络格式] [show [dev [接口名称]]]

ip命令常用属性作用
-br以简洁表格格式输出
-c彩色显示输出结果
-h显示人类可读的统计信息
[网络格式]指定操作对象为网络地址
show显示信息(可省略,可单独使用)
show dev [接口名称]指定要显示的具体网络接口
[root@CentOS79 ~]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             192.168.1.10/24 fe80::f6c0:93b2:9d52:9904/64 
ens36            UP             192.168.2.10/24 fe80::db4:dc82:30a7:96a2/64 
ens37            UP             192.168.8.10/24 fe80::615f:af31:6697:9579/64 
virbr0           DOWN           192.168.122.1/24 
virbr0-nic       DOWN           
[root@CentOS79 ~]# ip -c -h address show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:37:c1:be brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::f6c0:93b2:9d52:9904/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

在上面的例子中,可以看到ens33的IP为192.168.1.10/24;后面的/24代表子网掩码。之前说到IP地址由 32 位二进制数组成,子网掩码也一样,且通常也有点分十进制‌表示;但子网掩码的作用是表示IP地址有前几位数不可更改。

详细解释:
子网掩码中0代表可更改,1代表不可更改;/N代表前N位不可更改(即子网掩码前N位都是1,后面都是0);

192.168.1.10换算成二进制就是11000000.10101000.00000001.00001010
/24换算成二进制就是11111111.11111111.11111111.00000000(255.255.255.0);
一位子网掩码二进制符对应一位IP地址二进制符,1代表不可变;也就是说IP地址192.168.1.10/24只允许最后的8位二进制数可以改变

已知8位二进制数最小为0,最大为255(00000000=0,11111111=255),那么192.168.1.N/24最多只能允许给出256个不同的IP地址(192.168.1.0=11000000.10101000.00000001.00000000,192.168.1.255=11000000.10101000.00000001.11111111);

假设一台设备只会占用一个IP地址,那么理论上192.168.1.N/24最多能给256台设备分配不同的IP地址,即最多256台设备可以通过该网络互相传递数据;这样一个基础局域网就形成了。具有相同连续的IP地址前缀的IP集合被称为同一个网段,192.168.1.N/24中的所有IP都在同一个网段。
(实际上 192.168.1.0 是网络地址,192.168.1.255 是广播地址;可用主机地址范围是从192.168.1.1 到 192.168.1.254 共 254 个地址)

子网掩码除了/24还有/16,/8,/0等;/0代表整个IP可变范围都是子网,正常情况不会使用
IPv4 地址共有32位,理论上可以提供约 ‌43 亿个唯一地址。然而,现实里连接网络的设备数肯定远远大于这个值;为了解决这个问题,IPv4地址空间被划分为‌公网IP‌和‌私有IP两大类,这也使网络可分为公网和子网。

  • 公网IP:全球唯一,由IANA统一分配,用于互联网上的设备识别,可以直接访问互联网;
  • 私有IP‌:保留用于内部网络,无法直接访问互联网,需要在局域网边界通过‌网络地址转换(NAT)‌ 映射为公网IP;常见的私有IP段包括10.0.0.0/8、172.16.0.0/12、192.168.0.0/16等;

由于公网IP地址有限,而内部设备众多,‌NAT技术‌应运而生。它通常部署在连接子网和公网的‌路由器‌上,核心作用是‌将内部网络的多个私有IP地址,映射到一个或少数几个公网IP地址上‌,从而实现内网设备共用公网IP访问互联网。
以家庭网络为例,NAT工作存在三个阶段:

  1. 地址映射:当子网设备(如IP为192.168.1.10的电脑)要访问公网服务器(如203.0.113.5)时,数据包首先到达路由器;
  2. 端口转换:路由器不仅将数据包的源IP从私有IP(192.168.1.10)改为自己的公网IP(如198.51.100.10),还会‌替换源端口号‌,并记录下这个映射关系(192.168.1.10:1234 -> 198.51.100.10:54321);
  3. 回程转发:当公网服务器返回响应时,数据包目的地址是路由器的公网IP和端口(198.51.100.10:54321)。路由器根据之前记录的映射表,将目的IP和端口转换回子网设备的私有IP和端口(192.168.1.10:1234),再将数据包转发给子网设备;

通过这种方式,一个公网IP就可以通过不同的端口号,为数以百计的子网设备提供互联网访问服务。

而想要实现子网IP与公网IP的交换与数据传输,则需要路由器与交换机
路由器维护一个路由表,其中存储了目标网络的路由信息(如目标IP地址范围、下一跳地址等)。当路由器收到一个数据包时,它会检查数据包的目的IP地址,并在路由表中查找最佳路径。

使用netstat -nr命令可以检查路由:

[root@CentOS79 ~]# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.8.2     0.0.0.0         UG        0 0          0 ens37
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 ens33
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 ens36
192.168.8.0     0.0.0.0         255.255.255.0   U         0 0          0 ens37
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0

最上方一行Gateway表示网关IP;
每一个子网都要设置一个IP作为该子网与公网连接的唯一出口,这个IP被称为网关;子网中的每个用户想要发送数据到公网,首先要把数据发送到网关。

网关IP必须和其他用户IP在同一网段中,否则用户无法将数据传输到子网外。如果网段中的IP之间进行数据传输,可以直接通信,不需要经过网关。
网关通常由路由器实现,但‌不限于路由器‌(防火墙、服务器也可作为网关)。

交换机维护一个MAC地址表,记录每个端口对应的MAC地址(物理地址);当交换机收到一个数据帧时,它会检查帧的目的MAC地址,并在表中查找对应的端口,然后将帧只转发到该端口。
交换机通过“自学习”机制构建MAC地址表;当交换机收到一个帧时,它会记录源MAC地址和接收端口的映射。如果目的MAC地址不在表中,交换机会广播帧到所有端口(泛洪),直到学习到地址。

MAC地址(Media Access Control address)是一个硬件标识符,用于在数据链路层唯一标识网络设备;它是48位的二进制数,通常以十六进制表示,如00:1A:2B:3C:4D:5E。MAC地址确保了数据帧能在子网中准确送达目标设备

可以使用ip -br link查看MAC地址:

[root@CentOS79 ~]# ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> 
ens33            UP             00:0c:29:37:c1:be <BROADCAST,MULTICAST,UP,LOWER_UP> 
ens36            UP             00:0c:29:37:c1:c8 <BROADCAST,MULTICAST,UP,LOWER_UP> 
ens37            UP             00:0c:29:37:c1:d2 <BROADCAST,MULTICAST,UP,LOWER_UP> 
virbr0           DOWN           52:54:00:d1:3a:c5 <NO-CARRIER,BROADCAST,MULTICAST,UP> 
virbr0-nic       DOWN           52:54:00:d1:3a:c5 <BROADCAST,MULTICAST> 

网络连通性测试

可以通过ping 命令进行网络连通性测试;
Linux语法:ping [选项 [参数]] [网址信息]

ping常用选项作用
-c [数]发送指定数量的数据包
-i [时间]设置数据包发送间隔(秒)
-w [时间]设置超时时间(毫秒)
-s [字节数]指定数据包大小(字节)
-v详细输出
-q只显示摘要
-I [接口名称]指定网络接口
-D在每个输出行前显示时间戳

如果能够解析出IP,说明DNS配置正确;如果能ping,说明网关配置正确。

[root@CentOS79 ~]# ping baidu.com -c 4 -w 2
PING baidu.com (110.242.68.66) 56(84) bytes of data.
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=128 time=34.1 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=128 time=31.9 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=128 time=32.9 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=4 ttl=128 time=32.2 ms
^C
--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 31.985/32.808/34.118/0.839 ms
[root@CentOS79 ~ 17:20:52]# ping 192.168.8.2
PING 192.168.8.2 (192.168.8.2) 56(84) bytes of data.
64 bytes from 192.168.8.2: icmp_seq=1 ttl=128 time=0.204 ms
64 bytes from 192.168.8.2: icmp_seq=2 ttl=128 time=0.648 ms
64 bytes from 192.168.8.2: icmp_seq=3 ttl=128 time=0.581 ms
64 bytes from 192.168.8.2: icmp_seq=4 ttl=128 time=0.929 ms
^C
--- 192.168.8.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 0.204/0.590/0.929/0.259 ms

如果ping不成功,可以使用mtr -n 1.1.1.1来查看数据最远到达的位置;
mtr命令可以实时显示数据包从源主机到目标主机的完整路径,并监测每一跳节点的延迟和丢包率。

[root@CentOS79 ~]# mtr -n 1.1.1.1

ss命令是Linux系统中用于查看套接字统计信息的工具,是netstat命令的现代替代品,提供更详细和高效的网络连接信息展示;
语法:ss [选项] [过滤条件]

ss常用选项作用
-t显示TCP连接
-u显示UDP连接
-l仅显示监听状态的套接字
-a显示所有套接字(监听和非监听)
-n以数字形式显示地址和端口(不解析域名)
-4仅显示IPv4连接
-p显示使用套接字的进程信息

选项之间可以直接连接;

[root@CentOS79 ~]# ss -ntp
State       Recv-Q Send-Q     Local Address:Port                    Peer Address:Port              
ESTAB       0      0           192.168.1.10:22                       192.168.1.1:59525               users:(("sshd",pid=7256,fd=3))
ESTAB       0      0           192.168.1.10:22                       192.168.1.1:61655               users:(("sshd",pid=7096,fd=3))

网络配置

Linux系统图形化配置网络的命令是nmtui(直接用就会有操作界面出现,可以直接更改网络属性)。

而使用代码进行网络配置的命令是nmcli
语法:nmcli [选项] [对象] [命令]
使用nmcli networking on/off可以启用或停用网络,但不会停止NetworkManager服务。

nmcli常用属性作用
general查看 NetworkManager 常规状态和权限
networking控制网络连接总开关
radio管理无线网络开关
connection管理网络连接配置
device管理网络设备
agent管理 NetworkManager 代理
-t简洁输出
-f指定显示字段
[root@CentOS79 ~]# nmcli networking on
[root@CentOS79 ~]# nmcli device
DEVICE      TYPE      STATE   CONNECTION 
ens37       ethernet  已连接  有线连接 2 
ens33       ethernet  已连接  ens33      
ens36       ethernet  已连接  有线连接 1 
virbr0      bridge    已断开  --         
lo          loopback  未托管  --         
virbr0-nic  tun       未托管  --         

上方输出中的device列代表设备,也就是网卡;可以使用nmcli connection命令显示更详细的信息。

[root@CentOS79 ~]# nmcli connection
NAME        UUID                                  TYPE      DEVICE 
有线连接 2  8cbaecd3-d58a-376a-8247-11f041507fca  ethernet  ens37  
ens33       7b3dbfb7-b293-4f43-ac8a-260b6ccbd466  ethernet  ens33  
有线连接 1  4b4e3af4-9dbf-3f88-ab98-68e4605aa5af  ethernet  ens36  

UUID是网卡的唯一编号,建议通过UUID对网卡进行操作;
首先断开有线连接1、2:

[root@CentOS79 ~]# nmcli connection delete {4b4e3af4-9dbf-3f88-ab98-68e4605aa5af,8cbaecd3-d58a-376a-8247-11f041507fca}
成功删除连接 "有线连接 1" (4b4e3af4-9dbf-3f88-ab98-68e4605aa5af)。
成功删除连接 "有线连接 2" (8cbaecd3-d58a-376a-8247-11f041507fca)# 可能出现无法删除的情况,是因为 NetworkManager 存在自动连接机制。
[root@CentOS79 ~]# nmcli device disconnect {4b4e3af4-9dbf-3f88-ab98-68e4605aa5af,8cbaecd3-d58a-376a-8247-11f041507fca}
[root@CentOS79 ~]# nmcli connection
NAME   UUID                                  TYPE      DEVICE 
ens33  7b3dbfb7-b293-4f43-ac8a-260b6ccbd466  ethernet  ens33  

# 如果想重新启用自动连接,可以用 nmcli device set [设备名] autoconnect yes

断开后,使用nmcli命令重新配置ens36、ens37网络连接:
创建一个新的以太网连接配置语法:nmcli connection add type [连接类型] [属性名 属性值]…

属性示范作用
typetype ethernet指定连接类型为以太网
ifnameifname ens36指定网络接口名称
con-namecon-name ens36-auto指定连接配置文件的名称
ipv4.methodipv4.method auto自动获取IP (DHCP)
ipv4.gatewayipv4.gateway 192.168.8.2默认网关
ipv4.dnsipv4.dns 8.8.8.8,8.8.4.4DNS服务器
ipv4.addressesipv4.addresses 192.168.1.100/24静态IP地址和子网掩码
connection.autoconnectconnection.autoconnect yes系统启动时自动连接

各属性之间可以使用 /+[Enter] 连接的写法:

[root@CentOS79 ~]# nmcli connection add type ethernet ifname ens36 con-name ens36-auto connection.autoconnect yes ipv4.method auto
连接 "ens36-auto" (827c3877-69be-453e-b826-c47915895e3b) 已成功添加。
[root@CentOS79 ~]# nmcli connection
NAME        UUID                                  TYPE      DEVICE 
ens33       7b3dbfb7-b293-4f43-ac8a-260b6ccbd466  ethernet  ens33  
ens36-auto  827c3877-69be-453e-b826-c47915895e3b  ethernet  ens36  
[root@CentOS79 ~]# nmcli connection add type ethernet ifname ens37 con-name ens37 ipv4.gateway 192.168.8.2 connection.autoconnect yes ipv4.address 192.168.8.10/24 ipv4.method manual
连接 "ens37" (bc9f83f6-63e8-4d1a-8f05-32b2d74332d2) 已成功添加。
[root@CentOS79 ~]# nmcli connection
NAME        UUID                                  TYPE      DEVICE 
ens37       bc9f83f6-63e8-4d1a-8f05-32b2d74332d2  ethernet  ens37  
ens33       7b3dbfb7-b293-4f43-ac8a-260b6ccbd466  ethernet  ens33  
ens36-auto  827c3877-69be-453e-b826-c47915895e3b  ethernet  ens36  
[root@CentOS79 ~]# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.8.2     0.0.0.0         UG        0 0          0 ens37
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 ens33
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 ens36
192.168.8.0     0.0.0.0         255.255.255.0   U         0 0          0 ens37

网卡和网关都配好后,还需要配置DNS服务器才能正常连接外网;

DNS 服务器负责将我们输入的域名‌翻译成计算机需要的 ‌IP 地址,如将www.baidu.com解析为220.181.38.148;如果没有DNS,电脑就不知道域名所对应的IP地址,也就无法进行连接;

dns服务器可以在添加网络连接时使用ipv4.dns属性直接设置,如果没有直接设置,则需要在/etc/resolv.conf中手动添加:

[root@CentOS79 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search gc.cloud
nameserver 1.1.1.1 # Cloudflare DNS
nameserver 8.8.8.8 # Google Public DNS
nameserver 223.5.5.5 # 阿里云公共DNS
nameserver 114.114.114.114 # 中国电信公共DNS‌

全部配置好就可以连接网络了;

[root@CentOS79 ~]# ping www.baidu.com
PING www.wshifen.com (103.235.46.102) 56(84) bytes of data.
64 bytes from 103.235.46.102 (103.235.46.102): icmp_seq=1 ttl=128 time=331 ms
64 bytes from 103.235.46.102 (103.235.46.102): icmp_seq=2 ttl=128 time=329 ms
64 bytes from 103.235.46.102 (103.235.46.102): icmp_seq=4 ttl=128 time=330 ms
64 bytes from 103.235.46.102 (103.235.46.102): icmp_seq=5 ttl=128 time=329 ms
^C
--- www.wshifen.com ping statistics ---
6 packets transmitted, 4 received, 33% packet loss, time 5024ms
rtt min/avg/max/mdev = 329.594/330.262/331.091/0.947 ms
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值