IP地址

IP地址结构

IP地址是Internet赖以工作的基础。IP地址用来在网络中唯一标识一台计算机或网络设备的接口,是一个逻辑地址,以此来屏蔽物理地址的差异。 这里主要介绍IPv4地址的结构。

IP地址长度为32位二进制数,通常使用点分十进制数表示IPv4地址,每个十进制数由8位二进制数构成。为了便于寻址和层次化构造网络,IP地址由网络地址和主机地址两部分组成,对于同一网络中的所有设备,IPv4地址中网络部分必须完全一致,而IPv4地址中主机部分必须唯一。配置IP地址时,还需要配置子网掩码,子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。 与IPv4地址一样,子网掩码的长度也是32位二进制数,用子网掩码和IPv4地址进行逻辑与运算的结果表示网络地址,用IPv4地址减去网络地址表示主机地址。

IP地址分类

传统IP地址运行方式,以等级来划分,共划分为五个等级:A类、B类、C类、D类、E类,一般常用到的是A、B、C类这三种等级的IP地址,适用于大、中、小型网络。

  1. A类

    网络地址的长度为8bits,最左边的bit(称为前导位)必须为0。A类地址的网络地址可从00000000(二进制)至01111111(二进制),总共有2^7=128个。由于A类的网络地址长度为8bits,因此主机地址长度为32-8=24bits,即每个A类网络可用的主机地址有2^24=16777216个。只有国家(或一些特殊单位)会分配到A类的IP地址。

  2. B类

    网络地址的长度为16bits,最左边的2bits为前导位,必须为10,因此B类的IP地址必然介于128.0.0.0与191.255.255.255之间。每个B类网络可用的主机地址有2^16=65536个,通常用来分配给一些跨国企业或ISP使用。

  3. C类

    网路地址的长度为24bits,最左边的3bits为前导位,必须为110,因此C类的IP地址必然介于192.0.0.0与223.255.255.255之间。每个C类网络可用的主机地址有2^8=256个,通常用来分配给一些小型企业。

  4. D类

    D类的地址前导位为1110,后面的28bits为组播地址。主要用于组播,D类地址被分配给指定的通信组,当通信组被分配一个D类地址后,该组中的每一个主机都会在正常的单播地址的基础上增加一个组播地址。

  5. E类

    E类地址只有一块,它是保留地址。E类地址的最后一个(255.255.255.255)用作一个特殊地址。

实际应用中,有一些不使用的特殊IP地址,如下图所示:

网络号 主机号 含义
在本网络上的本主机
主机号 在本网络上的某个主机
全1 全1 只在本网络上进行广播(路由器不进行转发)
网络号 全0 表示一个网络
网络号 全1 对网络号标明的网络的所有主机进行广播
127 任何数 用作本地软件的回送地址

IP配置方法

ifconfig命令

ifconfig格式:

仅执行ifconfig命令,不带任何参数时,表示显示当前激活的接口。
ifconfig [-a][-s][interface]
ifconfig [interface] [options] | [address]
说明:
-a:表示显示所有接口配置信息,包括状态为down的接口
-s:显示接口的简短列表,等同于netstat -i
interface:指定的接口名称,例如eth0
options:
  up:激活接口,等同于ifup命令
  down:禁用接口,等同于ifdown命令
address:
  IP/NETMASK[up]:设定ip地址和掩码
  IP netmask NETMASK:设定ip地址和掩码

例子:

ifconfig eth0 1.1.1.1/24 up  或者
ifconfig eth0 1.1.1.1 netmask 255.255.255.0 up  配置eth0网卡地址为1.1.1.1/24

ifconfig eth0 up  激活eth0接口
ifconfig eth0 down 临时down掉eth0

ip命令

ip命令来自于iproute包,可用于替代ifconfig。ip命令是一个命令集,功能强大,几乎所有网络信息显示和管理的相关操作都可以使用ip命令来完成。

ip命令格式:

[root@centos7 ~]# ip --help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
                   netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |
                   vrf }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -h[uman-readable] | -iec |
                    -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |
                    -4 | -6 | -I | -D | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } | -br[ief] |
                    -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
                    -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}

其中OBJECT是ip命令的操作对象,常用的是link、address、route这三个操作对象。

link:和接口相关的管理操作,主要是操作链路层信息;

address:和ip地址相关的管理操作;

