网络管理
# 网卡名字修改
以太网协议规定上网的机器必须有一块网卡, 俗成以太网卡
CentOS6及以前, 第一块、第二块网卡依次命名为 eth0、eth1... CentOS7网卡的命名为ens33..
除此之外,都有一块命名为lo虚拟的本地回环网卡.. 数据包到网卡了,没有往交换机走,原路返回,自己发给自己.
127.0.0.1 相当于一台计算机即当客户端也当服务端,用于保证软件本身的开发没问题,排除网络的因素
"""-- 1.GRUB添加kernel参数 --"""
vim /etc/sysconfig/grub # -- GRUB_CMDLINE_LINUX="rhgb quiet 'net.ifnames=0 biosdevname=0'"
"""-- 2.加载到引导分区 --"""
grub2-mkconfig -o /boot/grub2/grub.cfg
"""-- 3.修改网卡配置文件名称以及配置文件里网卡的名称 --"""
cd /etc/sysconfig/network-scripts/
mv ifcfg-ens33 ifcfg-eth0
sed -i "s#ens33#eth0#g" ifcfg-eth0 # -- 将ens33改为eth0
## 注意哦,前三步没有先后顺序,怎么样都可以
"""-- 重启系统生效 --"""
reboot
2
3
4
5
6
7
8
9
10
11
12
13
14
15
关机为vm虚拟机添加一张NAT模式的网卡.. 添加后开机 可以发现第二块网卡的默认名字是eth1
"""-- 临时激活网卡 --"""
[root@localhost ~]# ifconfig eth1 up
[root@localhost ~]# ifconfig | grep eth[01]
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
2
3
4
5
# 网络相关的一些命令
# lspci
查看当前系统所连接的所有网卡
[root@localhost ~]# lspci | grep -i eth
# 可以看到,现目前有两块以太网协议的网卡
02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
02:04.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
2
3
4
# mii-tool
检测网卡是否已经连接好网线
[root@localhost ~]# mii-tool eth1
eth1: negotiated 1000baseT-FD flow-control, link ok # -- link ok代表该网卡是接了网线的
2
# ping
用于测试两台主机网络是否连通
ping 目标IP地址
ping -c 次数 目标IP地址
原理: ping命令会基于ICMP协议(TCP/IP协议簇的一个子协议)给对方发送数据包,若对方回应,就代表连通了.
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
设置此命令后,其他任何主机都ping不同本机.. 通常会在整个集群架构的网络环境部署完成后进行该设置..
2
# ifconfig
# 基本选项
ifconfig
-- 查看已经激活的网卡信息
ifconfig -a
-- 查看所有网卡信息(包括未激活的网卡)
ifconfig eth0
-- 查看单个网卡信息
ifconfig eth1 up
-- 临时 开启网卡
ifconfig eth1 down
-- 关闭网卡 实验时,别关闭eth0网卡,xshll远程连接是通过该网卡连接的..
ifconfig eth1 192.168.1.122 netmask 255.255.255.0
or ifconfig eth1 192.168.1.122/24
-- 临时 为网卡设定IP和掩码 (重启服务器失效)
ifconfig eth0:1 192.168.0.2 netmask 255.255.255.0
-- 临时 为网卡配置子接口
ifconfig eth0:1 down
or ifconfig eth0:1 del 192.168.0.2
-- 删除该子接口 不必指定子网掩码
注意哦! 通过ifconfig命令的配置都是 临时 配的!! 重启机器后就恢复如初了..
若想永久配置,需要修改 /etc/sysconfig/network-scripts
路径下面的配置文件
## -- 若要使用ifconfig命令,需要安装 yum install net-tools -y
[root@localhost ~]# rpm -qf `which ifconfig`
net-tools-2.0-0.25.20131004git.el7.x86_64
"""
eth0:1 此网卡是不存在的,是没有mac地址的,可叫做虚拟网卡
相当于给eth0配了两个IP地址.. 但流量走的都是同一张网卡
真实环境下,若要给服务器配置两个IP地址,会使用两个网卡,两个网卡处于不同的网段并连接不同的交换机..这样靠谱些.
"""
[root@localhost ~]# ifconfig eth0:1 192.168.0.2/24
[root@localhost ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.150.131 netmask 255.255.255.0 broadcast 172.16.150.255
... ... ...
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255
ether 00:0c:29:90:30:3e txqueuelen 1000 (Ethernet)
... ... ...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 命令结果解析
ifconfig eth0
""" 第一行
从flags标记可知该接口已启用,支持广播、组播. MTU最大传输单元:1500字节
flags参数:
UP:表示“接口已启用”/网卡已经激活
BROADCAST:表示该网卡支持广播,能收到广播包
RUNNING:表示网卡已连接网线,该网线能正常工作
MULTICAST:表示该网卡支持多播..
多播/组播简单来说就是将多台机器放到一个组里,发包的时候,只有这个组里的机器能收到
promisc:繁杂模式,简单来说,这台机器所有数据包都可以收到
我们知道局域网里广播的数据包,计算机收到后发现目标主机不是自己,会将这个包丢掉
若该计算机开启了繁杂模式,就不会将此广播包丢掉.抓包.
繁杂模式通常用于kali等渗透测试,安全方面的配置..
感兴趣可以参考:https://www.cnblogs.com/linhaifeng/articles/13949611.html
`ifconfig eth0 promisc` # -- 开启繁杂模式
`ifconfig eth0 -promisc` # -- 关闭繁杂模式
"""
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
# -- 网卡的IPv4地址、子网掩码、本网段的广播地址
inet 172.16.150.131 netmask 255.255.255.0 broadcast 172.16.150.255
# -- IPv6地址、掩码长度、作用域,link表示仅该接口有效
inet6 fe80::20c:29ff:fe90:303e prefixlen 64 scopeid 0x20<link>
# -- 以太网卡的MAC地址、以太网卡最大传输队列长度,接口类型为Ethernet
ether 00:0c:29:90:30:3e txqueuelen 1000 (Ethernet)
""" R接收 T发送"""
# -- 从该主机开机那一刻到现在,此接口/网卡累积接收的报文个数,这些包总共有多大
RX packets 3942 bytes 764610 (746.6 KiB)
# -- 累积接收报文错误数、丢弃数、溢出数(很重要!!!)、冲突的帧数
RX errors 0 dropped 0 overruns 0 frame 0
# -- 从该主机开机那一刻到现在,此接口/网卡累积发送的报文个数,总字节数
TX packets 842 bytes 130860 (127.7 KiB)
# -- 累积发送报文错误数、丢弃数、溢出数、载荷数(发生carrier错误而丢失的数据包数)、冲突数
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
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
# 万兆网卡的MTU
千兆 1000Mb/s 管理网络-- MTU: 1500 万兆 10000Mb/s 集群化作业 -- MTU: 9000
# 千兆万兆区别
现目前我们用的网卡是双绞线接个水晶头连接的千兆网卡, 主要用于管理网络; 保持MTU默认值1500kb就行..
若涉及到集群化作业, 比如用集群做存储.. 通常就需要用到万兆网卡.. MTU值应该设置为9000kb..
万兆(10G)网卡需要搭配光纤模块、光纤、万兆交换机(几十万RMB,很贵)使用 Hhhh
像阿里云提供给中小型公司的虚机就是构建在一套集群之上, vm之间的通信本来就比物理主机慢, 为了尽可能减少网络IO, 提高网络传输效率, 阿里云在硬件方面用的就是万兆网卡....
小声bibi,若是用真机做集群化架构,需要进行网卡绑定, 涉及到team技术、lacp协议等.. (集群相关的都是高阶知识,我暂且只会学基础,等我以后开发转运维,再捣腾捣腾, 哈哈哈哈哈)
# 永久配置
ifconfig eth0 mtu 9000
临时配置MTU值,重启服务器就失效了.. 那如何永久配置呢?
解决方案: 在 /etc/rc.local
文件里添加 修改MTU值的命令...
原理: /etc/rc.local文件在计算机开机的时候,它会自动运行, 所以一开机就需要运行的命令都可写到此文件里
注意: 记得执行命令 chmod +x /etc/rc.d/rc.local
## -- 可以看到/etc/rc.local的文件类型是l 代表软链接
## -- 源文件是 /etc/rc.d/rc.local
[root@localhost ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 6月 30 23:42 /etc/rc.local -> rc.d/rc.local
## -- /etc/rc.d/rc.local文件是没有可执行权限的 意味着除了root用户的其他用户都不能执行它
## -- 所以需要赋予其他用户对此文件的可执行权限 chmod +x /etc/rc.d/rc.local
[root@localhost ~]# ll /etc/rc.d/rc.local
-rw-r--r--. 1 root root 473 1月 14 2022 /etc/rc.d/rc.local
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
## 在里面添加内容,ifconfig eth0 mtu 9000
[root@localhost ~]# vim /etc/rc.local
2
3
4
5
6
7
8
9
10
11
12
13
# 解决溢出数严重的问题
ifconfig结果中第6行的 overruns 溢出数是非常重要的指标!!!
ethtool -g eth0
ethtool -G eth0 rx 2048
ethtool -G eth0 tx 2048
# 储备知识
1> 全|半双工通信
全双工是指交换机在发送数据的同时也能够接收数据,两者同步进行,
这好比我们平时打电话一样,说话的同时也能够听到对方的声音... 半双工好比是对讲机...
目前网卡一般都应该采用全双工模式,全双工的好处在于迟延小、冲突少、速度快.
2> 数据链路层三大功能之一差错监测: 循环冗余检验码CRC
步骤关键字: 多项式 异或操作(异为1 同为0)
假设有数据1101011011需要传输, 采用CRC的生成多项式为P(X)=X^4+X+1, 请计算添加了CRC校验码之后的数据.
解: 多项式位串为 --> 10011, 模二除法得到余数1110, 所以得到结果11010110111110
3> 网卡工作原理:
先从OSI七层协议视角,回顾下发包:
应用层产生一个数据,依次往下发,包装TCP/UDP的头 -- 数据段;包装网络IP的头 -- 数据报;
包装以太网的头 -- 数据帧frame; 接着转成二进制位通过网线传输给对方.
网卡发包:
1. ip数据报+14个字节的mac头/以太网头变成数据帧frame
2. frame被拷贝到网卡芯片内部的缓冲区,由网卡处理
3. 网卡芯片为frame添加头部同步信息和CRC校验(此时才是真正可以发送的包),然后发送该包
网卡收包:
1. 网络包到达网卡,网卡先检查数据包的CRC校验,保证其完整性和正确性,
若不完整会丢弃(丢弃不可怕,TCP协议会重新发包的);若完整会去掉它的头得到frame
2. 网卡将frame拷贝到网卡内部的FIFO(frist in frist out先进先出)缓冲区
3. 网卡驱动程序会产生硬件中断,提醒OS干活,OS产生软件中断,将frame从网卡拷贝到内存中
然后一层层的拆包
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 解决过程
正常情况, 网卡一边接收数据包放到网卡缓冲区中,OS一边从中取出数据包到内存中, 网卡缓冲区不会有溢出.
若遇到高并发的情况,流量激增,网卡缓冲区满了,往网卡缓冲区里挤的网络包速度远大于OS取的速度...
新的网络包进不了缓冲区,就会出现溢出.. overruns值升高..
这会导致客户端就访问不进来了,用户等待时间较长,体验很差!!
排除网络的干扰
""" step1:查看是否连接网线 """
[root@localhost ~]# mii-tool eth0
eth0: negotiated 1000baseT-FD flow-control, link ok
""" step2:查看工作模式是否正常 """
[root@localhost ~]# ethtool eth0 | egrep 'Speed|Duplex'
Speed: 1000Mb/s ## -- 千兆网卡
Duplex: Full ## -- Full 代表全双工 half的话代表半双工
""" step3:查看网卡与MTU是否匹配 """
[root@localhost ~]# ifconfig eth0 | grep mtu
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
""" step4:查看CRC校验是否正常 """
[root@localhost ~]# ethtool -S eth0 | grep crc
rx_crc_errors: 0 ## -- crc错误值大通常是因为服务器外部的网络环境有问题导致的
Speed、Duplex、CRC之类的都没问题,基本可以排除物理层面的干扰
2
3
4
5
6
7
8
9
10
11
12
13
14
15
网络没问题, 那么问题就出现在服务器上了
【监测overruns值】
while true;do ifconfig eth0 | grep RX | grep overruns;sleep 0.5;clear;done
监测的时候,某一时刻,overruns达到了上百,又降了下来(TCP重新发包了),不用过于担心
若值一直一直在增长,意味着在一直累积溢出的包,用户一直访问不进来,体验极差..
解决方案:
低配版 -- 单台服务器,调大缓冲区..
缓冲区最高4096,不够了咋整?一个网卡的性能有极限的,用多个网卡 -- 垂直扩展
高配版 --加机子,集群化作业,多台机器抗压力,流量就被分散了. -- 水平扩展!!!
So!开发不能鄙视运维,开发的软件再好,最多支持几千并发,但运维集群化作业能把软件的并发性能放大几十上百倍..
[root@localhost ~]# ethtool -g eth0 # -- 查看
Ring parameters for eth0:
Pre-set maximums:
RX: 4096 # -- 接收的缓冲区大小
RX Mini: 0
RX Jumbo: 0
TX: 4096 # -- 传输的缓冲区大小
Current hardware settings: # -- 当前硬件的设置
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256
ethtool -G eth0 rx 2048 # 设置调大
ethtool -G eth0 tx 2048 # 设置调大
Ps:还可以想着将网卡降速..这想法挺奇怪的Hhhh
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
# 网卡相关配置文件
# 解析 ifcfg-eth0文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network
重启网络服务会去加载这些配置文件
▲ 必要字段
"""
BOOTPROTO若设置为dchp,表明动态获取IP地址,在租约时间内IP地址不会变..到期了后重新分配IP..
IPADDR、NETMASK、GATEWAY、DNS1、DNS2这几个字段只有在BOOTPROTO的值为static或none时才会生效..
IPADDR、NETMASK保证了局域网里的通信,GATEWAY、DNS1、DNS2保证了与外网的通信.
IPADDR的配置要注意,vm网卡若用的桥接模式要防止占用其他设备的IP,若用的NAT模式没关系.
DNS的地址最多配置3个,配置后会写入/etc/resolv.conf文件中
GATEWAY的值可以通过`route -n`命令查看路由器上配置的网关地址;
企业里通常是集群化作业,so,BOOTPROTO的值都会是static!!!!!!
Ps:可以先DHCP动态获取IP,然后在静态配置时,去查看/etc/resolv.conf文件里面已设置的DNS(nameserver字段的值) 通常是8.8.8.8 和 网关的地址
NM_CONTROLLED可以不添加,前提是执行命令
systemctl stop NetworkManger systemctl disable NetworkManger
"""
TYPE="Ethernet" ## -- Ethernet类型表明是以太网卡!
BOOTPROTO="static" ## -- none 或者 static 都可以手动指定静态IP
IPADDR = 192.168.0.100 ## -- IP地址
NETMASK = 255.255.255.0 ## -- IP掩码地址
GATEWAY = 192.168.0.254 ## -- 网关地址
DNS1 = 192.168.0.254 ## -- 第一个DNS地址
DNS2 = 8.8.8.8 ## -- 第二个DNS地址
NAME="eth0" ## -- 名字
DEVICE="eth0" ## -- 设备名
ONBOOT="yes" ## -- 代表网卡是否跟着NETWORK网络服务的启动而激活
NM_CONTROLLED="no" ## -- 表明网卡不受NetworkManager服务的影响
▲ 其他不必要字段
## -- 配置网卡路由文件的时候需要进行此字段的设置 表示DHCP的路由配置不生效!!
DEFROUTE = "no"
## -- 配置网卡路由文件的时候需要进行此字段的设置 值为no表示DHCP设置的路由允许被覆盖!!
PEERROUTES = "no"
## -- 网卡的MAC地址信息,centos7里没有,centos6里有
HWADDR=14:da:e9:eb:a9:61
## -- 是否允许普通用户启动或者停止该网卡
USERCTL=no
## -- 是否在该网卡上启动IPV6的功能
IPV6INIT=no
## --是否允许网卡在启动时向DHCP服务器查询DNS信息,该字段了解即可
# 设置为yes时,此文件设置的DNS将覆盖/etc/resolv.conf
# BOOTPROTO若设置为dchp(配置文件中的DNS1是不生效的),则默认为yes,dhcp的dns会覆盖/etc/resolv.conf
PEERDNS=yes
## -- 若冲突,可以直接删除
UUID="3919d7da-ef03-40a0-814e-d78c047e1f87"
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
41
42
43
44
45
# 配置ifcfg-eth1文件
# -- 可以发现只有网卡eth0的配置文件,虽然新增了eth1网卡,但系统并没有自动为它生成配置文件,所以eth1是临时的
[root@localhost ~]# ls /etc/sysconfig/network-scripts | grep ifcfg-eth
ifcfg-eth0
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth1
vim ifcfg-eth1
"""
若不想通过172.16.150.100这个IP地址访问外网就没必要指定GATEWAY网关等字段信息
真正的生产环境里,也不会给每块网卡配置网关,一块网卡配置了就行了
So,我们可以将eth0网卡用于外网通信,eth1网卡用于内网通信...
"""
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR = 172.16.150.100
NETMASK = 255.255.255.0
#GATEWAY = 172.16.150.2
#DNS1 = 172.16.150.2
#DNS2 = 8.8.8.8
NAME="eth1"
DEVICE="eth1"
ONBOOT="yes"
NM_CONTROLLED="no"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# DNS相关配置文件
/etc/resolv.conf
DNS解析文件, 可设置DNS指向,最多3个
/etc/hosts
本地名称解析文件, 优先于DNS解析文件
DNS查询顺序
浏览器DNS缓存 --> 本地系统DNS缓存 --> 本地计算机HOSTS文件 --> ISP DNS缓存 --> 递归or迭代搜索
▲ 一个小实验,修改配置文件/etc/hosts 在末尾添加1.1.1.1 www.baidu.com
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
... ...
[root@localhost ~]# ping www.baidu.com
PING www.baidu.com (1.1.1.1) 56(84) bytes of data. # -- 百度域名被解析成了1.1.1.1
... ...
某公司用A B C D E..HI..等20台机器搭建了一个集群!! A要跟其它机器通信,需要知道目标主机的IP地址..
并且在相应的配置文件中配置目标主机的IP..
这样做不好,一方面IP地址难记;另一方面主机的IP地址日后可能会变..一变,20台主机重新修改配置文件很麻烦..
最规范的做法:
在公司内部自己搭建个DNS服务;会先给这20台机器每台机器起个名字,也就是域名,每个域名对应一个IP地址记录在DNS服务器中..`hostnamectl set-hostname egon.xxx.com`永久设置主机名.
这样一来,配置文件中只需要使用域名即可,当A主机与集群中其他机器通信时,会去自己搭建的DNS服务器上查一查对应的域名解析.. 当某个主机的IP地址变了,集群中20级台机器的配置文件都不需要动,改DNS服务器上的某条解析记录即可..
因为是内部搭建的DNS服务器,域名还不用注册.. 也便于集群中增加主机时的操作..
搭建个DNS服务不仅可以增加可扩展性,DNS服务器还可以做负载均衡等..
偷懒的做法:
不搭建DNS服务,在一台机器上将20台机器的解析记录写入/etc/hosts文件,再给每台机器都发送一份,但意味着每次改动,每台机器都要同步一下..(有一些自动化管理工具,改动以后可自动批量的每台机器都传一份)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# /etc/services
记录了每一个软件跟它对应的端口号以及协议
常见的服务端对应的端口号
服务端 | 端口号 |
---|---|
dhcp | 67 |
dns | 53 |
mysql | 3306 |
ssh | 22 |
grep '^ftp\|^ssh' /etc/services
# 交换与路由
交换: 指同网络访问.
多台主机处于同一个LAN/交换机/局域网中,配置同网段的不同ip就可以直接通信,二层网络本质是基于mac地址的通信,不需要进行转发,这里默认交换机未划分过vlan(即不讨论三层交换)..
路由: 指跨网络访问的路径选择.
若要与外网通信,就需要转发/路由.. 路由器上配置的有网关.. 网关有个特点, 至少得有两个地址, 对内得有一个局域网地址, 对外得有一个外网地址..
# Linux主机充当路由
# 三大前提
将一台linux主机A当作路由的三大前提:
1> 主机A至少得有两块网卡分别连接不同的网段;
(A主机连接的不同网段里的主机都必须将网关指向主机A)
2> 主机A开启路由转发功能(默认是关闭的); echo 1 > /proc/sys/net/ipv4/ip_forward
临时打开.
3> 在该linux主机上添加正确的路由规则/策略..
# 转发流程
A主机的linux OS左手网卡1,右手网卡2,连接两个不同的网段..(B主机处于网段1,C主机处于网段2)
B、C处于不同网段,是不能直接通信的, A可以作为BC之间互通的桥梁.. B <==> A <==> C
主机B发送了个数据包,会从网卡1进来的, A主机的linux内核会先判断此包是不是给本机的, 不是的话就正常的丢掉..
若是给本机的:
情况1: 该数据包就是明确的给本机上层的应用程序的;
数据包流向: 网卡1 - 操作系统(A主机的 内核空间 ) - 应用程序(A主机的 用户空间)
情况1> 应用程序处理完数据包就结束了,不需要返回数据包;
情况2> 应用程序处理完数据包产生了新的结果,新的数据包从A的用户空间丢到了A的内核空间..
内核再判断新的数据包从哪个网卡发出去...
新数据包的目标主机是C就从网卡2出去;是B就从网卡1原路返回...
情况2: 将本机的OS Linux当作路由器使用,数据包不会进入A主机的用户空间,数据包会从网卡2出去,转发给C;
# -- 可以看到 linux主机的路由转发功能默认是关闭的 0关闭 1开启
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
0
2
3
# 网关/路由
route命令
# 分类、优先级
Linux上的路由分为3种:
1> 主机路由: 明确指定了到达某台主机应该怎么走.. 主机路由也叫做静态路由 掩码位32位
2> 网络路由: 指明到某类网络怎么走, 精确到了某个网段.. 掩码位小于32位
3> 默认路由: 不走主机路由的和网络路由的, 全部都走默认路由. 掩码全为0
操作系统上设置的默认路由一般称为网关..
回顾下, 子网掩码与IP地址做与运算可以算出网络地址(同1为1,否则为0).. 一个B类的IP地址,子网掩码至少是8位,IP地址的网络位向主机位借位(借的叫做子网位)来划分子网..
子网掩码越短意味着划分的子网数越少, 每个子网的范围(每个子网中的主机个数)就越大; 反之则相反!!!
优先级:(根据精确度判断的) 主机路由 > 网络路由 > 默认路由
若路由条目的掩码长度相同, 则比较节点之间的管理距离(比如metric), 管理距离短的生效
举个栗子, 1.1.1.10/32
32位的掩码意味着IP地址的前32位都是网络号,没有剩下主机位,不能借位,该IP也就不能划分任何的子网.. 1.1.1.10网段没有任何其他机器... 只有它自己.. 精确到了一台机器!!!
# 查看路由表信息
route -n
-n选项表示不解析主机名
Destination: 去往目标,目的地
0.0.0.0/0 代表所有的IP地址都是目的地
Gateway: 下一跳(下一步交给谁做转发)
0.0.0.0表明没有下一跳,通过Iface指定的网卡往局域网里一丢.
谁收到算谁的,收到的那台主机不会将该数据包做下一跳的转发.
172.16.150.2 指定了网关IP 表明网关会安排下一跳
169.254.0.0 是保留网关
Genmask: 子网掩码
Flags: 标志位
U 此路由规则正在生效
G 网关
H 主机路由
Metric: 总共经历多少跳
Iface: 从哪个网卡出去
## -- 这些信息是从DHCP里获取到的,若不想要DHCP的,想自己配置的生效,则需要修改配置文件!
[root@localhost ~]# route -n
Kernel IP routing table # -- 内核IP路由表
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.150.2 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 # --保留网关,了解
172.16.150.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
2
3
4
5
6
7
8
# 添加/删除路由
eth0网卡 -- inet 172.16.150.131 netmask 255.255.255.0
系统会默认添加一条网络路由!!! `route add -net 192.168.0.0/24 dev eth0`
为何只要添加一个ip地址,就会默认增加一个该ip地址的网段路由?
2
3
4
1> 添加/删除主机路由,精确到一个IP地址
route add -host 1.1.1.10/32 dev eth0
-- 不需要转发则指定dev
route add -host 1.1.1.11/32 gw 172.16.150.2
-- 若需要转发,指定gw
route del -host 1.1.1.10/32
2> 添加/删除网络路由
route add -net 2.2.2.0/24 dev eth0
route del -net 2.2.2.0/24
3> 删除/添加默认路由
route del default
route add -net 0.0.0.0/0 gw 172.16.150.2
或者 route add default gw 172.16.150.2
systemctl restart network 重启网络配置后, 上述的设置失效
# 配置永久路由
vim /etc/syconfig/network-scripts/route-eth0
注意:
1> 新增一个路由配置文件,前提需要一个相对应的名为ifcfg-eth0的网卡配置文件
名字要对应上哦! route-ethX, 要从哪个接口出去X就是几
2> 在文件中配置永久默认路由, 则必须保证所有使用了DHCP服务的网卡配置文件ifcfg-ethX中的
DEFROUTE指令设置为"no",表明DHCP的路由配置不生效;
PEERROUTES指令设置为"no",表示DHCP设置的路由允许被覆盖.
配置规则:每一行一个路由条目, 先是要到达的目标, 然后是via关键字,最后是下一跳地址.
要求下一跳必须能到达,且一般都和ethX同网段..
2
3
4
5
6
7
8
9
10
11
例如eth0网卡的IP地址是192.168.10.123,,要通过网卡eth0出去到达10.0.0.10,,那么下一跳的地址要和eth0的地址在同网段..如192.168.10.222 ...
看计算机网络之网络层.md 中 网络层整个流程 这部分的内容, 注意图中的路由器1的IP 192.168.100.4 和路由器2的IP 192.168.100.5 !!
# -- 默认路由
default via 192.168.100.1 dev eth0
0.0.0.0/0 via 192.168.100.1 dev eth0
# -- 网段路由
192.168.10.0/24 via 192.168.100.1 dev eth0
# -- 主机路由,在centos7中 dev得指定
192.168.100.52/32 via 192.168.100.33 dev eth0
2
3
4
5
6
7
8
9
配置完后, 重启network服务即可立即生效...
# 路由实验
略.. 实验详见https://zhuanlan.zhihu.com/p/337256553
让我偷偷懒,主要是开发真就用不到... 路由的配置又很繁琐.. 有点累, 理论方面是整理规整了的!!!