Linux中的IP地址

IP地址

在目前使用最多的IPv4协议来看,IP地址是一个32位的二进制数组成的,但是我们看到的IP地址是由点分十进制来表示的,这能更加让人能够理解。
在IP地址的划分中,分为网络位和主机位,网络位从最左边开始,直到某一位结束,主机位从网络位结束的地方开始,直到最右边结束。
其中,有两个特殊的IP地址
当网络位确定的时候,主机位全为0,这是这个网络的网络地址
当网络位确定的时候,主机位全为1,这是这个网络的广播地址
因为这两个特殊的存在,所以在一个网络中可以分配的IP地址就需要减去2.

地址分类

IMG_20210201_102228.jpg

IP地址划分成4类
A类:A类地址左侧第一位是0,且前面8位都是网络位。按照点分十进制的算法,那么A网络的地址范围就是0-127
A类的IP地址范围就是0.0.0.0--127.255.255.255。
网络位剩下的就是主机位。其中A类地址可分配的IP地址个数就是2的24次方减去2个IP数。
A类地址可容纳的主机数量16777214

B类:B类地址左侧前2位是10,且前面16位都是网络位。按照点分十进制的算法,那么B网络的地址范围就是128-191
B类的IP地址范围就是128.0.0.0--191.255.255.255。
网络位剩下的就是主机位。其中B类地址可分配的IP地址个数就是2的16次方减去2个IP数。
B类地址可容纳的主机数量65534

C类:C类地址左侧前3位是110,且前面24位都是网络位。按照点分十进制的算法,那么C网络的地址范围就是192-223
C类的IP地址范围就是192.0.0.0--223.255.255.255。
网络位剩下的就是主机位。其中C类地址可分配的IP地址个数就是2的8次方减去2个IP数。
C类地址可容纳的主机数量254

D类:D类地址左侧前4位是1110,D类地址用于组播,不区分网络位和主机位。按照点分十进制的算法,那么D网络的地址范围就是224-239
D类的IP地址范围就是224.0.0.0--239.255.255.255。

E类:E类地址左侧前4位是1111,E类地址是保留地址,不区分网络位和主机位。按照点分十进制的算法,那么E网络的地址范围就是240-255
E类的IP地址范围就是240.0.0.0--255.255.255.255。

IP地址配置

网络掩码

在进行网络通信的过程中,通信双方都需要去往对方所在的网络,也就是对方网段。那么网段是怎么样计算的。

网段的计算方式是通过掩码和IP地址进行与运算得到的。IP地址的网络位是多少,那么掩码的位数也是多少,并且掩码的位数上全是1,对应的剩下的网络位就全是0,通过与操作,那就得出了这个IP地址所在的网段了。
与运算,IP和掩码对应的位上有一个是0,那么与的结果就是0,如果都是1,那么结果就是1。可以将这个运算理解为乘法。

变长子网掩码(VLSM)

按照上面在上面的有类IP来划分网络,会存在资源浪费的情况。比如说目前开办一所学校,学校申请到了一个B类地址,拥有65534个IP地址,显然这已经够学校使用很久的了。由于以下原因导致学校扩招,原来的学校分成了3个学院,这三个学院想要建立各自不同网络地址的独立网络。那么就还得申请两个有类地址,原来的B类地址还没用完就造成了浪费。

于是变长子网掩码诞生了,他可以将固定的主机位进一步划分为子网位。在子网中来分配适合的网络地址。
子网是怎么划分的呢?具体来看一个例子
假如现在有一所学校,学校申请了以个B类IP地址173.168.0.0/16 ,按照B类传统的地址来划分仅能组成一个独立的网络,网络中的主机数量是2的16次方减去2,总共含有65533个可用地址.这对于学校来说多出了很多.用不了的地址就被浪费掉了,但是现在,随着学校的发展,逐渐又扩展了2所规模比较小的学院,按照统计来分第一所学校仅仅只需要15000个地址就已经有冗余,第二所学院需要7000个地址就足够,第三个学校需要3000个地址就可以了.那么现在使用可变子网技术来实现子网的划分怎么划分呢?
1.首先考虑各个子网需要多少位网络位,也即时看2的多少次方减2大于子网所需的主机数.
第一个学校需要15000个地址,得出2的14次方可以提供16382个地址.
第二个学校需要7000个地址,得出2的13次方可以提供8190个地址.
第一个学校需要3000个地址,得出2的12次方可以提供4094个地址.
2.从已经计算好的网络位来划分子网,B类地址的掩码是16位.
第一个学校的子网就应该是32-14=18,子网掩码就是向后后面的主机位借两位,这样子网的个数就是2的2次方(4)个.为求方便,把两个子网位都设置为0.这样就得到了第一个学校的子网地址.172.168.0.0/18.
第二个学校的子网就应该是32-13=19,子网掩码就是向后后面的主机位借三位,这样子网的个数就是2的3次方减1个.注意第17,18位不能全取0,因为这个子网已经分配给了第一个学校,不管第19位如何取值,都会是属于第一个学校的.为求方便,把17,19子网位都设置为0.第18位设置为1,这样就得到了第二个学校的子网地址.172.168.64.0/19
第三个学校的子网就应该是32-12=20,子网掩码就是向后后面的主机位借四位,这样子网的个数就是2的4次方个.但17,18不能设置为0,第17,18,19不能设置为010,为求方便,把子网位设置为0110.这样就得到了第一个学校的子网地址.172.168.96.0/20
这样利用变长子网掩码的技术实现的地址分配叫做无类域间路由.