route:和路由相关的管理操作。

使用ip OBJECT help可以获取该object的语法帮助,例如:

[root@centos7 ~]# ip address help

在ip命令中,任何object都可以写全名,也可以写缩写,例如address可以缩写为addr,也可以只写一个字母a。

[root@centos7 ~]# ip a help  等价于ip address help和ip addr help

虽然还有一个a开头的object为addrlable,但ip会从上述语法给出的object顺序从前往后匹配,例如ip m将匹配到ip maddress。如果想匹配别的,如addrlable,可以写成ip addrl

  1. ip link用法

    ip link用于查看网卡链路层信息。

    用法 含义
    ip link show [DEVICE] 查看网络接口信息
    ip link set DEVICE up | down 启用或禁用接口

    例子:

    ip link set dev eth0 up  启用eth0接口
    ip link show eth0        查看eth0接口信息
    
  2. ip address用法

    ip addr用于管理网卡的IP地址。

    用法 含义
    ip addr show 查看IP地址
    ip addr {add|del} IP/NETMASK dev IFACE [label LABEL] 配置添加或者删除接口ip地址

    说明:

    add:添加地址;

    del:删除地址;

    IP/NETMASK:设定的ip地址和子网掩码;

    IFACE:指定设备接口名称;

    LABEL:添加地址时指明网卡别名。

    例子:

    ip addr show 或者 ip a s     查看所有ip地址
    ip addr show eth0           查看eth0接口的ip地址
    ip addr add 1.1.1.1/24 dev eth0    配置eth0接口的ip地址为1.1.1.1/24
    ip addr del 1.1.1.1/24 dev eth0    删除eth0接口的ip地址
    ip a a 1.1.1.1/24 dev eth0 label eth0:0    设置eth0别名eth0:0,并配置ip为1.1.1.1/24
    
  3. ip route用法

    ip route用于管理路由,支持查看路由、添加路由、删除路由、清空路由、备份和恢复路由等。

    用法 含义
    ip route add default via GW dev IFACE 添加默认路由
    ip route {show | list} 查看路由
    ip route flush [dev IFACE] 清空路由表
    ip route save > FILE 备份路由表
    ip route restore < FILE 恢复路由表
    ip route {add | del} TARGET via GW 添加或删除路由

    说明:

    add:添加路由;

    del:删除路由;

    TARGET:路由目标:可以是主机路由的ip,也可以是网络路由NETWORK/MASK;

    GW:网关。

    例子:

    ip route add default via 172.16.0.1  添加网关172.16.0.1
    ip route show  显示路由信息
    ip route flush dev eth0  清空eth0接口的路由。若不指定接口,则清空所有的路由表记录。
    ip route save > /tmp/route.txt  保存当前路由表
    ip route restore < /tmp/route.txt  恢复路由表
    ip r add 192.168.0.0/24 via 172.16.0.1  添加网络路由192.168.0.0/24,下一跳是172.16.0.1
    ip route add 192.168.1.13 via 172.16.0.1  添加主机路由192.168.1.13,下一跳是172.16.0.1
    说明:要显示指定主机路由的掩码,则为32位,如:
    ip route add 192.168.1.13/32 via 172.16.0.1 
    

网络配置文件

/etc/sysconfig/network-scripts/目录下有一类ifcfg开头的文件为网卡配置文件,所有ifcfg开头的文件在启动网络服务时都会被加载读取,具体的文件名ifcfg-xx的xx可以随意命名,推荐以类似eth0这样的接口命名。通过网卡配置文件可设定IP地址、子网掩码、默认网关、DNS且永久生效。配置说明可参考:/usr/share/doc/initscripts-*/sysconfig.txt

可用配置 说明
TYPE 接口类型,常见的有Ethernet、Bridge
NAME 此配置文件应用到的设备
DEVICE 设备名
HWADDR 对应的设备的MAC地址
UUID 设备唯一标识
BOOTPROTO 激活此设备时使用的地址配置协议,常用的有dhcp、static、none、bootp
IPADDR 指明IP地址
NETMASK 子网掩码,如:255.255.255.0
PREFIX 网络ID的位数,如24
GATEWAY 默认网关
DNS1 第一个DNS服务器地址
DNS2 第二个DNS服务器地址
DOMAIN 主机不完整时,自动搜索的域名后缀
ONBOOT 在系统引导时是否激活此设备
PEERDNS 如果BOOTPROTO的值为dhcp,YES将允许dhcp server分配的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf
NM_CONTROLLED NM是Network Manager的缩写,此网卡是否受NM控制

