网络管理
网络管理的难点就是网络的一堆基础知识。
1、网卡名字
ip a 查看所有的
lo网卡名字 是自己本地回环网卡的地址 这里的地址固定是127.0.0.1 ,用来在本机上可以做的测试,在自己机器上起一个客户端一个服务端这两种要基于网络通信,大家走lo网卡就行了。
这种通信并没有走到真正的网络环境里面去,可以避免网络环境给我们带来的困扰。
ens33这个网卡en指的是ethernet以太网的意思,s指的是slot,网卡插槽,33指的就是33插槽号插巢。早期的centos是eth,后来自己加的比如光纤网卡是p1。
家里用的网线是双绞线,管钱模块接的网线里面都是玻璃,普通网卡都称之为千兆网卡,光纤模块都是万兆网卡后面对应的都是万兆交换机,网卡的mtu就是它的最大传输单元。
[root@localhost ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:4f:1b:20 brd ff:ff:ff:ff:ff:ff inet 192.168.1.69/24 brd 192.168.1.255 scope global noprefixroute dynamic ens33 valid_lft 5959sec preferred_lft 5959sec inet6 2409:8a20:7f4d:b550:5787:35c8:36e8:aa5/64 scope global noprefixroute dynamic valid_lft 258962sec preferred_lft 172562sec inet6 fe80::c54a:a365:e03a:bc17/64 scope link noprefixroute valid_lft forever preferred_lft forever
要查看网卡名称及其对应的IP地址,可以使用“ip a”命令。在展示的所有网卡中,“lo”网卡代表本地回环网卡,其地址固定为127.0.0.1。这个地址主要用于本机上的测试,例如在同一台机器上启动一个客户端和一个服务端,进行基于网络的通信测试。 这种通信测试仅在本机内部进行,不涉及外部网络环境,从而避免了真实网络环境中可能带来的各种问题。 “ens33”是另一种类型的网卡,其中“en”代表“以太网”(Ethernet),“s”表示“插槽”(Slot),而“33”指的是具体的插槽编号。 早期的CentOS系统中,网卡通常命名为“eth”,后来为了区分不同类型的网卡,如光纤网卡可能会被命名为“p1p2”等。 在家庭网络中,常用的网线是双绞线,而服务器等环境中则可能使用光纤网卡,普通网卡通常被称为“千兆网卡”,光纤模块的网卡则通常是“万兆网卡”,它们分别对应千兆交换机和万兆交换机。网卡的“MTU”(最大传输单元)是指其能够传输的最大数据包大小。 --- 扩展后的文章: 要查看系统中的网卡名称及其对应的IP地址,可以使用Linux系统中的“ip a”(即“ip address show”的缩写)命令。 执行该命令后,终端会显示所有网络接口的详细信息,包括物理网卡、虚拟网卡以及回环网卡等。在这些网卡信息中,“lo”网卡尤为特殊,它代表本地回环(Loopback)网卡,其IP地址固定为127.0.0.1,也被称为“localhost”或“本机地址”。 这个地址在TCP/IP协议栈中具有特殊意义,用于在同一台机器内部进行网络通信测试。例如,开发人员可以在本地同时启动一个客户端程序和一个服务端程序,通过lo网卡进行数据交互,模拟网络通信场景。 这种测试的优势在于完全隔离于外部网络环境,避免了因网络延迟、防火墙限制、IP冲突等问题导致的测试干扰。此外,lo网卡的通信过程无需经过物理网络设备(如交换机或路由器),所有数据包直接在本地内核中循环处理,因此速度极快且稳定,非常适合用于性能测试或本地服务调试。 接下来,我们重点分析另一个常见网卡名称“ens33”。“en”前缀表示该网卡属于以太网(Ethernet)类型,而“s”代表其通过PCIe插槽(Slot)连接到主板。数字“33”则标识具体的插槽编号,通常与主板上的物理位置对应。 这种命名规则源自Linux内核的网络接口命名规范,旨在提供更清晰的硬件识别信息。值得注意的是,早期的Linux系统(如CentOS 6及更早版本)通常使用“ethX”(如eth0、eth1)作为网卡命名,但随着硬件设备增多和虚拟化技术的发展,命名冲突问题日益突出。 从CentOS 7开始,引入了基于固件信息、拓扑结构和插槽位置的统一命名规则,即“Predictable Network Interface Names”(可预测网络接口名称)。 例如,光纤网卡可能被命名为“enp1s0”(PCIe插槽1上的第一个以太网端口),而虚拟化环境中的网卡则可能以“vethX”或“brX”开头,分别代表虚拟以太网对(veth pair)和网桥(bridge)。 在讨论网络硬件时,有必要区分不同介质和速率的网卡。家庭和办公室环境中常用的网线多为双绞线(Twisted Pair),支持千兆(1Gbps)或百兆(100Mbps)传输速率。 服务器机房或数据中心则广泛采用光纤网卡,其传输模块(如SFP+、QSFP+)可实现万兆(10Gbps)乃至更高速率(如40Gbps、100Gbps),搭配光纤跳线和万兆交换机,构建高带宽低延迟的网络架构。 值得注意的是,网卡的“MTU”(Maximum Transmission Unit,最大传输单元)直接影响网络性能。默认情况下,以太网的MTU为1500字节,但某些场景(如VPN隧道、跨广域网通信)可能需要调整MTU值(如降至1400字节)以避免数据包分片问题。 通过“ip link set dev eth0 mtu 1400”命令可临时修改MTU,而永久配置需编辑网络脚本。 实际应用中,理解网卡命名和特性对系统运维至关重要。例如,当服务器出现网络故障时,管理员可通过“ip a”快速确认网卡状态(UP/DOWN)、IP配置是否正确,或是否存在链路层错误。 若发现网卡名称异常(如突然变为“eno16777736”而非预期的“ens33”),可能提示主板固件更新或PCI设备重新排序,需要进一步检查BIOS设置或udev规则。 此外,虚拟化平台(如KVM、Docker)中,网卡的桥接、绑定(Bonding)或VLAN配置,均依赖于对底层物理网卡和虚拟接口的准确识别。 总结而言,网卡作为计算机系统与网络世界的连接桥梁,其命名、类型及配置参数深刻影响着网络通信的效率和稳定性。 无论是基于本地回环测试开发的便捷性,还是企业级光纤网络的高性能需求,掌握网卡相关知识都是网络技术人员的必备技能。 通过“ip a”命令获取的丰富信息,结合对硬件命名规则和网络协议的理解,能够帮助我们更高效地进行网络部署、故障排查及性能优化。
2、网卡信息
lspci
我们主要关注的是网卡信息:lspci |grep -i ether
mii-tool ens33 查看王网卡有没有连着网线
两块网卡做绑定,高可用。可能是为了这两台机器通过连不同的交换机到不同的网络里面,还有可能是为了解决一些单点故障。
[root@localhost ~]# lspci 00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01) 00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01) 00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08) 00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) 00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08) 00:07.7 System peripheral: VMware Virtual Machine Communication Interface (rev 10) 00:0f.0 VGA compatible controller: VMware SVGA II Adapter 00:10.0 SCSI storage controller: Broadcom / LSI 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01) 00:11.0 PCI bridge: VMware PCI bridge (rev 02) 00:15.0 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.1 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.2 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.3 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.4 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.5 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.6 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.7 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.0 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.1 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.2 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.3 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.4 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.5 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.6 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.7 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.0 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.1 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.2 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.3 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.4 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.5 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.6 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.7 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.0 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.1 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.2 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.3 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.4 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.5 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.6 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.7 PCI bridge: VMware PCI Express Root Port (rev 01) 02:00.0 USB controller: VMware USB1.1 UHCI Controller 02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01) 02:02.0 Multimedia audio controller: Ensoniq ES1371/ES1373 / Creative Labs CT2518 (rev 02) 02:03.0 USB controller: VMware USB2 EHCI Controller
[root@localhost ~]# lspci |grep -i ether 02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
[root@localhost ~]# mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok
在Linux系统中,查看和管理网卡信息是网络配置与故障排查中的重要环节。当我们需要了解服务器或设备的网络硬件状态时,通常会使用一系列命令来获取详细信息。 其中,`lspci`(PCI设备列表)和`mii-tool`(媒体独立接口工具)是两个关键工具,它们能帮助我们快速定位网卡的状态和连接情况。 首先,`lspci`命令用于列出系统中所有PCI总线设备的信息,包括网卡、声卡、显卡等硬件组件。由于网卡通常作为PCI设备存在,通过执行`lspci | grep -i ether`,我们可以过滤出所有包含“ether”(以太网)关键字的条目,从而专注于网卡相关的硬件信息。 例如,输出中可能会显示网卡的厂商ID、设备ID、型号以及插槽位置等细节,这些信息对于识别网卡驱动兼容性或硬件故障至关重要。 接下来,若需确认某块网卡(如ens33)的物理连接状态,可以使用`mii-tool ens33`命令。该工具通过读取网卡的媒体独立接口(MII)信息来判断网线是否已正确连接。 执行后,通常会显示每个接口的链路状态(link OK或link down),以及协商速率(如1000Mbps full-duplex)、双工模式等参数。如果显示“link down”,则可能意味着网线未插紧、交换机端口故障或网卡硬件问题,需要进一步排查。 在实际生产环境中,为了提高网络的可靠性和冗余性,常会将两块网卡进行绑定(Bonding)。这种配置通过将多个物理网卡虚拟化为一个逻辑网卡(如bond0),实现高可用性或负载均衡。 例如,在服务器集群或数据中心场景中,两台机器可能通过不同的网卡连接至不同的交换机,从而接入不同的网络(如管理网、业务网)。这种架构不仅分散了网络流量,还避免了单一交换机或网卡故障导致的通信中断。 网卡绑定的实现通常依赖于Linux内核的bonding模块,支持多种模式,如active-backup(主备模式)、balance-rr(轮询负载均衡)等。 在高可用场景中,active-backup模式尤为常见:主网卡负责所有流量,备用网卡实时监控链路状态,一旦主网卡失效,备用网卡将自动接管通信,确保业务连续性。此外,通过配置不同的交换机到不同网络,还能实现跨网络的冗余路径,进一步提升系统的容错能力。 值得注意的是,网卡绑定不仅需要正确的硬件连接,还需在系统网络配置文件中进行详细设置(如修改`/etc/network/interfaces`或`/etc/sysconfig/network-scripts/`中的bonding参数)。 同时,监控工具(如`ifconfig`、`ip link`、`cat /proc/net/bonding/bond0`)可以帮助验证绑定状态和流量分布情况。通过结合硬件检查与软件配置,管理员可以构建稳定、高效的网络架构,满足复杂应用场景的需求。
3、网卡配置
ip 用它配置网卡比较麻烦
ifconfig
现在新版本推荐使用nmcli,可以直接修改配置文件。
以ifconfig为例,要使用必须安装net-toools
ifconfig -a 是查看所有已激活的网卡信息,如果只单独查看某一块在ifconfig后直接写网卡名字就行了。
激活某个网卡和关闭某个网卡 ifconfig ens33 up ifconfig ens33 down 不会加载网卡配置文件
ifup/down 会加载网卡配置文件
[root@localhost ~]# ifconfig -a ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.69 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 2409:8a20:7f4d:b550:5787:35c8:36e8:aa5 prefixlen 64 scopeid 0x0<global> inet6 fe80::c54a:a365:e03a:bc17 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:4f:1b:20 txqueuelen 1000 (Ethernet) RX packets 236439 bytes 40311189 (38.4 MiB) RX errors 0 dropped 65 overruns 0 frame 0 TX packets 47966 bytes 14949056 (14.2 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> loop txqueuelen 1000 (Local Loopback) RX packets 128 bytes 11136 (10.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 128 bytes 11136 (10.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ifconfig给某个网卡在配置ip地址之前一定要ping一下看看能不能用,单独配ip还没用还得再配个子网掩码用netmask或者直接在IP地址后面写/(左斜杠)25或24。
加了一模一样的网段的ip地址,Linux系统上会新增路由条目,识别不出来。
route -n
ifconfig还可以配置临时的网卡。在同一个局域网内应该配置同一个网段,做实验的时候临时用一下。
命令配置的都不靠谱,要向配置靠谱还得配置配置文件,centos7的网卡配置文件在/etc/sysconfig/network-scripts/
cd /etc/sysconfig/network-scripts/
ll
cat ifcfg-ens33
dhcp
cp ifcfg-ens33 ifcfg-ens36
vi ifcfg-ens36
nmcli conn 可以查看网卡的UUID
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# ll 总用量 232 -rw-r--r--. 1 root root 279 5月 11 05:43 ifcfg-ens33 -rw-r--r--. 1 root root 254 5月 22 2020 ifcfg-lo lrwxrwxrwx. 1 root root 24 5月 11 05:41 ifdown -> ../../../usr/sbin/ifdown -rwxr-xr-x. 1 root root 654 5月 22 2020 ifdown-bnep -rwxr-xr-x. 1 root root 6532 5月 22 2020 ifdown-eth -rwxr-xr-x. 1 root root 781 5月 22 2020 ifdown-ippp -rwxr-xr-x. 1 root root 4540 5月 22 2020 ifdown-ipv6 lrwxrwxrwx. 1 root root 11 5月 11 05:41 ifdown-isdn -> ifdown-ippp -rwxr-xr-x. 1 root root 2130 5月 22 2020 ifdown-post -rwxr-xr-x. 1 root root 1068 5月 22 2020 ifdown-ppp -rwxr-xr-x. 1 root root 870 5月 22 2020 ifdown-routes -rwxr-xr-x. 1 root root 1456 5月 22 2020 ifdown-sit -rwxr-xr-x. 1 root root 1621 12月 9 2018 ifdown-Team -rwxr-xr-x. 1 root root 1556 12月 9 2018 ifdown-TeamPort -rwxr-xr-x. 1 root root 1462 5月 22 2020 ifdown-tunnel lrwxrwxrwx. 1 root root 22 5月 11 05:41 ifup -> ../../../usr/sbin/ifup -rwxr-xr-x. 1 root root 12415 5月 22 2020 ifup-aliases -rwxr-xr-x. 1 root root 910 5月 22 2020 ifup-bnep -rwxr-xr-x. 1 root root 13758 5月 22 2020 ifup-eth -rwxr-xr-x. 1 root root 12075 5月 22 2020 ifup-ippp -rwxr-xr-x. 1 root root 11893 5月 22 2020 ifup-ipv6 lrwxrwxrwx. 1 root root 9 5月 11 05:41 ifup-isdn -> ifup-ippp -rwxr-xr-x. 1 root root 650 5月 22 2020 ifup-plip -rwxr-xr-x. 1 root root 1064 5月 22 2020 ifup-plusb -rwxr-xr-x. 1 root root 4997 5月 22 2020 ifup-post -rwxr-xr-x. 1 root root 4154 5月 22 2020 ifup-ppp -rwxr-xr-x. 1 root root 2001 5月 22 2020 ifup-routes -rwxr-xr-x. 1 root root 3303 5月 22 2020 ifup-sit -rwxr-xr-x. 1 root root 1755 12月 9 2018 ifup-Team -rwxr-xr-x. 1 root root 1876 12月 9 2018 ifup-TeamPort -rwxr-xr-x. 1 root root 2780 5月 22 2020 ifup-tunnel -rwxr-xr-x. 1 root root 1836 5月 22 2020 ifup-wireless -rwxr-xr-x. 1 root root 5419 5月 22 2020 init.ipv6-global -rw-r--r--. 1 root root 20678 5月 22 2020 network-functions -rw-r--r--. 1 root root 30988 5月 22 2020 network-functions-ipv6 [root@localhost network-scripts]# cat ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=394a6dab-47e4-43f8-9821-85f53ba2e040 DEVICE=ens33 ONBOOT=no [root@localhost network-scripts]# vi ifcfg-ens33 [root@localhost network-scripts]# vi ifcfg-ens33
[root@localhost network-scripts]# nmcli conn NAME UUID TYPE DEVICE ens33 394a6dab-47e4-43f8-9821-85f53ba2e040 ethernet ens33
在配置网卡时,IP地址的设置相对较为繁琐。以往,我们常常使用ifconfig命令,但现在新版本的系统中,推荐使用更为便捷的nmcli工具,它可以直接修改配置文件。 以ifconfig为例,若要使用该命令,必须先安装net-tools包。使用ifconfig -a可以查看所有已激活的网卡信息,若只需查看特定网卡,则在ifconfig后直接添加该网卡的名称即可。 要激活或关闭某个网卡,可以使用ifconfig ens33 up或ifconfig ens33 down命令,但这些命令不会加载网卡配置文件。 若需加载配置文件,则应使用ifup或ifdown命令。 在为某个网卡配置IP地址前,建议先使用ping命令检查其是否可用。配置IP地址时,除了设置IP地址本身,还必须配置子网掩码,这可以通过使用netmask命令或在IP地址后直接加上/(左斜杠)再加掩码位数(如25或24)来实现。 如果添加了相同网段的IP地址,Linux系统会自动新增路由条目,可能会导致无法识别该IP地址。可使用route -n命令查看路由表。 ifconfig命令还可以用于配置临时网卡。在同一局域网内,网卡应配置为同一网段,这在做实验时尤为有用。但需注意,通过命令配置的网卡信息并非永久有效,若要实现永久配置,还需编辑网卡配置文件。 在CentOS7系统中,网卡配置文件位于/etc/sysconfig/network-scripts/目录下。 可以使用cd /etc/sysconfig/network-scripts/命令进入该目录,通过ll或cat ifcfg-ens33命令查看文件内容。 若需复制文件,如复制ifcfg-ens33为ifcfg-ens36,可以使用cp命令,随后通过vi编辑新文件。 使用nmcli conn命令可以查看网卡的UUID信息。 **网卡配置详解:从 ifconfig 到 nmcli 的进阶指南** 在Linux系统中,网卡配置是网络管理的基础环节。尽管过去ifconfig是配置网卡的常用工具,但新版本的Linux系统(如CentOS 7及后续版本)更推荐使用nmcli(NetworkManager命令行工具),因其能更直观地与NetworkManager服务交互,并直接修改配置文件,避免手动命令带来的潜在风险。 **1. ifconfig命令:基础配置与注意事项** ifconfig作为经典的网络配置工具,需先确保系统中安装了net-tools包。使用`ifconfig -a`可显示所有网卡信息(无论激活与否),而单独查看某网卡(如ens33)则直接输入`ifconfig ens33`。 激活或关闭网卡时,需注意命令差异: - `ifconfig ens33 up` 和 `ifconfig ens33 down` 仅改变网卡状态,但**不会加载对应的配置文件**(如DHCP设置或静态IP)。 - 相比之下,`ifup ens33` 和 `ifdown ens33` 会读取并应用网卡配置文件(通常位于`/etc/sysconfig/network-scripts/`),确保配置一致性。 **2. IP地址配置:临时与永久方案** 使用ifconfig配置IP地址时需谨慎。例如,为ens33分配临时IP: ``` ifconfig ens33 192.168.1.100 netmask 255.255.255.0 # 或简写为:ifconfig ens33 192.168.1.100/24 ``` 但此配置仅在当前会话有效,重启后失效。 **临时配置前务必用ping测试网卡连通性**(如`ping -c 3 192.168.1.1`)。若添加与现有网段重复的IP(如同一子网下配置多个相同IP),系统会新增路由条目,可能导致网络混乱(如无法识别主IP)。 **3. 配置文件管理:静态IP与多网卡场景** **永久配置需编辑网卡配置文件**(以CentOS 7为例): - 进入目录:`cd /etc/sysconfig/network-scripts/` - 查看示例文件:`cat ifcfg-ens33`,常见参数包括: - `BOOTPROTO=dhcp`(动态分配)或 `static`(静态IP) - `ONBOOT=yes`(开机启动) - `IPADDR=192.168.1.100` - `NETMASK=255.255.255.0` 或 `PREFIX=24` - 如需复制配置(如新增ens36网卡):`cp ifcfg-ens33 ifcfg-ens36`,再修改新文件中的名称、MAC地址等。 **4. nmcli工具:现代网络管理的利器** nmcli的优势在于简化配置并自动同步NetworkManager状态: - 查看网卡连接状态:`nmcli conn show` - 创建新连接:`nmcli conn add type ethernet con-name my-connection ifname ens33 autoconnect yes` - 修改现有配置(如将ens33改为静态IP):`nmcli conn modify ens33 ipv4.method manual ipv4.addresses 192.168.1.200/24` - 启用/禁用连接:`nmcli conn up/down my-connection` **5. 进阶技巧与常见陷阱** - **多网卡绑定**:通过`nmcli bonding`实现链路聚合,提升冗余性或带宽。 - **子网冲突排查**:若添加相同网段IP导致异常,可使用`route -n`查看路由表,或通过`ip route del`手动删除冗余条目。 - **配置生效检查**:修改配置文件后,可用`nmcli reload`刷新NetworkManager配置,或重启服务`systemctl restart NetworkManager`。 - **实验环境临时配置**:在同一局域网内,如需临时测试不同IP(如192.168.2.x),务必确保子网掩码一致,避免跨网段通信问题。 **6. 跨版本差异与最佳实践** 不同Linux发行版可能存在配置差异。例如,CentOS 8默认使用nmcli和NetworkManager,而旧版可能依赖ifupdown脚本。建议优先使用nmcli管理配置,避免直接修改文件后与NetworkManager状态冲突。对于服务器场景,静态IP配置需结合防火墙(如firewalld)和路由规则,确保服务可达性。 **总结** 尽管ifconfig提供了快速配置能力,但nmcli与配置文件结合的方式更符合现代Linux的网络管理理念。理解两者协作机制(如NetworkManager如何解析配置文件),并掌握临时/永久配置的切换,能大幅提升网络运维效率。 在实际部署中,优先使用nmcli进行逻辑管理,必要时辅以手动编辑文件,同时利用`nmcli conn`查看的UUID确保配置唯一性,避免重复或冲突。
5、网卡的工作模式
繁杂模式:
多播模式:
开启繁杂模式:promisc 关闭就是-promisc,通常如果相对整个网络的数据报做分析可以开启繁杂模式。
多播模式默认是开启的,关闭:-multicast
全多播模式开启关闭:allmulti
网卡的工作模式包含以下几种: 繁杂模式(Promiscuous Mode):在这种模式下,网卡会接收所有经过它的数据包,无论这些数据包的目标地址是否为本机。 开启繁杂模式通常通过设置 `promisc` 参数来实现,而关闭则是设置 `-promisc`。通常情况下,如果需要对整个网络中的数据包进行分析,比如进行网络监控或故障排查,可以开启繁杂模式。 多播模式(Multicast Mode):此模式允许网卡接收发送到多个目标地址的数据包,即多播数据包。 多播模式通常是默认开启的。如果需要关闭多播模式,可以使用 `-multicast` 参数来进行设置。 全多播模式(All-Multicast Mode):在这种模式下,网卡会接收所有的多播数据包,无论是否为目标多播组成员。 开启或关闭全多播模式通过 `allmulti` 参数来实现。 通过合理配置这些模式,可以优化网卡的性能和功能,以满足不同的网络需求。 --- **网卡的工作模式解析:深入探讨混杂模式、多播模式与全多播模式** 网卡作为网络通信的核心组件,其工作模式直接影响数据包的接收与处理逻辑。了解并合理配置这些模式,不仅能优化网络性能,还能满足特定的应用场景需求。以下对三种关键模式进行详细解析。 **一、混杂模式(Promiscuous Mode)** 混杂模式(又称“监听模式”)是网卡的一种特殊工作模式。默认情况下,网卡仅接收目标地址为本机MAC地址的数据包,或广播数据包。而当开启混杂模式时,网卡将无视目标地址,捕获所有经过其物理端口的数据包,无论数据包的接收方是否为自身。 这一特性使其成为网络分析、故障诊断与安全审计的关键工具。 **应用场景与价值:** 1. **网络监控与分析**:使用Wireshark、Tcpdump等工具进行数据包捕获与分析时,必须开启混杂模式才能获取全网流量。 2. **入侵检测系统(IDS)部署**:安全设备需要监测所有流量以识别潜在威胁。 3. **网络排障**:排查广播风暴、ARP欺骗等问题时,需全局观察网络数据包。 **配置示例(Linux系统)**: - 开启混杂模式:ifconfig eth0 promisc - 关闭混杂模式:ifconfig eth0 -promisc **注意事项**:开启混杂模式可能暴露隐私,攻击者可通过嗅探获取敏感信息(如登录凭证)。因此,仅在受控环境(如实验室或已授权的安全分析场景)中使用,且需确保物理访问安全。 **二、多播模式(Multicast Mode)** 多播模式是网卡处理多播(组播)数据包的核心机制。IP多播通过将单个数据包发送到一组目标地址(224.0.0.0/4地址段),实现高效的一对多通信。默认情况下,网卡的多播模式处于启用状态,允许接收订阅的多播流量。 **典型应用场景**: - **实时流媒体传输**:视频会议、在线直播系统通过多播减少服务器带宽压力。 - **分布式系统同步**:数据库集群、文件共享服务依赖多播实现节点间高效数据同步。 - **网络协议组播**:如DHCP、IGMP等协议利用多播机制发现网络资源。 **关闭多播模式(-multicast)**:若设备无需参与多播通信(如资源受限的物联网设备),可通过此命令减少无关流量处理开销。例如:`ifconfig eth0 -multicast`。 **三、全多播模式(All-Multicast Mode)** 全多播模式是对多播模式的扩展。当启用该模式时,网卡将接收所有多播数据包,而无需检查是否已订阅对应多播组。这一模式通常用于特定测试环境或需要全局监听多播流量的场合,但实际生产网络中较少使用。 **适用场景**: 1. **网络性能测试**:评估多播协议在不同负载下的表现。 2. **多播协议研发调试**:开发者需要捕获所有多播流量进行协议分析。 3. **安全审计**:监测全网多播通信以排查潜在风险。 **配置命令(Linux)**: - 开启全多播:`ifconfig eth0 allmulti` - 关闭全多播:`ifconfig eth0 -allmulti` **配置与性能考量**: 现代网卡通常支持硬件级多播过滤,即使开启全多播模式,实际CPU开销取决于是否启用硬件过滤功能。在高负载网络环境中,滥用全多播模式可能导致资源消耗,需谨慎评估。 **总结与建议**: - **安全性优先**:除非必要,避免在生产环境开启混杂模式或全多播模式。 - **资源优化**:根据应用场景精准配置模式(例如,流媒体服务器启用多播,普通终端关闭不必要的多播订阅)。 - **跨平台适配**:Windows系统可通过netsh命令配置,而Linux的ip命令或ifconfig(已逐步被ip替代)提供相似功能。 通过理解并灵活应用网卡工作模式,可以构建更高效、安全的网络环境,同时满足多样化的应用需求。
6、网卡各部分信息详解
ens33 网卡名字
flags 网卡的一些标志 UP(代表激活状态) BROADCAST(默认支持广播,在交换机里默认通信的方式就是广播) RUNNING(配置了IP地址才有RUNNING状态) MULTICAST(支持多播技术)基本这表标志都不会动,除非一些特殊场景比如开启繁杂模式做安全方面的工作,去对数据包做一些分析。
mtu指的是网卡的最大传输单元,默认是1500个字节,这也是为什么说包到了以太网层要分片发送的原因。mtu值可以调大,前提是网卡得支持,ifconfig ens33 mtu 9000,命令都是临时修改,永久修改可以在配置文件里面加。
innet就是ipv4的网卡地址 netmask broadcast(.0是网络地址.1网关地址.5广播地址)
innet6就是ipv6的网卡地址 prefixlen socpeid
ether mac地址 txqueulen传输队列的长度
RX 从开机开始累计收到的包 bytes 这些包总共多少个字节,换算成
RX errors dropped overruns frame
TX 从开机开始累计发了多少包 bytes
TX errors dropped overruns carrier collisions
对网卡各部分信息的详细解释如下: ens33:网卡的名称。 flags:网卡的一些标志。 UP:表示网卡处于激活状态。 BROADCAST:表明网卡默认支持广播,这是交换机中默认的通信方式。 RUNNING:表示网卡已配置IP地址。 MULTICAST:显示网卡支持多播技术。这些标志通常在常规操作中保持不变,除非在特殊场景下,例如开启混杂模式进行安全方面的数据分析。 mtu:即最大传输单元,默认值为1500字节。这就是数据包在以太网层需要分片发送的原因。mtu值可以调整,前提是网卡必须支持。例如,使用命令ifconfig ens33 mtu 9000可以临时修改mtu值,若要永久修改,需在配置文件中添加相关设置。 inet:IPv4网卡的地址信息。 netmask:子网掩码。 broadcast:广播地址,其中.0代表网络地址,.1代表网关地址,.5代表广播地址。 inet6:IPv6网卡的地址信息。 prefixlen:前缀长度。 scopeid:范围ID。 ether:MAC地址。 txqueulen:传输队列的长度。 RX:统计自开机以来累计接收到的数据包数量和总字节数。 RX errors:接收错误。 dropped:丢弃的包。 overruns:溢出错误。 frame:帧错误。 TX:统计自开机以来累计发送的数据包数量和总字节数。 TX errors:发送错误。 dropped:丢弃的包。 overruns:溢出错误。 carrier:载波错误。 collisions:冲突次数。 --- **网卡各部分信息详解** 网卡(Network Interface Card,NIC)是计算机连接网络的硬件设备,其各部分信息通过命令行工具(如`ifconfig`或`ip`命令)可以详细查看。以下以ens33为例,逐部分解析其关键参数: **ens33:网卡名称** 这是Linux系统中网卡的命名,通常基于PCI插槽位置或设备类型生成。例如,ens33中的"ens"可能代表"Ethernet Network Subsystem",数字部分则对应设备编号。不同操作系统或发行版可能有不同的命名规则,如eth0、wlan0等。 **flags:网卡标志** - **UP**:表示网卡已激活,处于可用状态。如果为DOWN,则网卡被禁用,无法通信。 - **BROADCAST**:支持广播通信。默认情况下,交换机通过广播方式在局域网内发送数据包(如ARP请求),但现代网络也常使用组播或单播优化流量。 - **RUNNING**:表明网卡已配置IP地址并处于运行状态。如果未分配IP(如手动配置前或未获取DHCP地址),该标志可能不显示。 - **MULTICAST**:支持多播技术,允许将数据包同时发送给多个目标地址。常用于流媒体、视频会议等场景。 - **其他标志**:如混杂模式(promiscuous mode,可通过设置`IFF_PROMISC`标志启用),在此模式下网卡接收所有经过的数据包(无论目标MAC是否匹配),常用于网络嗅探或安全分析工具(如Wireshark)。 **mtu:最大传输单元(Maximum Transmission Unit)** 默认值为1500字节,这是以太网帧的标准负载大小。当上层协议(如TCP/IP)的数据包超过此限制时,会被分片(fragmentation)成多个小包发送。调整mtu值(如`ifconfig ens33 mtu 9000`)可减少大文件传输时的分片开销,但需注意:1. 两端设备(包括交换机、路由器)必须支持更大的MTU;2. 部分网络环境(如VPN、云服务)可能限制MTU,强行增大可能导致通信异常。临时修改仅生效于当前会话,永久配置需编辑`/etc/sysconfig/network-scripts/ifcfg-ens33`文件添加`MTU=9000`。 **inet:IPv4地址信息** - **inet**:即IP地址,例如192.168.1.100。 - **netmask**:子网掩码(如255.255.255.0),用于划分网络和主机部分。例如,/24掩码对应255.255.255.0,表示前24位为网络地址,后8位为主机地址。 - **broadcast**:广播地址,通常为网络地址+主机位全1。例如,192.168.1.0/24的广播地址为192.168.1.255。广播用于向同一子网的所有设备发送数据包。 **inet6:IPv6地址信息** - **inet6**:如fe80::1234:5678,采用128位地址,通常以链路本地地址(fe80::/64)开头。 - **prefixlen**:前缀长度,类似子网掩码,但用数字表示。例如,/64表示前64位为网络前缀,后64位为主机部分。 - **scopeid**:作用域ID,标识地址的有效范围(如链路本地、全局、站点本地等)。 **ether:MAC地址(Media Access Control)** 网卡的物理地址,由48位(6字节)十六进制数组成,全球唯一。例如00:11:22:33:44:55。MAC地址用于二层(数据链路层)通信,确保数据包在局域网中准确传输至目标设备。 **txqueulen:传输队列长度** 该值定义了网卡发送缓冲区的容量。当网络负载高时,待发送的数据包会暂存于队列。队列过长可能导致延迟增加,过短则可能在突发流量下丢包。部分网卡支持动态调整队列长度,或通过驱动参数配置。 **RX(接收统计)** - **packets**:累计接收包数。 - **bytes**:总字节数,反映网络流量。 - **RX errors**:接收错误,可能原因包括校验和错误、帧格式不合法等。 - **dropped**:因资源不足(如缓冲区满)丢弃的包。 - **overruns**:硬件接收速度跟不上,导致新包覆盖旧包。 - **frame**:帧错误,如长度不符合标准或冲突检测失败。 **TX(发送统计)** - **packets/bytes**:同RX,但为发送数据。 - **TX errors**:发送失败,可能由驱动问题或链路故障引起。 - **dropped**:例如TCP重传时丢弃重复包。 - **overruns**:发送队列溢出。 - **carrier**:载波丢失,常见于物理层问题(如网线断开)。 - **collisions**:以太网在共享介质(如集线器)环境下的冲突计数,现代交换机网络通常无此问题。 **实际应用与扩展** 1. **网络排障**:高RX errors或collisions可能指示网络拥堵或设备故障;TX carrier问题需检查物理连接。 2. **性能优化**:调整MTU适配云服务或光纤网络,或使用巨型帧(如9000字节)提升大数据传输效率。 3. **安全分析**:启用混杂模式结合工具(如tcpdump)捕获所有流量,用于入侵检测或协议分析。 4. **配置持久化**:修改`/etc/network/interfaces`(Debian)或`/etc/sysconfig/network-scripts/*`(RHEL)文件,保存IP、MTU等参数。 理解网卡各参数不仅帮助诊断网络问题,也为优化配置和保障安全提供基础信息。在实际部署中,需结合具体场景(如数据中心、家庭网络)调整参数,平衡性能与稳定性。
7、CRC校验及网卡收发包流程
Linux软硬件中断:
硬件中断:由硬件产生的中断,强制性的,中断其实是一种提示信号。
软件中断:操作系统控制的。
这两种中断都是打断当前正在做的事。
通信的模式:全双工与半双工。目前网卡一般都采用全双工模式。
半双工:比如对讲机,好比单行车道,同一时间只能往一个方向开。
全双工:通信过程当中双方都能说话。
CRC:用来校验发送的网络数据包。
数据包都会分片发送,到了以太网之后会被切分成好多片,受限于mtu值的影响。
发片发了,对方在收的时候也会收到很多片,中间要经过很多网络设备进行中转,怎么确保包是正确的就是CRC校验值。
网卡发包收包流程:
发包:
从应用层开始一层一层发、封包,到了以太网层以后加上以太网层的数据帧frame(OSI协议做的事情),
封包的事情都是操作系统基于网络协议一层一层封装的,封完之后要交给网卡往外发了,数据帧就交给网卡的芯片,扔到网卡的缓冲区了,网卡会基于CRC校验的方法对包进行计算,算出一个值带在包的后面,然后往外发出去。
收包:
收到包以后也是先到网卡,网卡根据CRC校验的方法算一下这个包是不是OK的有没有丢包的问题,如果说没有丢失,网卡就可以去掉frame这种头,准备交给更上层的进行处理,到了网卡的缓冲区,交给操作系统(操作系统是根据网卡产生的硬件中断知道这个包来了)根据软件中断触发之后把数据帧从网卡缓冲区拿到内存,
接下来的操作就交给内核的程序交控制给用户态的程序来处理。
在Linux系统中,硬件中断是由外部硬件设备产生的强制性信号,用于提示CPU需要立即处理某项任务。而软件中断则由操作系统内部触发,用于控制和管理各种系统活动。这两种中断机制共同协作,确保系统能够及时响应和处理各种事件。 在通信领域,全双工和半双工是两种常见的通信模式。现代网卡通常采用全双工模式,以实现双向同时通信,提高数据传输效率。半双工模式,如对讲机系统,通信双方在同一时间内只能进行单向通信,类似于单行车道,只能允许数据流朝一个方向流动。 循环冗余校验(CRC)是一种用于检测网络数据传输错误的技术。通过对发送的数据包进行CRC计算,接收方可以验证收到的数据包是否完整和正确。数据包在传输过程中会被分成多个片段,每个片段都受到最大传输单元(MTU)大小的限制。接收方在收到所有片段后,会重新组装数据包,并通过CRC校验确保数据的准确性。 网卡在发送和接收数据包时遵循特定的流程。发送数据时,应用层的数据经过逐层封装,添加各层协议头部信息,最终形成以太网数据帧。数据帧被传递给网卡芯片,网卡根据CRC算法计算校验值,并将其附加到数据包末尾,然后发送到网络中。 接收数据时,网卡首先接收数据帧,并进行CRC校验以验证数据的完整性。如果数据无误,网卡会去除帧头,将数据传递给操作系统。操作系统通过硬件中断得知数据包到达,并触发软件中断,将数据帧从网卡缓冲区复制到内存中。随后,内核程序将控制权交给用户态程序,进一步处理接收到的数据。 --- **Linux系统中的CRC校验及网卡收发包流程:软硬件中断的协作与通信机制解析** 在Linux系统中,中断机制是处理异步事件的核心机制,分为硬件中断和软件中断两种类型,二者共同支撑着系统的实时响应和网络通信的高效运行。 **硬件中断:实时性与强制性的系统响应** 硬件中断是由外部硬件设备(如网卡、键盘、硬盘控制器等)主动触发的信号,通过中断控制器(如APIC)向CPU发送中断请求。这种中断具有强制性,意味着无论CPU当前正在执行什么任务,都必须立即暂停并跳转至中断处理程序。 例如,当网卡接收到新的数据包时,会通过硬件中断通知CPU,即使系统正在执行计算密集型任务,也必须优先处理网络数据。硬件中断的实时性保障了外部事件的及时响应,避免了数据丢失或延迟。 在Linux内核中,每个硬件中断都被分配一个中断向量号,通过中断描述符表(IDT)映射到对应的中断处理函数,形成高效的中断处理路径。 **软件中断:操作系统控制的内部调度** 软件中断则由操作系统主动触发,用于在系统内部进行任务调度、同步或异常处理。例如,系统调用(如`read()`或`write()`)会通过软件中断机制进入内核态,或者内核使用信号量、定时器等机制触发软件中断来协调多任务。 软件中断的优先级和触发时机由操作系统内核控制,通常用于非紧急但重要的系统管理任务。与硬件中断不同,软件中断的触发和处理流程更灵活,允许内核在合适的时机进行资源分配和任务切换。 **通信模式:全双工与半双工的本质差异** 通信模式决定了数据在传输链路上的流向和效率。**半双工模式**(如早期的共享以太网、对讲机系统)类似于“单行车道”,通信双方在同一时间内只能单向传输数据。例如,对讲机用户必须等待对方说完才能按下发射键,否则数据会冲突丢失。 这种模式成本低,但效率受限,适用于数据量小、实时性要求不高的场景。 **全双工模式**是现代网络的核心,它允许通信双方同时发送和接收数据,如同“双向车道”。以太网交换机和光纤网络普遍采用全双工,通过独立的发送和接收通道,大幅提升传输效率。例如,视频会议或大文件传输中,双方能实时交互数据而不需要等待,这依赖于全双工的物理层支持。 **CRC校验:数据完整性的守护者** 循环冗余校验(CRC)是网络通信中关键的错误检测机制。其原理基于数学算法:发送端将数据包视为二进制数据流,通过指定的生成多项式(如CRC-32使用的0x104C11DB7)进行除法运算,生成固定长度的校验码(如32位),附加在数据包末尾。 接收端收到数据后,用同样的多项式重新计算,若结果为零则认为数据无误,否则判定为传输错误(如位翻转、丢包)。 CRC的优势在于高效且可靠。它能检测所有单比特错误、双比特错误以及大部分突发错误,且计算开销小,适合硬件加速。 但需注意,CRC并非加密或数据完整性验证,它仅用于检测传输错误,无法防止恶意篡改。此外,不同协议层(如以太网帧、TCP/IP包头)可能使用不同的CRC算法,确保各层数据的独立校验。 **网卡收发包流程:软硬件协同的复杂链路** 网卡的收发包流程涉及多层协议栈、硬件加速与中断机制的紧密协作,以下为详细解析: **发包流程:从应用层到物理层的封装与发送** 1. **应用层生成数据**:用户程序(如Web浏览器、FTP客户端)生成待发送的数据。 2. **传输层封装**:数据进入传输层(TCP/UDP),添加端口号、序列号等头部,形成传输层数据段。 3. **网络层封装**:数据段传递到网络层(IP协议),添加源/目标IP地址、协议类型等,形成IP数据包。 4. **数据链路层封装**:IP包到达数据链路层(以太网协议),封装以太网帧头(包含源/目标MAC地址、类型字段)和帧尾(FCS校验字段预留位置)。 5. **硬件封装与CRC计算**:网卡芯片接收到完整的以太网帧后,首先进行硬件层面的处理: - 根据预设的生成多项式(如Ethernet CRC-32),对帧数据进行循环冗余计算,生成校验值填入FCS字段。 - 将数据帧分割为适合物理层传输的信号(如曼彻斯特编码,用于早期以太网;现代网络可能使用更复杂的调制技术)。 6. **物理层发送**:通过网线、光纤或无线信号将数据帧发送到网络介质中。 **收包流程:从物理信号到应用层解析** 1. **物理层接收与同步**:网卡接收来自网络的电信号或光信号,进行解码、时钟同步和帧边界检测,识别出完整的以太网帧。 2. **硬件CRC校验**:网卡芯片自动对收到的帧进行CRC计算,与帧尾的FCS字段比对。若校验失败,网卡直接丢弃该帧并向驱动报错;若通过,则认为数据完整。 3. **硬件中断触发**:当校验成功且帧目标MAC地址匹配本地地址(或广播地址)时,网卡通过硬件中断(如PCIe中断)通知CPU。 4. **中断处理与DMA传输**: - CPU响应中断后,调用网卡驱动程序的中断处理函数。 - 驱动程序通过DMA(Direct Memory Access)技术将帧数据从网卡缓冲区直接复制到内核内存,无需CPU干预,减少CPU开销。 5. **软件中断与协议栈处理**: - 硬件中断处理完成后,内核触发软件中断(如net_rx软中断),唤醒内核网络协议栈线程。 - 协议栈从内存中提取数据帧,根据帧头信息(如以太网类型字段)分发给对应协议处理模块(如IP、ARP)。 6. **逐层解封装与交付**: - 数据链路层剥离以太网帧头,验证帧完整性后,将IP包提交给网络层。 - 网络层解析IP头部,检查源/目标地址、协议类型,将数据段传递给传输层(TCP/UDP)。 - 传输层处理序列号、确认应答等逻辑,最终将用户数据交付给应用层程序。 **性能优化与扩展技术** 现代网卡和Linux内核通过以下技术进一步提升收发包效率: - **硬件加速**: - **TSO/TCP Segmentation Offload**:网卡代替CPU完成TCP数据包的拆分与重组,减少主机处理负担。 - **GRO/Generic Receive Offload**:网卡将多个小包合并为一个大包再提交给内核,降低中断频率和内存复制次数。 - **中断合并**:通过延迟中断响应或批量处理,减少频繁中断对CPU的冲击。 - **多队列支持**:利用多核CPU的并行处理能力,将不同网卡的收发包分配到不同队列,提升吞吐量。 - **零拷贝技术**:如DPDK(Data Plane Development Kit),绕过内核协议栈,直接在用户态处理数据包,适用于高性能网络应用。 **错误处理与网络可靠性** 当CRC校验失败时,网卡会立即丢弃数据帧,避免错误数据影响上层协议。TCP协议通过重传机制自动请求发送端重新发送丢失或错误的包,而UDP则依赖应用层自行处理丢包。此外,网络设备(如交换机、路由器)在转发数据包时也会进行独立的CRC校验,确保每一跳的传输质量。MTU(最大传输单元)限制导致的数据分片,会在接收端通过IP层的重组机制恢复,但分片过多可能增加延迟和出错概率,因此网络优化中常调整路径MTU值(如通过PMTU发现)来减少分片。 --- **总结** Linux系统中的网卡收发包流程是软硬件协同的典范:硬件中断与软件中断共同构建实时响应机制,全双工通信模式保障双向高效传输,而CRC校验则作为数据完整性的最后一道防线。通过理解这些底层技术细节,可以更深入地优化网络性能、排查通信故障,并为开发高性能网络应用提供基础支持。随着云计算、物联网的发展,网卡硬件加速技术和中断优化策略将继续演进,推动网络通信效率迈向新的高度。
8、CRC校验与网络溢出问题处理
通过查看CRC值来判断网络是否出问题。用到一个工具ethtool,-S ens33可以到多很多信息,我们需要关注的是 rx_crc_errors,ethtool -S ens33 |grep rx_crc_errors,如果查看的值一直在增长就说明网络环境出了问题,就沿途检查网络部环境,一定是有设备出问题了,排查网络一整条链路。
还可以查看网卡的overruns,这个也是反馈网络的拥堵情况,如果一直在增长就说明来的包特别的快走的包速度很慢,就说明服务端正在进行高流量,可以用:watch -n 0.5 ifconfig ens33 查看是否在意志增长,还可以while true;do ifconfig ens33;sleep 1;done 动态监控,
只看overruns:while true;do ifconfig ens33|grep overruns| grep RX;sleep 1;done
解决方案:
1、增大缓冲区
查看 ethtool -g ens33
ethtool -G ens33 rx 2048
ethtool -G ens33 tx 2048
想要永久修改就到rc.local文件里配置。
2、把请求分流,做负载均衡
在处理CRC校验和网络溢出问题时,我们首先需要通过查看CRC值来评估网络状态。利用ethtool工具,特别是执行“ethtool -S ens33”命令,可以获取大量相关信息,其中我们需要密切关注的是“rx_crc_errors”项。 通过“ethtool -S ens33 | grep rx_crc_errors”命令,如果发现该值持续增长,则表明网络环境可能存在问题。这时,我们需要对整个网络链路进行逐一检查,因为某些设备可能出现了故障。 此外,还可以通过检查网卡的“overruns”情况来判断网络的拥堵状态。如果该数值不断上升,说明数据包进入的速度远快于处理速度,这可能是由于服务端正经历高流量负载。 我们可以使用“watch -n 0.5 ifconfig ens33”命令来实时监控这一指标,或者通过“while true; do ifconfig ens33; sleep 1; done”命令进行动态监控, 特别是通过“while true; do ifconfig ens33 | grep overruns | grep RX; sleep 1; done”仅监控RX方向的overruns情况。 为解决这些问题,可以采取以下措施: 增大缓冲区:通过“ethtool -g ens33”查看当前设置, 然后利用“ethtool -G ens33 rx 2048”和“ethtool -G ens33 tx 2048”命令调整接收和发送缓冲区的大小。 要实现永久修改,可以将相关配置添加到rc.local文件中。 请求分流与负载均衡:通过把网络请求分配到多个处理单元,可以有效减轻单一设备的负载压力,提升整体网络稳定性与性能。 通过上述方法,可以更为有效地管理和优化网络环境,确保其稳定运行。 --- CRC校验与网络溢出问题处理:深度解析与实践指南 在复杂的网络环境中,确保数据传输的准确性和稳定性是运维工作的核心任务之一。 CRC(Cyclic Redundancy Check,循环冗余校验)作为一种广泛应用的错误检测机制,能够通过校验数据传输过程中的冗余校验码,帮助快速定位网络传输中的潜在问题。 同时,网络溢出(如overruns)则直接反映了网络链路的拥堵状态。本文将详细探讨如何通过ethtool工具结合其他监控手段,诊断并解决由CRC错误和网络溢出引发的网络问题。 一、通过CRC校验判断网络问题 CRC校验的基本原理是通过数学算法生成一个固定长度的校验码,附加在数据包末尾。接收端在收到数据后,重新计算校验码并与原始校验码对比,若不一致则说明数据在传输过程中发生了错误(如信号干扰、设备故障等)。在网络运维中,我们可以通过ethtool工具实时查看网卡的CRC错误统计信息。 执行命令`ethtool -S ens33`可获取网卡ens33的详细状态信息,其中`rx_crc_errors`指标尤为关键。若该数值持续增长,则表明网络链路中存在导致数据损坏的环节,可能的原因包括: 网线质量差(如老化、接触不良) 交换机或路由器端口故障 网卡硬件问题 网络环境电磁干扰严重 例如,某数据中心发现其服务器网卡`rx_crc_errors`值每小时增长超过100次,通过逐步排查发现是机柜间光纤跳线存在弯曲过度的问题,更换跳线后错误率显著下降。因此,当观察到`rx_crc_errors`持续上升时,需从物理层到链路层逐段检查设备状态,必要时使用线缆测试仪或更换设备进行替换测试。 二、网络拥堵与overruns监控 除了CRC错误,网络溢出(overruns)是另一个反映网络性能瓶颈的关键指标。Overruns通常发生在网卡接收缓冲区满时,后续数据包因无法存入缓冲区而被丢弃。其增长可能意味着: 网络流量远超网卡处理能力(如突发高流量) 服务器CPU或内存资源不足,导致处理数据包延迟 交换机或路由器配置不当,导致队列拥堵 通过以下命令可实时监控overruns: watch -n 0.5 ifconfig ens33 # 每0.5秒刷新一次网卡状态 或持续输出监控结果: while true; do ifconfig ens33; sleep 1; done 若需仅关注overruns(特别是接收方向),可使用grep过滤: while true; do ifconfig ens33 | grep overruns | grep RX; sleep 1; done 例如,某应用服务器在高并发场景下,overruns持续增长导致业务请求延迟。经分析发现,服务器单网卡接收队列已饱和,通过配置多队列(如RSS,Receive Side Scaling)并优化中断绑定后,overruns显著减少。 三、深入分析网络溢出原因 网络溢出的根源可能来自多个层面: 1.硬件瓶颈:网卡、交换机或路由器处理能力不足,尤其是老旧设备难以应对现代高速网络流量。 2.软件资源限制:服务器CPU利用率过高、内存不足或内核参数配置不当(如net.core.rmem默认值过小)。 3.网络架构问题:单点设备(如核心交换机)成为流量瓶颈,缺乏负载均衡或链路聚合。 4.突发流量冲击:如DDoS攻击、大规模数据传输任务等。 四、解决方案与优化实践 1.增大缓冲区 通过ethtool调整网卡接收/发送缓冲区大小: 查看当前缓冲区配置:`ethtool -g ens33` 临时调整缓冲区(如将接收缓冲区增至2048): 永久配置:需在系统启动脚本(如rc.local)中添加相关命令,或在网络配置文件中加入ethtool参数。 例如,针对高吞吐量场景,将服务器网卡缓冲区从默认1024提升至4096后,overruns减少了80%。 2. 负载均衡与流量分流 部署负载均衡器:通过L4(如TCP/UDP端口)或L7(HTTP/HTTPS应用层)负载均衡,将流量均匀分配到多个服务器节点。 链路聚合(LACP:将多条物理链路绑定为逻辑链路,提升带宽并实现故障切换。 QoS(服务质量)配置:在交换机或路由器上设置优先级队列,确保关键业务流量优先转发。 3. 优化服务器资源 升级服务器硬件(如CPU、内存、万兆网卡)。 调整内核参数(如增大net.core.netdev_max_backlog、net.core.rmem_max)。 使用中断优化技术(如RPS/IRQ affinity绑定)。 4. 网络架构优化 部署冗余网络设备,避免单点故障。 使用流量镜像工具(如SPAN/RSPAN)辅助故障定位。 定期压力测试网络链路,评估性能瓶颈。 五、实践案例与故障排除流程 某企业网络频繁出现丢包和延迟问题,排查步骤如下: 1. 使用`ethtool -S ens33 | grep rx_crc_errors`发现错误率持续上升。 2. 检查网线、交换机端口状态,更换疑似故障端口后错误率未改善。 3. 通过`watch ifconfig ens33`观察到overruns和dropped包同步增长。 4. 调整网卡缓冲区并配置负载均衡后,问题缓解,但高峰期仍偶发拥堵。 5. 最终通过链路聚合将两条千兆链路升级为万兆链路,彻底解决问题。 六、总结与建议 定期监控:利用脚本或监控工具(如Nagios、Zabbix)定时检测CRC错误和overruns,设置阈值触发告警。 分层排查:从物理层(线缆、设备)到协议层(TCP/IP)、应用层逐步定位问题。 性能调优:结合业务场景动态调整网络参数,避免“一刀切”配置。 预防性维护:定期更新设备固件、测试网络冗余机制,提前识别潜在风险。 通过综合运用CRC校验、overruns监控和系统化的优化策略,运维人员可以有效应对网络溢出问题,保障业务系统的稳定运行。在高速网络和云计算环境下,持续的网络性能优化将是提升用户体验和系统可靠性的关键。 扩展说明 增加了技术原理的深度解释(如CRC校验机制、overruns的产生原因)。 补充了实际故障案例和排查流程,增强实践指导性。 细化了解决方案中的操作步骤,并扩展了更多优化手段(如QoS、链路聚合)。 强调了分层排查和预防性维护的重要性,提升内容的系统性。
9、网络配置与网络服务
ip和ifconfig命令(得安装net-tools)都是临时配置ip信息,想要永久配置一定是存到硬盘,也就是写文件。把网络信息写到文件(ip是什么、子网掩码是什么、dns是什么...)里面去了,写完了之后操作系统凭什么知道要到这个文件里面去加载网络信息配到网卡上?必须要有一个进程来管理这件事。
所以永久配置一定要注意两个点:
网络配置文件
网络服务(本质就是一个进程)
在CentOS7系统中,网卡配置文件位于/etc/sysconfig/network-scripts/下以ifcfg开头的带着网卡名的这么一个文件里面写着配置信息。
在CentOS7系统中,对应的网络服务是network,我们可以查看一下: systemctl status network 这个network就是读配置文件信息,读了之后用命令配到网卡上。
在CentOS7系统中,还有一个更强大的服务:NetworkManager
他们两个都是在管理这个配置文件。当然我们自己也可以写一个shell脚本,无非就是读这个配置文件里面的信息然后解析过滤一些,再用命令配到网卡上而已。
在CentOS9系统中只有NetworkManager,并且管理的配置文件也发生了变化/etc/NetworkManager/system-connections/
可以看看 ls /etc/NetworkManager/system-connections/
systemctl status NetworkManager
在网络设置中,临时配置IP地址通常是通过ip和ifconfig命令完成的,这需要net-tools软件包的支持。然而,这种配置在系统重启后会丢失。如果要实现永久的网络配置,必须将相关信息写入硬盘上的配置文件中。这些文件包含了IP地址、子网掩码、DNS服务器等网络信息。 那么,操作系统是如何知道从哪个文件中加载这些网络信息并配置到相应的网卡上的呢?这就需要特定的进程来管理这一过程。因此,在进行永久网络配置时,需要注意以下两点: 网络配置文件 网络服务(本质上是一个管理网络配置的进程) 在CentOS 7系统中,网卡配置文件通常位于"/etc/sysconfig/network-scripts/"目录下,文件名以"ifcfg"开头,后面跟着具体的网卡名称。这些文件中包含了各种网络配置信息。 相应的网络服务为"network",我们可以通过"systemctl status network"命令来查看其状态。这个服务负责读取配置文件中的信息,并使用相关命令将网络配置应用到网卡上。 此外,CentOS 7系统中还有一个更强大的服务:NetworkManager。这两个服务都用于管理网络配置文件。当然,用户也可以编写自己的shell脚本来管理这些配置文件,步骤通常包括读取文件、解析过滤信息,然后使用命令配置到网卡上。 在CentOS 9系统中,NetworkManager成为唯一的网络管理服务,并且管理的配置文件位置发生了变化,现在位于"/etc/NetworkManager/system-connections/"目录下。 通过"ls /etc/NetworkManager/system-connections/"命令可以查看这些文件。同时,使用"systemctl status NetworkManager"可以查看NetworkManager服务的状态。 --- 网络配置与网络服务:IP、ifconfig命令、永久配置与网络管理进程 在网络配置中,临时配置IP地址通常是通过`ip`和`ifconfig`命令完成的,这需要安装`net-tools`软件包的支持。这两个命令可以快速配置网卡的IP地址、子网掩码等参数,但配置信息仅临时存储在内存中,系统重启后便会丢失。 例如,使用`ifconfig eth0 192.168.1.100 netmask 255.255.255.0`可以临时为eth0网卡分配IP地址,但这种方式显然不适合需要长期稳定网络连接的场景。 要实现永久的网络配置,必须将相关信息写入硬盘上的配置文件中。这些文件详细记录了IP地址、子网掩码、网关、DNS服务器、MAC地址绑定等参数。操作系统在启动时会自动读取这些文件,并通过网络服务进程将配置应用到网卡。 因此,永久配置的核心在于两个关键点:网络配置文件和网络服务进程。 在CentOS 7系统中,网卡配置文件位于`/etc/sysconfig/network-scripts/`目录下,文件名以`ifcfg-`开头,后接网卡名称(如`ifcfg-eth0`、`ifcfg-enp0s3`等)。以`ifcfg-eth0`为例,其内容可能如下: ``` TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static # 静态IP配置 IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=114.114.114.114 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=no NAME=eth0 DEVICE=eth0 ONBOOT=yes # 开机自动激活网卡 ``` 这些参数定义了网卡的静态IP配置、默认网关、DNS服务器等。值得注意的是,`ONBOOT=yes`确保系统在启动时自动加载该网卡的配置。 对应的网络服务为network,它负责读取上述配置文件,并通过底层命令(如`ip`或`ifconfig`)将配置应用到网卡。通过`systemctl status network`命令可以查看该服务的状态,包括是否已启动、运行时长、最近报错等信息。例如,输出可能显示: ``` network.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/network.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2023-04-12 10:00:00 UTC; 2 days ago Main PID: 1234 (network) CGroup: /system.slice/network.service └─1234 /sbin/network --daemon ``` 这说明`network`服务已启动,并作为系统核心服务之一持续运行,管理所有配置文件的加载和网络设备的激活。 此外,NetworkManager在CentOS 7中也是一个重要的网络管理工具,尤其适用于动态网络环境(如Wi-Fi切换、DHCP自动获取IP)。 它同样可以读取和解析网络配置文件,但功能更强大,支持图形界面管理、移动设备连接管理等。两者在系统中可能共存,但通常建议只启用其中一个以避免冲突。例如,如果使用NetworkManager,可能需要禁用`network`服务: ``` systemctl stop network systemctl disable network ``` 然而,在CentOS 9系统中,网络管理发生了显著变化。NetworkManager成为默认且唯一的网络服务,传统的`network`服务已被废弃。 配置文件位置也移至`/etc/NetworkManager/system-connections/`目录,该目录下存放着以连接名称命名的配置文件,例如`my-wifi-connection.nmconnection`。 这些文件采用更灵活的格式(通常为INI风格),支持更多高级配置选项,如VPN设置、代理配置等。例如: ``` [connection] id=my-wifi-connection type=wifi autoconnect=true [wifi] ssid=MyWiFiNetwork mode=infrastructure mac-address=XX:XX:XX:XX:XX:XX [ipv4] method=auto # 或 manual address1=192.168.2.100/24 gateway=192.168.2.1 dns=8.8.8.8;114.114.114.114 ``` 使用`systemctl status NetworkManager`可以查看其状态,确认其是否成功加载所有连接配置并管理网络设备。值得注意的是,NetworkManager的智能管理功能使其能够自动处理网络切换(例如从有线切换到无线),而无需用户手动干预。 手动配置与脚本编写:除了依赖系统服务,用户也可以编写shell脚本来管理网络配置。 例如,脚本可以读取`ifcfg`文件中的IP、子网掩码信息,然后使用`ip addr add`命令进行配置。但这种方式需要更精细的错误处理和状态检测,通常不如直接使用系统服务可靠。例如,一个简单的脚本示例: ``` #!/bin/bash # 读取配置 IP=$(cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep IPADDR | awk '{print $2}') NETMASK=$(cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep NETMASK | awk '{print $2}') # 配置网卡 ip addr add $IP/$NETMASK dev eth0 ``` 常见注意事项 1. 配置文件与服务的依赖关系:修改配置文件后,必须重启网络服务(如`systemctl restart network`或`NetworkManager`)才能生效。 2. 冲突检测:避免同时在多个服务中配置同一网卡,可能导致网络异常。 3. 动态与静态配置共存:若启用NetworkManager,需注意其可能覆盖手动静态配置,此时可通过nmcli命令或图形界面明确指定配置优先级。 总结:永久网络配置的核心在于将信息写入硬盘文件,并通过网络服务进程在系统启动时自动加载。CentOS 7和9的差异体现了网络管理工具从传统静态服务向更智能、动态的NetworkManager的演进。理解配置文件结构和服务机制,是进行可靠网络配置的基础。 ---
10、cento7.9配置静态IP方式一
在CentOS 7系统中,网卡配置文件位于`/etc/sysconfig/network-scripts/`目录下,文件名以`ifcfg-`开头,后接网卡名称。
vi 进入配置文件进行修改
BOOTPROTO 代表获取ip地址的方式,可以等于三种值:
dhcp:通过dhcp获取ip地址,动态ip地址,dhcp会掌管着一个ip地址池(其实就是一个配置文件里面写着ip地址的范围),如果发现还在租约范围之内地址就不变了。
static:静态获取ip地址,如果写none也代表静态的意思。IPADDR=设定ip地址,NETMASK=255.255.255.0 或者写PREFIX=24 就代表是24位子网掩码,网关GETWAY, DNS可能有多个,DNS1,DNS2... 查看网关的命令:route -n 还有cat /etc/resolv.conf
NAME 一定要写
UUID 有时候可能遇到找不到网卡的情况那就得加上。通过mcli conn命令直接就能查看到每个网卡的UUID。
DEVICE 和NAME保持一致。
ONBOOT=yes 就是网络服务默认开机启动的时候,激活网卡。
编辑完之后保存退出。
在CentOS7系统中,对应的网络服务是network
改完配置文件之后要生效,必须重启重新读入配置文件。systemctl restart network 当然ifup ifdown 也可以是实现。
在CentOS 7.9系统中,配置静态IP地址的步骤如下: 网卡配置文件位于/etc/sysconfig/network-scripts/目录下,文件名以ifcfg-开头,后接具体的网卡名称。使用vi编辑器进入相应的配置文件进行修改。 在配置文件中,BOOTPROTO参数用于指定获取IP地址的方式,它可以有三种不同的值: dhcp:通过DHCP服务器动态获取IP地址。这种方式下,DHCP服务器管理着一个IP地址池,如果设备仍在租约期内,IP地址可能保持不变。 static:采用静态方式获取IP地址,即手动配置。如果将值设置为none,也表示使用静态IP。 此外,还需要设置IPADDR(指定IP地址)、NETMASK(子网掩码,例如255.255.255.0,或者使用PREFIX=24来表示24位子网掩码)、GATEWAY(网关地址)。DNS服务器地址可能有多项,如DNS1、DNS2等。要查看网关信息,可以使用命令route -n,或者查看/etc/resolv.conf文件。 其它重要配置项包括: NAME:必须填写,通常与网卡名称一致。 UUID:在某些情况下,如果找不到网卡,需要添加此选项。通过nmcli conn命令可以直接查看每个网卡的UUID。 DEVICE:应保持与NAME一致。 ONBOOT=yes:确保网络服务在开机时自动启动并激活网卡。 完成配置文件的编辑后,保存并退出。在CentOS 7系统中,相关的网络服务为network。修改完配置文件后,需重启网络服务以使配置生效,可以使用命令systemctl restart network,也可以使用ifup和ifdown命令来实现。 通过以上步骤,您可以为CentOS 7.9系统正确配置静态IP地址。 --- **CentOS 7.9配置静态IP的详细步骤与说明** 在CentOS 7系统中,配置静态IP地址是一个基础且重要的网络配置任务。 **一、网卡配置文件的位置与命名** 网卡配置文件位于`/etc/sysconfig/network-scripts/`目录下,文件名以`ifcfg-`开头,后接网卡名称。例如,常见的网卡名称可能为`ifcfg-ens33`、`ifcfg-eth0`等(具体名称因系统硬件和网络配置而异)。 使用文本编辑器(如vi、nano)进入对应的配置文件进行修改。 **二、配置文件的详细参数解析** 进入配置文件后,需要修改的关键参数包括: 1. **BOOTPROTO**:指定IP地址获取方式。 - 值设为`static`或`none`时,代表使用静态IP。 - 值设为`dhcp`时,通过DHCP服务器动态获取IP(默认通常为动态配置)。 2. **IPADDR**:手动指定静态IP地址,例如`IPADDR=192.168.1.100`。 3. **NETMASK**:子网掩码,通常使用点分十进制格式,如`NETMASK=255.255.255.0`,或使用`PREFIX`参数代替(更简洁),例如`PREFIX=24`(等同于24位子网掩码)。 4. **GATEWAY**:默认网关地址,例如`GATEWAY=192.168.1.1`。 5. **DNS1、DNS2...**:指定DNS服务器地址,可设置多个,例如`DNS1=8.8.8.8`、`DNS2=114.114.114.114`。 6. **NAME**:必须填写,且需与文件名中的网卡名称一致(例如,文件名为`ifcfg-ens33`,则`NAME=ens33`)。 7. **UUID**:如果遇到系统无法识别网卡的情况(例如克隆虚拟机后),需要手动添加网卡的UUID。可通过命令`nmcli conn`查看每个网卡的UUID,格式如`UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`。 8. **DEVICE**:与`NAME`保持一致,例如`DEVICE=ens33`。 9. **ONBOOT**:设置为`yes`表示开机时自动启动并激活该网卡;若设为`no`,则需要手动激活。建议设为`ONBOOT=yes`。 **三、配置示例(完整文件)** 以下是一个典型的静态IP配置文件示例(假设网卡名为`ens33`): ``` TYPE=Ethernet BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=114.114.114.114 NAME=ens33 UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx DEVICE=ens33 ONBOOT=yes ``` **四、相关命令与辅助工具** 1. **查看网关**:使用`route -n`命令查看当前系统的路由表,网关信息通常在`default`行中显示。 2. **查看DNS配置**:`cat /etc/resolv.conf`文件列出了当前系统的DNS服务器列表。 3. **查看网卡状态与信息**: - `nmcli device status`:显示所有网卡的连接状态。 - `nmcli device show ens33`(替换`ens33`为实际网卡名):查看指定网卡的详细信息,包括UUID、IP地址等。 4. **网络服务管理**: - `systemctl status network`:查看网络服务状态。 - `systemctl restart network`:重启网络服务以应用配置。 **五、配置生效步骤** 1. 修改完网卡配置文件后,保存并退出编辑器。 2. 重启网络服务:`systemctl restart network`。 若重启失败,可尝试使用`ifup ens33`(激活指定网卡)或`ifdown ens33 && ifup ens33`(先禁用再启用)来临时生效。 3. 验证配置: - 使用`ip addr show ens33`查看网卡是否已分配静态IP。 - 通过`ping`命令测试网络连通性,例如`ping 192.168.1.1`(网关)或`ping www.example.com`(测试DNS解析)。 **六、常见问题与注意事项** 1. **无法识别网卡**: - 确认`NAME`和`DEVICE`是否与系统实际网卡名称一致。 - 若克隆虚拟机或更换硬件后,可能需要删除或修改UUID,或执行`nmcli conn reload`重新加载网络连接。 2. **网络服务无法启动**: - 检查防火墙是否阻止了网络服务(例如firewalld或iptables)。 - 确保配置文件中的参数无误,避免拼写错误或格式问题。 3. **DNS解析失败**: - 确认DNS服务器地址正确,且可正常访问。 - 检查`/etc/resolv.conf`是否被其他服务(如NetworkManager)动态覆盖,必要时锁定文件。 4. **多网卡配置**: 若系统有多个网卡,需分别为每个网卡创建对应的`ifcfg-xxx`文件,并配置不同的IP地址和参数。 **七、静态IP的应用场景** 静态IP通常用于以下场景: - 服务器需要固定IP以便远程访问(如Web服务器、数据库服务器)。 - 网络设备管理(如路由器、交换机)需要固定地址。 - 避免DHCP动态分配导致的IP冲突或地址变更问题。 **八、CentOS 7与后续版本的差异** - 在CentOS 8及更高版本中,网络管理工具默认改为`NetworkManager`,配置文件格式可能略有不同,但核心参数(如IP、子网掩码、网关)仍适用。如需使用传统配置,可禁用NetworkManager并继续使用`/etc/sysconfig/network-scripts/`下的文件。 **总结** 通过以上步骤,用户可以灵活地为CentOS 7.9系统配置静态IP地址,并掌握相关命令和故障排查技巧。建议在实际操作中,先备份原始配置文件(如`cp ifcfg-ens33 ifcfg-ens33.bak`),以防误操作导致网络无法连接。同时,根据具体网络环境调整参数,确保配置符合实际需求。 ---
11、cento7.9配置静态IP方式二
NetworkManager服务给我们提供了nmcli命令,所以要想使用nmcli命令必须保证NetworkManager开启:systemctl start NetworkManager
nmcli conn modify 网卡名 要修改什么 修改成什么样子用引号引起来
nmcli conn modify ens33 ipv4.address "192.168.1.71/24" 改ip地址、子网掩码
nmcli conn modify ens33 ipv4.getway "192.168.1.1"
nmcli conn modify ens33 ipv4.dns "8.8.8.8,1.1.1.1,2.2.2.2" 多个网关地址用逗号隔开
nmcli conn modify ens33 ipv4.method "manual" 修改获取网卡的方式静态的是manual。
改了半天查看ifconfig、route -n 、cat /etc/resolv.conf,发现都没变。然后查看:cat /etc/sysconfig/network-scripts/`目录下,文件名以`ifcfg-`开头,后接网卡名称。发现改的是配置文件。
为了让配置生效:
nmcli conn down 网卡名字
nmcli conn up 网卡名字
也可以重启服务生效。
在CentOS 7.9系统中配置静态IP地址时,可以使用NetworkManager服务提供的nmcli命令。首先,确保NetworkManager服务已启动: systemctl start NetworkManager 使用nmcli命令修改网络配置时,需要指定网卡名称以及要修改的参数。以下是一些示例命令: 将IP地址和子网掩码修改为192.168.1.71/24: nmcli conn modify ens33 ipv4.address "192.168.1.71/24" 设置默认网关为192.168.1.1: nmcli conn modify ens33 ipv4.gateway "192.168.1.1" 配置DNS服务器地址,多个地址用逗号隔开: nmcli conn modify ens33 ipv4.dns "8.8.8.8,1.1.1.1,2.2.2.2" 将IP地址获取方式修改为手动配置(即静态IP): nmcli conn modify ens33 ipv4.method "manual" 完成上述修改后,如果使用ifconfig、route -n或cat /etc/resolv.conf命令发现配置没有立即生效,这是因为修改的是配置文件。为了使配置立即生效,可以执行以下命令来重启网络连接: nmcli conn down ens33 nmcli conn up ens33 或者,也可以选择重启NetworkManager服务来使配置生效: systemctl restart NetworkManager 配置文件保存在/etc/sysconfig/network-scripts/目录下,文件名以ifcfg-开头,后接具体的网卡名称。可以使用文本编辑器查看和手动编辑这些配置文件,以确保所有配置都正确无误。 --- **在CentOS 7.9中使用nmcli配置静态IP的详细指南** 在CentOS 7.9系统中,配置静态IP地址通常需要使用NetworkManager服务提供的nmcli命令行工具。NetworkManager是一个动态网络管理工具,能够简化网络配置和管理任务。 通过nmcli命令,我们可以方便地配置网络连接的静态IP地址、网关、DNS等参数。以下是完整的配置步骤及注意事项。 **一、确认NetworkManager服务状态** 首先,必须确保NetworkManager服务已启动并处于运行状态。NetworkManager服务负责管理网络连接,如果未启动,nmcli命令将无法生效。可以通过以下命令检查服务状态: ``` systemctl status NetworkManager ``` 如果服务未启动,使用以下命令启动: ``` systemctl start NetworkManager ``` 若需要设置为开机自启,可执行: ``` systemctl enable NetworkManager ``` **二、使用nmcli命令配置静态IP** nmcli命令的核心语法是`nmcli conn modify 网卡名 参数 值`,所有参数值需要用引号引起来。以下分步骤详细说明: 1. **修改IP地址和子网掩码** 使用`ipv4.address`参数指定IP地址和子网掩码(使用CIDR格式)。例如,将ens33网卡的IP设置为192.168.1.71,子网掩码为24位(即255.255.255.0): 2. **配置默认网关** 使用`ipv4.gateway`参数设置网关地址: 3. **设置DNS服务器** `ipv4.dns`参数支持多个DNS服务器,用逗号分隔。例如,配置Google和Cloudflare的公共DNS: 4. **指定IP分配方式为手动(静态)** 必须将`ipv4.method`设置为`manual`,否则系统可能仍尝试通过DHCP获取IP: **三、应用配置并验证** 完成参数修改后,配置并不会立即生效。需要执行以下命令重启网络连接: 1. **禁用并重新启用指定网卡** 或者,重启NetworkManager服务(可能影响所有网络连接): ``` systemctl restart NetworkManager ``` 2. **验证配置** 使用以下命令检查配置是否生效: - **IP地址和网关**:`ifconfig ens33` 或 `ip addr show ens33` - **路由表**:`route -n`(确认默认网关是否正确) - **DNS配置**:`cat /etc/resolv.conf`(查看DNS服务器列表) **四、配置文件位置与手动编辑** nmcli命令实际上修改的是NetworkManager的配置文件。这些文件位于`/etc/sysconfig/network-scripts/`目录下,以`ifcfg-网卡名`命名(例如`ifcfg-ens33`)。使用nmcli修改后,可以查看该文件确认配置是否已写入。例如: ``` cat /etc/sysconfig/network-scripts/ifcfg-ens33 ``` 通常内容类似: ``` TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none # 对应nmcli中的ipv4.method "manual" DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=xxx-xxx-xxx-xxx-xxx DEVICE=ens33 ONBOOT=yes IPADDR=192.168.1.71 PREFIX=24 GATEWAY=192.168.1.1 DNS=8.8.8.8,1.1.1.1 ``` 如果需要手动编辑配置文件,需确保参数与nmcli设置一致,并重启网络连接使修改生效。 **五、常见问题与故障排除** 1. **配置未生效**: - 确认NetworkManager服务已启动。 - 检查网卡连接名称是否正确(例如ens33可能因硬件变化而异)。 - 确保`nmcli conn up`或重启服务后,系统未触发其他网络管理工具(如ifup/ifdown)的冲突。 2. **防火墙或SELinux限制**: - 如果系统启用了防火墙(如firewalld),可能需要开放相关端口或配置网络区域。 - SELinux处于Enforcing模式时,可能影响网络配置,可临时设置为Permissive模式测试:`setenforce 0`。 3. **动态IP与静态IP冲突**: 如果之前通过DHCP获取IP,需确保`BOOTPROTO`参数明确设置为`none`(对应nmcli中的`ipv4.method manual`)。 **六、其他实用nmcli命令** - **查看当前所有网络连接**: - **查看指定连接详情**: - **删除网络连接配置**: - **创建新的静态IP连接**: **七、总结** 使用nmcli配置静态IP在CentOS 7.9中高效且灵活,但需注意以下关键点: - 确保NetworkManager服务运行。 - 明确指定`ipv4.method`为`manual`以避免动态分配干扰。 - 通过`nmcli conn down/up`或重启服务使配置生效。 - 理解nmcli与配置文件(如`/etc/sysconfig/network-scripts/ifcfg-ens33`)的对应关系,便于排查问题。 ---
11、cento9配置静态IP
nmcli conn modify 进行修改ip地址、子网掩码、网关、dns、获取ip地址方式...
重启NetworkManager服务
在centos9中改的文件是 /etc/NetworkManager/system-connections/网卡名.nmconnection 查看 cat /etc/NetworkManager/system-connections/网卡名.nmconnection
ubuntuy也是类似的配置,只不过命令不同。
在CentOS 9中配置静态IP地址时,需要使用nmcli命令来修改网络连接设置。
具体而言,通过nmcli connection modify命令,您可以更改IP地址、子网掩码、网关、DNS服务器以及IP地址的获取方式。
完成上述修改后,请务必重启NetworkManager服务以使配置生效。
在CentOS 9中,与网络配置相关的文件位于/etc/NetworkManager/system-connections/目录下,需要修改与您的网卡对应的.nmconnection文件。
例如,使用cat /etc/NetworkManager/system-connections/网卡名.nmconnection命令可以查看该网卡的当前配置。
值得注意的是,Ubuntu系统的静态IP配置过程也大致相似,只不过所使用的命令有所不同。
在CentOS 9中配置静态IP地址时,需要使用nmcli命令来修改网络连接设置。 具体而言,通过nmcli connection modify命令,您可以更改IP地址、子网掩码、网关、DNS服务器以及IP地址的获取方式。 完成上述修改后,请务必重启NetworkManager服务以使配置生效。 在CentOS 9中,与网络配置相关的文件位于/etc/NetworkManager/system-connections/目录下,需要修改与您的网卡对应的.nmconnection文件。 例如,使用cat /etc/NetworkManager/system-connections/网卡名.nmconnection命令可以查看该网卡的当前配置。 值得注意的是,Ubuntu系统的静态IP配置过程也大致相似,只不过所使用的命令有所不同。 --- **在CentOS 9中配置静态IP的详细指南及与Ubuntu的对比** 在CentOS 9中配置静态IP地址时,需要使用nmcli(NetworkManager命令行工具)来修改网络连接设置。以下是详细的步骤和配置说明,同时对比了Ubuntu系统中的类似操作,帮助用户更全面地理解和应用。 **一、使用nmcli配置静态IP的步骤** 1. **确认网卡名称**: 首先,需确定要配置静态IP的网卡名称。可以通过以下命令查看当前系统中的网络接口: ``` nmcli device status ``` 输出中会显示网卡名称(如`ens33`、`eth0`等)及其状态。 2. **修改网络连接配置**: 使用`nmcli connection modify`命令修改指定网卡的连接参数。例如,将网卡`ens33`的IP地址设置为`192.168.1.100`,子网掩码为`255.255.255.0`,网关为`192.168.1.1`,并指定DNS服务器为`8.8.8.8`和`1.1.1.1`,同时禁用动态IP分配(改为静态模式): ``` nmcli conn modify ens33 \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns 8.8.8.8,1.1.1.1 \ ipv4.method manual ``` 参数说明: - `ipv4.addresses`:IP地址和子网掩码(使用CIDR格式,如`/24`表示255.255.255.0)。 - `ipv4.gateway`:网关地址。 - `ipv4.dns`:逗号分隔的DNS服务器列表。 - `ipv4.method manual`:设置为静态IP模式(对应动态模式的`auto`)。 3. **保存并激活配置**: 修改完成后,需要重新加载NetworkManager的配置并激活连接: ``` nmcli conn up ens33 # 激活连接 systemctl restart NetworkManager # 重启NetworkManager服务(可选,有时自动生效) ``` 注意:在部分情况下,修改后立即生效,但重启服务可确保所有配置完全应用。 4. **验证配置**: 使用以下命令检查IP配置是否生效: ``` ip addr show ens33 # 查看网卡IP地址 nmcli device show ens33 # 显示详细连接信息 ``` **二、配置文件路径与手动编辑(备选方法)** 除了nmcli命令,也可以通过直接编辑配置文件来修改网络设置。在CentOS 9中,NetworkManager的配置文件位于: ``` /etc/NetworkManager/system-connections/网卡名.nmconnection ``` 例如,`ens33`网卡的配置文件为`/etc/NetworkManager/system-connections/ens33.nmconnection`。使用文本编辑器(如`vim`或`nano`)打开该文件,手动修改以下内容: ``` [connection] id=ens33 type=ethernet [ipv4] address1=192.168.1.100/24 gateway=192.168.1.1 dns=8.8.8.8;1.1.1.1 method=manual ``` 保存后重启NetworkManager服务: ``` systemctl restart NetworkManager ``` **三、注意事项与常见问题解决** - **动态与静态模式冲突**:若系统默认启用了DHCP,需确保将`ipv4.method`明确设置为`manual`,否则可能覆盖静态配置。 - **防火墙与网络策略**:配置静态IP后,可能需要调整防火墙规则(如firewalld)以确保网络访问正常。 - **重启后未生效**:若修改后IP未生效,检查配置文件语法是否正确,或尝试删除原有连接并重新创建(`nmcli conn delete ens33`后再添加)。 **四、与Ubuntu系统的对比** 在Ubuntu(如版本22.04及以上)中,静态IP配置流程类似但命令工具不同。通常使用`netplan`工具,配置文件位于`/etc/netplan/`目录下(如`01-network-manager-all.yaml`)。例如: ``` # /etc/netplan/01-network-manager-all.yaml network: version: 2 renderer: NetworkManager ethernets: ens33: addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] dhcp4: no # 禁用动态IP ``` 保存后应用配置: ``` netplan apply ``` 若使用传统`ifupdown`工具(旧版本),则需编辑`/etc/network/interfaces`并重启网络服务。 **五、实际应用场景与建议** - **服务器环境**:静态IP适用于需要固定地址的服务器(如Web服务器、数据库服务器),便于远程访问和管理。 - **开发与测试网络**:在隔离环境中配置静态IP可简化设备间的通信。 - **自动化部署**:结合Ansible或SaltStack等工具,可通过脚本批量配置多台主机的网络参数。 **总结** 在CentOS 9中,通过nmcli命令行或直接编辑NetworkManager配置文件均可实现静态IP配置。需注意参数的正确性、服务重启以及与其他网络组件的兼容性。相比之下,Ubuntu采用netplan或ifupdown工具,但核心逻辑相似:指定IP地址、子网、网关和DNS,并禁用动态分配。 理解这些差异有助于在不同Linux发行版中高效管理网络设置。 ---
12、其他网络相关配置介绍
ll /proc/sys/net/ipv4/
不想让别人ping echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
cat /etc/hostname
设置永久的主机名:hostnamectl set-hostname zrg(设置的主机名)
改的就是/etc/hostname这个文件。
cat etc/services 里面放的就是系统当中的相关的服务以及对应的端口。
22对应ssh
80对应nginx
53对应dns
在探讨其他网络相关配置时,我们来到 /proc/sys/net/ipv4/ 目录。
如果不希望其他人能够 ping 通本机,可以通过执行 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 来实现。此命令将会把 icmp_echo_ignore_all 文件的内容设置为 1,从而忽略所有的 ICMP 回显请求。
要设置永久的主机名,可以利用 hostnamectl 命令,例如:hostnamectl set-hostname zrg。这个命令实际上修改的是 /etc/hostname 文件的内容,使其在系统重启后依然有效。
当我们查看 /etc/services 文件时,会发现其中列出了系统中各种服务以及它们对应的端口号。
例如:
22 端口对应的是 SSH 服务
80 端口对应的是 Nginx 服务
53 端口对应的是 DNS 服
深入解析Linux系统中的网络相关配置:从ICMP防护到服务端口映射 在Linux系统的网络配置管理中,`/proc/sys/net/ipv4/` 目录扮演着至关重要的角色。该目录下存储了大量与网络协议栈相关的内核参数,通过调整这些参数,可以灵活地控制系统的网络行为。 1. 禁止其他设备Ping本机:配置ICMP响应策略 当需要增强服务器的安全性或避免不必要的网络探测时,可以禁用ICMP Echo(即Ping响应)。 执行命令 `echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all` 后,系统将忽略所有接收到的ICMP Echo请求(如Ping请求),从而无法被外部设备通过Ping探测到。这一设置常用于以下场景: 安全防护:减少攻击者通过Ping扫描探测在线主机的可能性。 性能优化:避免因处理Ping请求而消耗系统资源,尤其在负载较高的服务器上效果显著。 需要注意的是,此修改为临时生效。若需永久配置,需将 `net.ipv4.icmp_echo_ignore_all=1` 添加到 `/etc/sysctl.conf` 文件中,并通过 `sysctl -p` 命令加载。 2. 设置永久主机名:`hostnamectl` 与`/etc/hostname`文件 主机名是网络环境中识别设备的关键标识,尤其在集群、容器化或分布式系统中至关重要。 通过 `hostnamectl set-hostname zrg` 命令,可以一键设置永久主机名,该操作会同步修改 `/etc/hostname` 文件内容。 例如,当将主机名设为 `zrg` 后,重启系统或使用 `hostname` 命令查看时,名称均会保持更新。此外,主机名的规范(如包含域名后缀)有助于DNS解析和自动化管理工具的正确识别。 3. `/etc/services`:服务与端口的映射字典 `/etc/services` 文件是Linux系统中服务名称与端口号的权威映射表。打开该文件(`cat /etc/services`),可以看到大量预定义的条目,例如: 22/tcp:SSH(Secure Shell)服务,用于安全远程登录。 80/tcp:HTTP(Hypertext Transfer Protocol),Web服务器(如Nginx、Apache)的标准端口。 53/udp和53/tcp:DNS(Domain Name System),分别用于UDP快速查询和TCP的复杂交互。 其他常见端口:如FTP(21)、SMTP(25)、HTTPS(443)等。 该文件的作用不仅是提供参考,还能被系统服务(如xinetd)和应用程序(如防火墙规则)自动引用。例如,配置防火墙时,可直接使用服务名称(如 `ssh`)而非端口号,提升配置的可读性。此外,管理员可自定义添加新服务条目,例如: ``` mycustomservice 12345/tcp # 自定义服务映射 ``` 扩展讨论:其他关键网络配置与工具** 除了上述内容,以下配置同样值得关注: **4. 防火墙与网络过滤** iptables*或firewalld:通过规则链控制入站/出站流量,例如禁止特定端口访问或限制IP范围。 示例命令:`iptables -A INPUT -p tcp --dport 12345 -j DROP` 阻止TCP 12345端口的访问。 5. 主机名解析与DNS配置 `/etc/hosts`:本地静态IP映射,优先级高于DNS解析。 `/etc/resolv.conf`:指定DNS服务器地址,影响域名解析行为。 6. 网络性能调优参数 TCP窗口大小(`/proc/sys/net/ipv4/tcp_window_scaling`):优化高延迟网络下的传输效率。 连接超时(`/proc/sys/net/ipv4/tcp_fin_timeout`):调整连接释放的等待时间,减少资源占用。 使用`sysctl`** 工具**:批量管理内核参数,例如 `sysctl -w net.core.somaxconn=4096` 提高并发连接上限。 7. 网络诊断工具集 `netstat`:查看网络连接状态、监听端口和路由表。 `ip`命令(iproute2工具包):替代ifconfig的现代化工具,支持更丰富的网络配置查询(如 `ip addr show`)。 `tcpdump`:抓包分析网络流量,辅助排查协议层问题。 8. 安全增强配置 禁止IP源路由攻击:通过 `echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route` 防止伪造路径的恶意流量。 关闭反向路径过滤(根据网络环境谨慎调整):`net.ipv4.conf.all.rp_filter=0`,但可能影响安全性。 总结 Linux系统的网络配置体系高度灵活且模块化,通过 `/proc/sys`、`/etc` 目录下的文件以及专用工具,管理员可以精细地控制网络行为。从基础的主机名、端口映射,到高级的性能调优与安全防护,理解这些配置项不仅能提升系统稳定性,还能为复杂网络环境下的故障排查与优化提供有力支持。 在实际部署中,需结合具体场景权衡安全性、性能与易用性,确保配置既满足需求又符合最佳实践。 ---
13、Linux系统路由转发流程
网络设备:
交换机是用来基于Mac地址广播的工作方式,如果没有接入vlan大家就都在一个局域网内。
如果要跨网段通信就要交给路由器,路由器有两根网线,一根网线接到交换机和我在一个网段,还有一根往外接。路由器上写了很多路由条目(哪个网段的包应该往哪个地址去转发通过哪个网卡出去)。
Linux机器可以当做路由器去用。
Linux处理数据包的过程:
数据包进来之后首先进入的是网卡里面,网卡驱动程序产生一个硬件中断通知操作系统的内核,网卡收到以后进入缓冲区,Linux根据路由条目匹配的结果来判断这个数据包往哪送:
如果是送给本机的,就由内核态交给用户态,基于nginx处理完包之后是要继续相应包的,产生个结果返回给客户端,回的时候还得看路由条目,从哪个接口出去。
如果不是访问本机的,只是把本机当做一台路由器(echo > 1 /proc/sys/net/ipv4/ip_forward)去用,那需要帮他转发出去,出去的时候看一下路由条目到底往哪发然后根据结果通过某个网卡发出去。能转发说明别人的网关至少能找到我,把我当成网关。
临时开启Linux主机的路由转发功能,重启网络服务则失效。
echo > 1 /proc/sys/net/ipv4/ip_forward 或者 sysctl -w net.ipv4.ip_forward=1
若要永久生效,则该写入配置文件
vi /etc/sysctl.conf
将net.ipv4.ip_forward的值改为1就行了。
在Linux系统的路由转发流程中,网络设备发挥着重要作用。交换机基于Mac地址进行广播式工作,如果没有划分VLAN,所有设备都在同一个局域网内。然而,当需要进行跨网段通信时,任务就交给了路由器。 路由器通常连接两根网线,一根连接到交换机,与设备位于同一网段,另一根则连接到外部网络。路由器上配置了众多路由条目,明确了不同网段的包应该通过哪个网卡转发至哪个地址。 Linux系统也能被当作路由器使用。当数据包进入Linux系统后,首先到达网卡,网卡驱动程序会产生一个硬件中断,通知操作系统内核。 数据包随后进入缓冲区,Linux系统根据路由条目匹配结果决定数据包的转发路径:如果数据包是发送给本机的,内核会将其传递给用户态程序,例如由Nginx进行处理。处理完成后,会生成响应包返回给客户端,返回路径同样依据路由条目决定从哪个接口发送出去。 如果数据包不是访问本机的,而是将本机作为中转路由器(通过echo > 1 /proc/sys/net/ipv4/ip_forward启用路由转发功能),Linux系统会依据路由条目将其转发出去。这个过程需要查看路由表,确定数据包的转发目标网卡。 需要注意的是,临时开启的路由转发功能在重启网络服务后会失效。若要永久启用该功能,需将net.ipv4.ip_forward=1写入配置文件/etc/sysctl.conf中。 --- Linux系统路由转发流程网络设备: 在计算机网络中,网络设备各司其职,共同构建起数据包的传输网络。 交换机作为局域网的核心设备,基于MAC地址进行数据帧的转发。其工作方式类似于“广播式”通信:当设备需要发送数据时,交换机会将数据包广播到所有端口(除非已学习到目标MAC地址对应的端口),从而实现同一网段内设备的高效通信。 在未接入VLAN(虚拟局域网)的环境下,所有设备默认处于同一广播域,即局域网内任意设备发送的数据包都会被其他设备接收。这种机制虽然便捷,但在大型网络中可能导致广播风暴和网络性能下降。 然而,当不同网段间的设备需要通信时,交换机的能力便显得捉襟见肘。此时,路由器作为“跨网段通信的桥梁”登场。路由器通常配备多个网络接口,每个接口连接不同的网段。 例如,一台路由器可能有一根网线连接家庭内部的交换机(处于192.168.1.0/24网段),另一根网线连接外部宽带网络(如运营商分配的公网IP)。 路由器上维护着路由表(Routing Table),其中包含丰富的路由条目,明确指示了“哪个网段的包应该通过哪个接口转发到哪个下一跳地址”。这些路由条目可以是静态配置的(管理员手动添加),也可以是动态学习获得的(通过协议如BGP、OSPF等)。 Linux操作系统凭借其强大的网络功能,可以轻松被配置为路由器。当Linux主机启用路由转发功能时,它便成为网络中的“中转站”,协助不同网段间的设备通信。接下来,我们将详细解析Linux系统处理数据包的全过程。 Linux处理数据包的核心流程: 当数据包进入Linux系统时,首先被网卡捕获。网卡驱动程序会生成硬件中断,通知CPU内核有数据到达。内核接收到中断后,将数据包从网卡缓冲区中提取,并送入网络协议栈进行处理。这一过程涉及多个内核模块,如Netfilter框架(用于包过滤和NAT)、IP协议层、链路层等。 数据包经过初步处理后,内核会根据路由表进行匹配。路由表是Linux系统中维护的“导航图”,每条路由条目包含以下关键信息: 目标网络(如192.168.2.0/24) 下一跳地址(如网关IP) 出接口(如eth1) 路由优先级(如度量值) 协议类型(静态/动态) 路由匹配的逻辑如下: 1. 精确匹配优先:若存在与目标IP完全匹配的路由(如主机路由),则直接使用该条目。 2. 最长前缀匹配:当无精确匹配时,选择子网掩码最长的匹配条目(如192.168.2.0/24比0.0.0.0/0更具体)。 3. 默认路由兜底:若仍未匹配,则使用默认路由(通常指向外部网关)。 根据匹配结果,数据包将进入不同的处理路径: 目标为本机:如果数据包的目标IP地址与Linux主机的某个接口IP匹配,内核会将数据包从内核态传递到用户态。 此时,应用程序(如Nginx、SSH服务)将接手处理。例如,当Web服务器收到HTTP请求时,会解析请求、处理业务逻辑,并生成响应包。响应包同样需要经过路由决策,确定出接口(如eth0),并通过该网卡发送回客户端。 目标为其他网段:若数据包的目标IP不属于本机任何接口,且Linux已启用路由转发功能(通过命令`echo 1 > /proc/sys/net/ipv4/ip_forward`或`sysctl -w net.ipv4.ip_forward=1`启用),内核将执行“路由转发”操作。 此时,内核会根据路由表条目,将数据包封装到新的帧结构(替换源MAC和目的MAC为转发路径上的下一跳设备地址),并通过指定的出接口发送出去。例如,当Linux主机作为家庭网关时,接收来自内网设备(如手机)访问互联网的请求,会将数据包转发到运营商提供的网关,从而完成跨网段通信。 路由转发功能的配置与注意事项: 临时开启Linux主机的路由转发功能非常简便,但重启网络服务或系统后配置会失效。为此,永久配置需要修改系统内核参数文件: ``` # 临时启用(立即生效) echo 1 > /proc/sys/net/ipv4/ip_forward # 或 sysctl -w net.ipv4.ip_forward=1 # 永久配置(需重启生效) vi /etc/sysctl.conf # 添加或修改以下行: net.ipv4.ip_forward = 1 ``` 值得注意的是,路由转发功能的启用可能带来安全风险。攻击者若利用该主机作为跳板,可能引发网络穿透或流量劫持问题。因此,在生产环境中,通常需要结合防火墙规则(如iptables)对转发的数据包进行过滤,仅允许可信流量通过。 深入解析:数据包转发的技术细节 1. Netfilter框架的作用:在转发过程中,Netfilter会检查数据包是否符合预设规则(如NAT转换、端口过滤),确保转发行为的可控性。 2. 路由缓存优化:Linux内核会维护路由缓存,加速后续相同目标地址的数据包查找,减少每次转发的路由计算开销。 3. 多网卡绑定与负载均衡**:对于高性能场景,可通过bonding技术将多个网卡绑定为单一逻辑接口,提升转发吞吐量。 4. 硬件加速与DPDK:在数据中心级应用中,利用DPDK(Data Plane Development Kit)实现数据包处理的硬件加速,可突破传统内核处理的性能瓶颈。 实际应用场景举例: 家庭网络网关:将Linux主机配置为家庭路由器,连接内网交换机和宽带调制解调器,实现多设备共享上网、端口映射等功能。 企业网络边界:作为DMZ区(隔离区)的防火墙/路由器,转发内网服务器与互联网的通信,并集成入侵检测系统。 容器网络架构:在Kubernetes等容器环境中,Linux主机的路由转发功能支持Pod跨节点通信,配合SDN(软件定义网络)技术实现灵活的网络拓扑。 总结: Linux系统的路由转发机制是构建复杂网络架构的基石。通过理解交换机与路由器的分工、内核数据包处理流程、路由表的匹配逻辑,以及灵活的配置选项,我们可以将普通Linux主机转变为功能强大的网络设备。 无论是小型家庭网络还是大规模数据中心,路由转发功能的合理应用都能显著提升网络的连通性和可靠性。同时,结合安全策略和性能优化技术,能进一步保障网络的稳定与安全。 ---
14、路由种类及匹配优先级
网络包无论是收还是发其实都是要匹配路由条目,然后才知道该怎么去处理。
添加路由条目分三种:
主机路由:32位子网掩码标识唯一的一台机器,主机路由指的是针对具体某一台机器应该怎么去发包。
网络路由:网络路由的子网掩码小于32位的,以24位子网掩码为例所包含的IP地址个数,留给主机位的是8位,最小是0,最大是255,包含200多个ip地址,所以网络路由指的是去往某一个网段到底该怎么走。
默认路由(网关):指的是没有匹配成功主机路由也没有匹配成功网络路由,最后做一个兜底的,网关帮你转发。
路由的优先级:越精确范围越小的优先级最高,主机路由高于网络路由高于默认路由。判断的窍门是子网掩码越大意味着留给主机位的越小。
route -n 查看的内容:
Destination
Gateway
Genmask
Flags
U 代表的是网络路由,去往某个网段的
UG 去往网关的
UH 去往主机的
Metric
Ref
Use
Iface 从哪个端口出去
在网络中,数据包的发送与接收都离不开路由条目的匹配,以确定正确的处理方式。添加路由条目通常分为以下三种: 主机路由:采用32位子网掩码,专门用于标识某一台特定的机器。这种路由明确指示了数据包应该如何发送到目标主机。 网络路由:子网掩码长度小于32位。例如,24位子网掩码的IP地址有8位留给主机部分,这意味着它涵盖了从0到255的IP地址范围,包括了200多个可能的IP地址。网络路由规定了如何到达某个特定网段。 默认路由(网关):当数据包没有成功匹配到主机路由或网络路由时,默认路由作为兜底选项,将数据包转发到网关,由网关进行进一步处理。 路由优先级规则是,范围越小、越精确的路由优先级越高。因此,主机路由的优先级高于网络路由,网络路由的优先级高于默认路由。判断优先级的一个技巧是:子网掩码越长,表示可用于主机的位数越少,路由就越具体。 使用命令“route -n”可以查看路由表,内容包括: Destination:目标网络或主机。 Gateway:网关地址。 Genmask:子网掩码。 Flags:标志位。 U:表示该路由是网络路由,指向某个网段。 UG:表示该路由通往网关。 UH:表示该路由通往主机。 Metric:路由的度量值。 Ref:参考计数。 Use:该路由被使用的次数。 Iface:数据包将通过哪个网络接口发送。 --- 路由种类及匹配优先级:网络包传输的核心机制 在网络通信中,无论是接收还是发送数据包,其核心流程都离不开路由条目的匹配。路由系统通过查询路由表,确定数据包的下一跳地址或出口接口,从而指引数据流向正确的目标。 了解路由的种类和优先级规则,是理解网络架构与数据包传输路径的基础。 一、路由条目的三种类型 路由条目根据目标地址的精确程度分为三类,每种类型在网络通信中承担不同的角色: 1. 主机路由(Host Route) 主机路由使用32位子网掩码(即255.255.255.255),专门用于标识网络中的某一台唯一主机。 例如,当需要向特定服务器(如IP地址为192.168.1.100)发送数据包时,主机路由会明确指定该数据包应通过哪个接口或下一跳设备到达目标主机。这种路由的精确性最高,通常用于需要直接访问特定设备的场景,如服务器维护或安全策略配置。 2. 网络路由(Network Route) 网络路由的子网掩码长度小于32位,例如常见的24位(255.255.255.0)。 此时,IP地址中的前24位用于网络部分,后8位留给主机部分,允许该网络段包含256个IP地址(从0到255,但通常0和255保留用于网络地址和广播地址,实际可用主机IP约为254个)。 网络路由的作用是指示数据包如何到达某个特定的IP网段。例如,当数据包的目标地址属于192.168.1.0/24网段时,网络路由会指定该数据包应通过哪个网关或接口进入该网段,再由该网段内的设备自行处理。这种路由适用于大多数局域网和互联网连接场景,是构建分层网络架构的关键。 3. 默认路由(Default Route / 网关) 默认路由是网络中的“兜底”选项,通常使用0.0.0.0/0的子网掩码(即所有位均为0),表示匹配所有未明确指定的路由条目。当数据包的目标地址无法匹配任何主机路由或网络路由时,路由器会自动将数据包转发到默认路由指定的网关。 网关设备通常连接外部网络(如互联网),负责进一步转发数据包或将其交付给更高级的路由器。默认路由在家庭网络、企业边界路由器以及互联网接入场景中至关重要,它确保了所有“未知”目标的数据包都有一个明确的传输路径,避免数据包因无路由可匹配而被丢弃。 二、路由优先级:精确性决定路径选择 不同路由条目之间的优先级遵循“越精确范围越小,优先级越高”的原则。这一规则确保了数据包始终按照最具体的路径传输。优先级顺序为: 主机路由(UH):由于直接匹配单个IP地址,优先级最高。 网络路由(U):匹配整个网段,优先级次之。 默认路由(UG):作为最后匹配项,优先级最低。 判断优先级的窍门在于子网掩码的长度:子网掩码越长(即二进制1的位数越多),留给主机位的位数越少,路由条目就越精确。例如,32位子网掩码的主机路由比24位子网掩码的网络路由更精确,因此优先匹配。 三、路由表解析:route -n命令详解 通过`route -n`命令可以查看系统的路由表信息,其输出包含多个关键字段,理解这些字段有助于诊断网络问题: Destination:目标地址,可以是具体的IP地址、网段(如192.168.1.0/24)或默认路由(0.0.0.0)。 Gateway:下一跳网关的IP地址。若目标为直连网络(如本地局域网),该字段可能为`0.0.0.0`,表示数据包直接通过本地接口发送。 Genmask:子网掩码,用于标识目标地址的范围。 Flags:标志位组合,提供路由类型及状态信息: U(Up):路由条目已启用。 G(Gateway):该路由需要通过网关转发。 H(Host):主机路由,目标为单一主机。 D(Dynamic):动态路由协议(如OSPF、BGP)生成的路由。 M(Modified):手动修改过的路由。 Metric:路由的度量值,用于动态路由协议选择最优路径(如跳数、带宽等)。静态路由的Metric通常为0或手动配置值。 Ref:引用计数,表示该路由被其他系统组件引用的次数。 Use:该路由条目被使用的次数统计,反映近期流量情况。 Iface:数据包将通过的物理或虚拟接口(如eth0、wlan0)。 例如,以下路由表条目: ``` Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 ``` 解析: 第一条条目为网络路由,指示所有目标为192.168.1.0/24网段的数据包通过eth0接口直接发送(无需网关)。 第二条条目为默认路由,所有其他目标地址的数据包将通过网关192.168.1.1转发,同样使用eth0接口。 四、路由匹配流程与潜在问题 当路由器收到数据包时,匹配流程通常如下: 1. 检查是否存在精确匹配的主机路由; 2. 若未匹配,查找覆盖目标IP的网络路由; 3. 若仍未匹配,使用默认路由转发。 若路由配置不当,可能导致以下问题: 路由冲突:存在多个优先级相近的路由条目覆盖同一目标地址,可能导致数据包传输路径混乱。 黑洞路由:错误配置的子网掩码可能导致部分IP地址被“吞噬”,无法访问。 默认路由缺失:未配置默认路由时,无法访问外部网络,导致互联网连接中断。 五、路由配置与管理 在实际网络中,路由可以通过静态配置或动态路由协议(如RIP、OSPF、BGP)自动学习。 静态路由适用于小型网络或需要严格控制的场景,而动态路由则在大规模网络或拓扑频繁变化的场景中更具优势。管理员需根据网络规模、安全性需求及性能要求合理选择路由配置方式。 总结 路由系统是网络通信的“导航系统”,通过主机路由、网络路由和默认路由的层级结构,结合优先级规则,确保数据包高效、准确地到达目标。 理解路由条目的类型、优先级以及路由表的解析,是网络故障排查、性能优化和安全策略设计的基础。通过`route -n`等工具,管理员可以实时监控网络路径,保障网络服务的稳定性与可靠性。 ---
15、路由条目的临时添加与永久添加
route命令临时添加三种路由:主机路由、网络路由、默认路由,以及怎么删除:
添加主机路由:
route add -host 192.168.1.20/32 dev ens33
删除主机路由:
toute del -host 192.168.1.20/32
添加网络路由:
route add -net 192.168.1.0/24 dev ens36
删除网络路由:
route del -net 192.168.1.0/24
添加默认路由:正常情况下默认路由只有一条,且加网关的时候不要加子网掩码。
route add default gw 192.168.1.1 dev ens33
删除默认路由:
route del default gw 192.168.1.1
永久添加:
在centos7中路由配置文件在:/etc/sysconfig/network-scripts/下以route-开头的带着网卡名的这么一个文件里面写着配置信息,不同网卡名不同的配置文件。
cat /etc/sysconfig/network-scripts/route-ens33
在配置文件有一些编写的规则。
当然也可以用nmcli命令,比如:
添加主机路由:如果没有指定子网掩码,默认就是主机路由
nmcli conn modify ens33 +ipv4.routes "192.168.1.57/32 0.0.0.0"
删除主机路由:
nmcli conn modify ens33 -ipv4.routes "192.168.1.57 0.0.0.0"
添加网络路由:
nmcli conn modify ens33 +ipv4.routes "192.168.1.56/24 192.168.1.1"
删除网络路由:
nmcli conn modify ens33 -ipv4.routes "192.168.1.56/24 192.168.1.1"
添加默认路由:在centos9中子网掩码要加/0
nmcli conn modify ens33 +ipv4.routes "0.0.0.0 192.168.1.60"
删除默认路由:
nmcli conn modify ens33 -ipv4.routes "0.0.0.0 192.168.1.60"
生效:nmcli conn up ens33
在路由配置中添加和删除条目是一项基础的网络管理任务。route命令允许我们临时添加三种类型的路由:主机路由、网络路由以及默认路由。以下是具体的操作示例: 临时添加路由 添加主机路由: Unknown 复制 route add -host 192.168.1.20/32 dev ens33 这将添加一条到IP地址192.168.1.20的路由,通过ens33网络接口。 删除主机路由: Unknown 复制 route del -host 192.168.1.20/32 这将从路由表中移除上述添加的主机路由。 添加网络路由: Unknown 复制 route add -net 192.168.1.0/24 dev ens36 此命令添加了一个到192.168.1.0/24网络的路由,数据将通过ens36接口传输。 删除网络路由: Unknown 复制 route del -net 192.168.1.0/24 这将从路由表中删除上述添加的网络路由。 添加默认路由: Unknown 复制 route add default gw 192.168.1.1 dev ens33 默认路由通常只应设置一个,它指定了所有未匹配包的目的网关。在本例中,网关是192.168.1.1,数据通过ens33接口发送。注意,添加默认路由时不需要指定子网掩码。 删除默认路由: Unknown 复制 route del default gw 192.168.1.1 这会删除之前设置的默认路由。 永久添加路由 在CentOS 7系统中,路由配置信息保存在/etc/sysconfig/network-scripts/目录下的特定文件中,这些文件以route-开头并包含相应的网络接口名。通过编辑这些文件,可以实现路由的永久性配置。 查看当前路由配置: Unknown 复制 cat /etc/sysconfig/network-scripts/route-ens33 这将显示ens33接口的路由配置详情。 使用nmcli命令配置路由: 添加主机路由: Unknown 复制 nmcli conn modify ens33 +ipv4.routes "192.168.1.57/32 0.0.0.0" 如果不指定子网掩码,默认会添加一条主机路由。 删除主机路由: Unknown 复制 nmcli conn modify ens33 -ipv4.routes "192.168.1.57 0.0.0.0" 添加网络路由: Unknown 复制 nmcli conn modify ens33 +ipv4.routes "192.168.1.56/24 192.168.1.1" 删除网络路由: Unknown 复制 nmcli conn modify ens33 -ipv4.routes "192.168.1.56/24 192.168.1.1" 添加默认路由(在CentOS 9中,子网掩码需指定为/0): Unknown 复制 nmcli conn modify ens33 +ipv4.routes "0.0.0.0/0 192.168.1.60" 删除默认路由: Unknown 复制 nmcli conn modify ens33 -ipv4.routes "0.0.0.0/0 192.168.1.60" 好的!以下是扩写后的内容,增加了更多细节、背景知识、实际应用场景和操作注意事项,长度扩展至约150%: --- **路由条目的临时添加与永久添加(route命令及nmcli配置)** 在网络管理中,路由条目的配置是确保数据包正确转发的基础。无论是临时调试网络还是永久调整路由策略,Linux系统提供了多种工具和方法来实现这一目标。本文将详细介绍使用`route`命令临时添加路由条目,以及通过配置文件和`nmcli`命令永久配置路由的方法,并涵盖常见操作示例和注意事项。 --- ### **一、临时添加路由(使用route命令)** 临时添加的路由条目在系统重启或网络服务重启后会失效,适用于临时测试、故障排查或应急场景。`route`命令支持三种类型的路由添加:主机路由、网络路由和默认路由。 #### **1. 添加主机路由** - **命令格式**: ``` route add -host 192.168.1.20/32 dev ens33 ``` - **解释**: - `-host`参数指定目标为主机(单个IP地址),而非网络。 - `192.168.1.20/32`:目标IP地址及子网掩码(/32表示仅匹配单个主机)。 - `dev ens33`:指定数据包通过ens33接口发送。 - **应用场景**:例如,当需要临时将某个特定主机的流量通过指定接口转发时,常用于测试网络连通性或绕过默认路由。 #### **2. 删除主机路由** - **命令格式**: ``` route del -host 192.168.1.20/32 ``` - **注意**:删除时可不指定接口,系统会自动匹配现有路由条目。 #### **3. 添加网络路由** - **命令格式**: ``` route add -net 192.168.1.0/24 dev ens36 ``` - **解释**: - `-net`参数指定目标为一个网络(如192.168.1.0/24)。 - `/24`子网掩码表示网络包含256个IP地址(192.168.1.1~192.168.1.254)。 - `dev ens36`:数据包将通过ens36接口转发到目标网络。 - **应用场景**:当需要临时将某个网段的流量通过特定接口转发,例如连接临时测试网络。 #### **4. 删除网络路由** - **命令格式**: ``` route del -net 192.168.1.0/24 ``` - **提示**:删除时需确保子网掩码与添加时一致,否则可能无法匹配。 #### **5. 添加默认路由** - **命令格式**: ``` route add default gw 192.168.1.1 dev ens33 ``` - **说明**: - `default`指定为默认路由(即所有未匹配其他路由的数据包均通过此路由转发)。 - `gw 192.168.1.1`:指定网关IP地址。 - 无需指定子网掩码,默认路由本质上是`0.0.0.0/0`(匹配所有地址)。 - **应用场景**:当系统未配置默认路由或需要临时替换现有默认网关时。 #### **6. 删除默认路由** - **命令格式**: ``` route del default gw 192.168.1.1 ``` - **注意**:删除默认路由可能导致网络无法访问外部网络,需谨慎操作。 --- ### **二、永久添加路由(CentOS 7及nmcli配置)** 永久路由配置在系统重启后仍生效,适用于固定网络环境或长期策略。在CentOS 7中,路由配置通常通过以下两种方法进行: #### **1. 通过路由配置文件(/etc/sysconfig/network-scripts)** - **配置文件路径**:位于`/etc/sysconfig/network-scripts/`目录下,文件名格式为`route-<网卡名>`(如`route-ens33`)。 - **配置示例**: ``` # 文件:/etc/sysconfig/network-scripts/route-ens33 # 添加主机路由 192.168.1.20/32 via 192.168.1.254 dev ens33 # 添加网络路由 192.168.2.0/24 via 192.168.1.253 dev ens36 # 添加默认路由 default via 192.168.1.1 dev ens33 ``` - **编写规则**: - 每行代表一条路由,格式为`目标IP/子网掩码 via 网关IP dev 接口名`。 - 无需使用`-host`或`-net`参数,系统根据子网掩码自动判断类型。 - 网关和接口需与网络配置一致。 - **生效方法**:修改后需重启网络服务或重启系统,例如: ``` systemctl restart network # 重启网络服务 ``` #### **2. 使用nmcli命令(NetworkManager管理)** nmcli是CentOS中NetworkManager的命令行工具,适合动态配置网络参数。 **(1)添加主机路由**: ``` nmcli conn modify ens33 +ipv4.routes "192.168.1.57/32 0.0.0.0" ``` - **解释**: - `+ipv4.routes`:添加一条IPv4路由。 - `192.168.1.57/32`:目标主机路由。 - `0.0.0.0`:网关为空(表示直连,无需通过网关转发)。 - **注意**:若未指定子网掩码,nmcli默认将其视为主机路由。 **(2)删除主机路由**: ``` nmcli conn modify ens33 -ipv4.routes "192.168.1.57 0.0.0.0" ``` - `-ipv4.routes`:删除指定路由。 **(3)添加网络路由**: ``` nmcli conn modify ens33 +ipv4.routes "192.168.1.56/24 192.168.1.1" ``` - **说明**:目标网络为192.168.1.56/24,通过网关192.168.1.1转发。 **(4)删除网络路由**: ``` nmcli conn modify ens33 -ipv4.routes "192.168.1.56/24 192.168.1.1" ``` **(5)添加默认路由(CentOS 9注意)**: ``` nmcli conn modify ens33 +ipv4.routes "0.0.0.0/0 192.168.1.60" ``` - **注意**:在CentOS 9或较新版本中,默认路由需显式指定子网掩码`/0`。 **(6)删除默认路由**: ``` nmcli conn modify ens33 -ipv4.routes "0.0.0.0 192.168.1.60" ``` --- ### **三、扩展内容与注意事项** 1. **路由优先级**:临时路由和永久路由可能同时存在,系统按优先级匹配(通常临时路由优先级更高)。 2. **验证路由配置**: - 使用`route -n`或`ip route show`查看当前路由表。 - 通过`ping`或`traceroute`测试数据包转发路径。 3. **多网卡环境**:需为每个网卡配置独立的路由,避免冲突。 4. **网络服务重启影响**: - 临时路由在`systemctl restart network`或重启系统后丢失。 - 永久路由需确保配置文件正确或nmcli修改后保存。 5. **兼容性差异**: - 在较新版本(如CentOS 9)中,nmcli默认路由需显式子网掩码`/0`,旧版本可能自动补全。 - 其他发行版(如Ubuntu)可能使用不同的配置路径(如`/etc/network/interfaces`)。 6. **常见错误**: - 网关IP或接口名错误可能导致路由无法生效。 - 子网掩码不匹配可能导致路由覆盖范围错误。 7. **最佳实践**: - 生产环境优先使用永久配置,避免临时路由意外丢失。 - 在配置永久路由前,建议先通过临时路由测试连通性。 四、总结 路由条目的临时添加和永久配置是网络管理中的核心技能。临时路由(`route`命令)适用于快速调试和临时策略,而永久配置(配置文件或nmcli)确保系统长期稳定运行。 理解不同命令参数、配置格式及系统差异,有助于灵活应对各种网络场景。无论是小型测试环境还是复杂的企业网络,合理配置路由都是保障通信畅通的基础。 ---
16、网络命令补充
解决网络问题的排查思路。
源头是客户端,客户端请求到了客户端自己的网卡,客户端自己的网卡沿着一根网线到了客户端连的交换机上,交换机再一步一步走走到服务端了,到了服务端的网卡,到了服务端网卡之后再往上层应用程序交(根据用户端提供的IP对应的端口号)。
客户端可能有问题,外面的网络根本访问不到
arping命令:会把mac地址返回回来,用来检测局域网内ip地址冲突。
张仁国

浙公网安备 33010602011771号