使用nmcli实现bonding

在进行网络通信的过程中,都需要使用到网卡,当网卡失效后,便不能再进行通信,所以,为了避免单点失败,现在可以将一个ip绑定在多块网卡上.
网卡绑定的工作模式有7种

第一种模式:mod=0,即:(balance-rr) Round-robin policy(平衡抡循环策略)
特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1...一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力。

第二种模式:mod=1,即: (active-backup) Active-backup policy(主-备份策略)
特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的
以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供网络连接的可用性
但是它的资源利用率较低,只有一个接口处于工作状态,在有N 个网络接⼝的情况下,资源利用率为1/N。

第三种模式:mod=2,即:(balance-xor) XOR policy(平衡策略)
特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。
其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力。

第四种模式:mod=3,即:broadcast(广播策略)
特点:在每个slave接口上传输每个数据包,此模式提供了容错能力。

第五种模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)
特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下
必要条件:
条件1:ethtool持获取每个slave的速率和双工设定。
条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation。
条件3:多数switch(交换机)需要经过特定配置才能支持802.3ad模式。

第六种模式:mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)
特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度
计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
该模式的必要条件:
ethtool支持获取每个slave的速率

第七种模式:mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)
特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance,rlb)
      而且不需要任何switch(交换机)的支持。

了解了网卡绑定的模式,现在来看看具体是这么实现的吧

bonding的实现

使用配置文件实现两个网卡的绑定

先关闭下面两项服务
systemctl stop NetworkManager
systemctl disable NetworkManager
1.在虚拟机中添加一块网卡.
2.创建网卡绑定的相关文件.
[root@192 ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond     #bonding的主配置文件.
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=192.168.37.104
PREFIX=8
#GATEWAY=172.16.0.1
#DNS1=114.114.114.114
BONDING_OPTS="mode=1 miimon=100"
#miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有条线路不通就转入另一条线路

[root@192 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
~          
[root@192 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37
DEVICE=ens37
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
~          
3:重新启动服务
[root@192 ~]# systemctl restart network
[root@192 ~]# ip a
2: ens33: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
    link/ether 00:0c:29:8a:65:f5 brd ff:ff:ff:ff:ff:ff
3: ens37: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
    link/ether 00:0c:29:8a:65:f5 brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:8a:65:f5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.37.104/8 brd 192.255.255.255 scope global bond0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe8a:65f5/64 scope link 
       valid_lft forever preferred_lft forever

[root@192 ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)  #可以看出现在使用的是 mod1 模式
Primary Slave: None
Currently Active Slave: ens33
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens33
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:8a:65:f5
Slave queue ID: 0

Slave Interface: ens37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:8a:65:ff
Slave queue ID: 0

测试: 断开一个连接之后,ping出现了一次短暂的超时,随后又恢复


image.png
查看状态
[root@192 ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens37
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens33    #发现该网卡已经断开连接了,但是网络依然是畅通的.
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: 00:0c:29:8a:65:f5
Slave queue ID: 0

Slave Interface: ens37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:8a:65:ff
Slave queue ID: 0
[root@192 ~]# 

----删除bond----
ifconfig bond0 down
rmmod bonding
在centos7上更改网卡的方法.
[root@192 ~]# vim /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root net.ifnames=0 biosdevname=0 rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
在上面的GRUB_CMDLINE_LINUX行中添加上net.ifnames=0 biosdevname=0 之后保存.
2.使用命令
[root@192 ~]# cp /etc/grub2.cfg{,.bak}
[root@192 ~]# grub2-mkconfig -o /etc/grub2.cfg
[root@192 ~]# reboot  重启之后便可以看到网卡名称是eth0了
[root@192 ~]# ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:d8:41:44 brd ff:ff:ff:ff:ff:ff
    inet 192.168.37.105/24 brd 192.168.37.255 scope global noprefixroute dynamic eth0
       valid_lft 85663sec preferred_lft 85663sec
    inet6 fe80::787e:f311:fa09:8e75/64 scope link noprefixroute 
       valid_lft forever preferred_lft forev

使用nmcli命令来实现bonding功能

nmcli命令是依赖于NetworkManager功能的,使用前需要确保已启动.

[root@192 ~]# nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
Connection 'mybond0' (9d2c5123-8121-4ae9-9ef1-bc89dcb4476f) successfully added.
[root@192 ~]# nmcli con add type bond-slave ifname eth0 master bond0
Connection 'bond-slave-eth0' (94835ecc-ff23-456d-844c-09d6d90ec51e) successfully added.
[root@192 ~]# nmcli con add type bond-slave ifname eth1 master bond0
Connection 'bond-slave-eth1' (aa40f04c-eff9-44c9-b127-a9da450d87a3) successfully added.
1.先启动从属接口
[root@192 ~]# nmcli con up bond-slave-eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
[root@192 ~]# nmcli con up bond-slave-eth1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
[root@192 ~]# nmcli con up mybond0
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)


[root@192 ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:d8:41:44
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:d8:41:4e
Slave queue ID: 0

测试:断开连接之后有一段超时,但随后便恢复状态.


image.png
[root@192 network-scripts]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: 00:0c:29:d8:41:44
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:d8:41:4e
Slave queue ID: 0
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容