多网卡绑定

bonding

多网卡绑定(bonding):将多块网卡绑定同一ip地址对外提供服务,可以实现高可用或者负载均衡。默认情况下,无法给不同网卡配置同一个ip地址。通过bonding,创建一个虚拟网卡(Master角色)对外提供连接,然后在此虚拟网卡上绑定多块物理网卡(Slave角色),它们将共用MAC地址。这样一来,流量将以master虚拟网卡为导向分配给各slave物理网卡,从而实现流量的负载均衡或高可用。

bonding工作模式:有7种bonding模式,每一种都有一个字符名称代号,也有对应的数值代号,两种代号可互用。

  • Mode 0(balance-rr):轮询(Round-robin)策略,从头到尾的顺序在每一个slave接口接收和发送数据包,本模式提供负载均衡和容错能力;
  • Mode 1(active-backup):活动-备份(主备)策略,只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave。为了避免交换机发生混乱,此时绑定的MAC地址只有一个外部端口上可见;
  • Mode 2(balance-xor):hash策略,根据源MAC地址和目标MAC以及slave的数量计算hash值,相同hash值的数据将分配给固定的一个slave接口。所以,去往同一个目标的数据,总是由同一个slave去发送,来自同一个接收者的数据总是由同一个slave接收。这种模式最好用于同网段的局域网中,跨路由后性能将越来越差;
  • Mode 3(broadcast):广播策略,将数据发送给所有的slave接口,提供容错能力;
  • Mode 4(802.3ad):链路聚合,创建成一个链路组,共享相同的速度,需交换机支持;
  • Mode 5(balance-tlb):提供负载均衡和高可用功能。流出数据由所有slave承担,所有流入数据由当前的slave承担,如果当前slave故障,则转移到另一个slave来接收数据。这种模式不能用于虚拟机桥接模式;
  • Mode 6(balance-alb):提供负载均衡和高可用功能。所有流量由所有的slave承担。接收数据时通过arp协商来决定如何负载均衡。这种模式不能用于虚拟机桥接模式。

nmcli命令

介绍nmcli命令之前,先介绍下NetworkManager服务,NetworkManager是2004年Red Hat启动的项目,旨在能够让Linux用户更轻松地处理现代网络需求,尤其是无线网络,能够自动发现网卡并配置ip地址。虽然初衷是针对无线网络,但在服务器领域,NetworkManager已经大获成功。

nmcli和nmtui是NetworkManager服务提供的网络管理工具,nmtui是文本图形界面,类似于古老的setup命令,nmcli是命令管理行工具。在RHEL7上,同时支持network.service和NetworkManager.service(简称NM)两个网络服务,默认情况下,这2个服务都有开启,但许多人会将NM禁掉。但是在RHEL8上,默认没有安装network.service,只安装了NM,因此只能通过NM进行网络配置,也就是说在RHEL8上,必须开启NM,否则无法使用网络。NM也是未来的趋势。

了解nmcli之前,还必须理解一个重要概念:connection。在NetworkManager中,网卡设备可以认为是网络接口,connection(连接)是接口的配置,由一组设置组成,如连接类型、设备名、ip地址、DNS等。同一设备可能存在多个connection,但一次只能有一个保持活动状态。每个connection都有一个名称con-name(也称为ID),还有系统为此connection自动分配的UUID。它们都可以用来表示某个connection。事实上,每新增一个connection,NetworkManager会自动创建一个/etc/sysconfig/network-scripts/ifcfg-NAME的配置文件。所以使用nmcli connection命令要注意,它会修改配置文件,修改会永久生效。

nmcli格式:

[root@Centos8 ~]# nmcli --help
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
  -a, --ask                                ask for missing parameters
  -c, --colors auto|yes|no                 whether to use colors in output
  -e, --escape yes|no                      escape columns separators in values
  -f, --fields <field,...>|all|common      specify fields to output
  -g, --get-values <field,...>|all|common  shortcut for -m tabular -t -f
  -h, --help                               print this help
  -m, --mode tabular|multiline             output mode
  -o, --overview                           overview mode
  -p, --pretty                             pretty output
  -s, --show-secrets                       allow displaying passwords
  -t, --terse                              terse output
  -v, --version                            show program version
  -w, --wait <seconds>                     set timeout waiting for finishing operations

OBJECT
  g[eneral]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager
  a[gent]         NetworkManager secret agent or polkit agent
  m[onitor]       monitor NetworkManager changes

nmcli命令使用方法类似于ip命令,OBJECT是nmcli的操作对象,最常用的两个操作对象是connection、device。

connection:译作连接,可理解为配置文件,相当于ifcfg-ethX。可以简写为nmcli c。对connection做操作的时需要指定标识,标识可以是con-name、UUID,也可以使用ifcfg的完整路径,即/etc/sysconfig/network-scripts/ifcfg-ethX。

device:译作设备,可理解为实际的网卡(包括物理网卡和虚拟网卡)。可以简写为nmcli d。

  1. nmcli device用法

    用法 含义
    nmcli device [disconnect | connect] IFACE 启用或禁用网卡接口
    nmcli dev show IFACE 显示网络接口属性
    nmcli dev status 显示所有设备状态

    例子:

    nmcli device disconnect eth0    禁用eth0接口
    nmcli device connect eth0    启用eth0接口
    nmcli device show eth0    显示eth0接口属性信息
    
  2. nmcli connection用法

    查看connection的配置语法格式:

    nmcli connection show con-name
    例:查看con-name为eth0-office的connection配置
    nmcli connection show eth0-office
    

    新建和删除connection配置语法格式:

    nmcli connection add type ethernet con-name NAME ifname IFCE
    nmcli connection delete con-name
    例:
    新增一个connection,指定其类型为ethernet,con-name为eth0-office,接口(设备)为eth0
    nmcli connetion add type ethernet con-name eth0-office ifname eth0
    删除con-name为eth0-office的connection
    nmcli connection delete eth0-office
    

    激活或down掉connection的语法格式:

    nmcli connection up | down con-name
    例:激活eth0-office
    nmcli connection up eth0-office
    

    更改connection的配置语法格式:

    nmcli connection modify con-name [+|-]setting.property value
    说明:
    +:表示在con-name上添加配置
    -:表示在con-name上移除配置
    setting.property:可以从nmcli con show中查看所有可设置项
    value:对应配置项的值
    例:
    添加eth0-office的ipv4.addresses为1.1.1.1/24
    nmcli connection modify eth0-office +ipv4.addresses 1.1.1.1/24
    
    删除eth0-office的ipv4.addresses
    nmcli connection modify eth0-office -ipv4.addresses 1.1.1.1/24
    
    修改eth0-office的ipv4.addresses为2.2.2.2/24
    nmcli connection modify eth0-office ipv4.addresses 2.2.2.2/24
    
    添加eth0-office的ipv4.dns为8.8.8.8
    nmcli connection modify eth0-office +ipv4.dns 8.8.8.8
    
    nmcli con modify的可设置项和值 对应的ifcfg文件的选项
    ipv4.method manual BOOTPROTO=none
    ipv4.method auto BOOTPROTO=dhcp
    ipv4.addresses 192.168.2.1/24 IPADDR=192.168.2.1 PREFIX=24
    ipv4.gateway 192.0.2.254 GATEWAY=192.0.2.254
    ipv4.dns 8.8.8.8 DNS0=8.8.8.8
    ipv4.dns-search example.com DOMAIN=example.com
    ipv4.ignore-auto-dns true PEERDNS=no
    connection.autoconnect yes ONBOOT=yes
    connection.id eth0 NAME=eth0
    connection.interface-name eth0 DEVICE=eth0
    802-3-ethernet.mac-address ... HWADDR= . . .

通过nmcli实现bonding

1.通过ip命令查看本机网络设备和ip地址

2.把ens192和ens224进行绑定,首先创建master角色

创建完成后可以查看一下由nmcli con命令自动生成的网卡配置文件

3.添加slave到此master上

查看自动生成的slave网卡配置文件如下

注意:添加slave时若没有指定con-name,则网卡配置文件会默认以bond-slave-IFNAME命名。

4.启动bond,要求先启动slave,最后再激活master

5.启动bond后,查看网络接口,发现ens192和ens224已经没有ip地址,且新增一个bond0接口,而且这三个接口的MAC地址一致

6.查看bond信息和模式可以通过如下方式