第三章
RAID
RAID功能实现
- 提高IO能力,磁盘并行读写
- 提高耐用性,磁盘余算法来实现
RAID 实现方式
- 外接式磁盘阵列:通过扩展卡提供适配能力
- 内接式RAID:主板集成RAID控制器,安装OS前再BIOS里配置
- 软件RAID 通过OS实现。比如群晖里的NAS
RAID级别
RAID -0
由n块硬盘拼接在一起,但是容量要求一致 第一磁盘8T那么第二磁盘也要求8T(最少要求1+的磁盘数),存入数据以chunk为单位,比如100M的数据 存入n块硬盘 那么就会分成n分之一,把100M分成n份,读写都可以并行处理,所以在所有级别中,RAID 0 的速度是最快的。 但是没有容错能力也没有冗余能力,一块磁盘损坏那么多有数据都会丢失 100%利用率
RAID -1
存入数据以chunk为单位。也称为镜像,两组以上的N个磁盘相互为镜像,两组存入的内容相同。 在一些多线程操作系统中有很好的读取速度 但是写入性能会降低,而且磁盘性能降低 利用率50%,有冗余能力,最少磁盘数2+
RAID -5
由3个或以上硬盘组成,数据块交替存储,以块为单位分布到各个硬盘上,并且数据和与其相对应的奇偶校验信息存储在不同的磁盘上。当某个磁盘数据损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
- 数据安全保障:通过奇偶校验信息,RAID 5可以在某个磁盘损坏时恢复数据,从而保证了数据安全。
- 磁盘空间利用率高:RAID 5的磁盘空间利用率要比RAID 1高,因为它没有固定的校验盘,奇偶校验信息均匀分布在阵列所属的磁盘中。这使得RAID 5的存储成本相对较低。
- 读取性能优越:对于读取操作,RAID 5可以从多个磁盘中并行读取数据,因此性能可以比单个磁盘更快。
但是写入性能下降,如果两个以上硬盘损坏,可能导致数据无法恢复
RAID -10
由最少4个或4个以上硬盘组成, 由两组RAID-1组成的RAID -0 读写性能提升,有容错能力,每组镜像最多只能坏一块 如果同一组坏了就用不了了
RAID -01
由最少4个或4个以上硬盘组成, 由两组RAID-0组成的RAID -1 读写性能提升, 容错能力没有RAID-10高 两组中每组坏一个 就用不了
逻辑卷管理器(LVM)
实现过程
- 将设备指定为物理卷
- 用一个或多个物理卷来创建一个卷组,物理卷是用5固定大小的物理区域来定义的
- 在物理卷上创建的逻辑卷,是由物理区域组成
- 可以在逻辑卷上创建文件系统并挂载
添加逻辑卷并对磁盘扩容
将对sdb1分区 和sdc硬盘改成物理卷
把sdb1 分区ID改为8e 意思就是给sdb1 贴上标签表示他要作为物理卷的使用
用pvcreate命令将分配好的分区改为物理卷
相关工具来自于lvm2包
yum -y install lvm2
pvs 查看分配的物理卷信息
vgcreate创建卷组
vgcreate -s #num 指定PE的大小 #
默认4M
创建dgg卷组 将sdb1 sdc物理卷添加进去 指定dgg卷组为16M块 大小 (默认4M)
查看卷组,成功
lvcreate创建逻辑卷
-n 表示卷名 这里用mysql_lv当卷名 -L指定卷大小 后面指定哪个卷组
然后对我们创建的逻辑卷开始分配文件系统 因为其实是分区 所以也需要格式化逻辑卷
为mysql_lv 创建一个文件系统
将逻辑卷分区永久挂载
挂载完成
给逻辑卷扩容,下面看到dgg卷组还有4.97g的容量 可以给逻辑卷扩容
vgdisplay 里面还有318块数据可以给逻辑卷
下面给mysql_lv扩容 lvextend -l 指定多少容量(块 ‘318’ )100% 表示 剩余的容量全给他
可以看到Free PE / size 里面的容量分完了
但是df里还是6G左右,是因为df 看到的是文件系统的大小而非空间的大小,所以lvdsiplay看到是11G 但是df没变
把文件系统加上就可以了(不要格式化)
resize2fs /dev/dgg/mysql_lv
意思是同步文件系统(只支持ext系列 不支持xsf)
或者可以lvextend -r 这个命令会自动根据你的文件系统来扩容
刚刚我们把物理卷的容量全部分完,现在对logs_lv增加容量 就需要对物理卷进行扩容了,物理卷增加 卷组就可以增加 那么逻辑卷就可以扩容
给sdb新建一个分区,剩下15G分配给他,改id为8e
pv create /dev/sdb2 将sdb2加入物理卷
再vgextend dgg /dev/sdb2 将sdb2添加到dgg卷组 (vgextend 对卷组扩容命令)
现在可以对logs_lv进行扩容(lvextend -r -L 8G 8g就是将logs_lv扩容到8G)
这就是逻辑卷扩容
逻辑卷缩减
注意缩减有风险,建议先备份,操作要谨慎
xfs不支持缩减 只支持ext
实现方法
- 取消挂载
- 检测文件的完整性 fsck -f /路径/卷组/逻辑卷
- resize2fs /dev/卷组/逻辑卷 缩减指定逻辑卷 到多大 注意留足占用的空间 避免文件损坏 原来用3个G 那么最少缩减到4个G
- lvreduce -L nG /dev/…
- 再挂载回来
[如果文件缩减损坏 fsck /dev/mapper/][]
软件管理于安装
软件包管理器
rpm
安装,卸载,升级,查询,校验,数据库维护
-i 安装 但解决不了安装依赖的包
-v 显示安装过程
-h 显示安装进度
-q 查看是否安装包
-e 卸载,但也解决不了依赖关系
-qi 查看版本,安装时间,查询许可,包的描述(7以下的版本要加p)
-ql 列出已安装好的包的文件列表
-qf 查看文件来源那个包
-qc 查看配置文件
yum
rpm的前端程序,可解决软件包的相关依赖性,可在多个库之间定位软件包,up2data的替代工具,centos8用dnf代替了yum,不过保留了和yum的兼容性,配置也是通用的
yum/dnf的工作原理
基于c/s模式
- 先建立一个专门仓库服务器 yum server,里面一般装有大量RPM包文件,仓库里有一个独有的空间存放元数据(版本,包的索引,依赖关系)
- 建立一个专门yum client客户端,配置指向仓库路径
当yum install httpd 命令时,客户端会发送请求向服务器,先查元数据有没有httpd包(它的依赖关系,版本等)如果由会把元数据先下载下来,缓存到客户端,然后再次发送请求,把httpd包和需要的一些依赖关系下载下来安装,安装完以后再把下载的包删除,但是缓存不会删除方便下次查询。
yum
-y 跳过交互式,直接下载包
-q 或 --quiet:以静默模式执行命令,减少输出信息。
-v 或 --verbose:以详细模式执行命令,增加输出信息。
-C 或 --cacheonly:仅从缓存中运行,不下载或更新软件包。
--version:显示yum的版本信息。
install 安装指定 的软件包,可以指定多个 用空格分离
repolist -v 显示服务器的包的个数
repolist 列出现有仓库的列表
remore 卸载包
clean all 清除缓存
provides 查询包来源于那个仓库
history 查看安装了那些包
history.info 查看此编号安装了什么包,什么命令和时间
yum/dnf/apt总结程序包获取途径
Yum/Dnf/Apt程序包获取途径总结:
Yum:
-
从Yum仓库获取:默认从CentOS/RHEL官方Yum仓库下载软件包。
-
从本地rpm包获取:使用rpm命令直接从本地rpm包安装。
-
从第三方Yum仓库获取:可以添加其他Yum仓库作为程序包源,如EPEL仓库。
Dnf:
-
从Dnf仓库获取:默认从Fedora官方Dnf仓库下载软件包。
-
从本地rpm包获取:使用dnf本地rpm包安装。
-
从第三方Dnf仓库获取:可以添加其他Dnf仓库作为程序包源。
Apt:
-
从Apt仓库获取:默认从Ubuntu/Debian官方Apt仓库下载deb软件包。
-
从本地deb包获取:使用dpkg直接从本地deb包安装。
-
从第三方Apt仓库获取:可以添加其他Apt仓库作为程序包源,如PPAs。
总结:
-
Yum/Dnf/Apt主要从官方仓库下载并安装软件包,实现软件的统一管理。
-
也支持从本地rpm/deb包进行安装,方便快速安装软件。
-
可以添加第三方仓库扩展软件选择,比如EPEL
简要总结yum/dnf工作原理
yum和dnf是用于在基于RPM的Linux发行版中进行软件包管理的工具。它们的工作原理可以简要总结如下:
1 软件源配置:yum和dnf通过配置软件源来确定从哪里获取软件包。软件源是包含软件包的服务器或存储库。
2 元数据下载:当执行yum或dnf命令时,它们首先会从软件源下载元数据。元数据是描述软件包及其依赖关系的信息,包括软件包名称、版本、依赖关系等。
3 依赖关系解析:yum和dnf会分析软件包的依赖关系,确定需要安装、更新或删除的软件包以及它们的依赖关系。
4 事务处理:在确定要进行的操作后,yum和dnf会执行相应的事务处理。这可能涉及安装、更新、删除软件包以及解决依赖关系。
5 下载和安装:如果需要,yum和dnf会从软件源下载相应的软件包,并将其安装到系统中。它们会自动处理软件包之间的依赖关系,确保所有依赖的软件包都得到满足。
6 本地缓存:yum和dnf会将下载的软件包保存在本地缓存中,以便后续使用。这样可以提高软件包的获取速度,并在离线环境下使用。
搭建私有yum仓库(bose,epel源)给另一个虚拟机使用
下载httpd并启动服务
yum -y install httpd
systemctl enable --now httpd
创建目录
mkdir /var/www/html/rockylinux/8/
利用Linux自带的光盘搭建,将光盘的库拷到目录下
cp -r /misc/cd/AppStream /var/www/html/rockylinux/8/
cp -r /misc/cd/BaseOS /var/www/html/rockylinux/8/BaseOS
这样利用httpd搭建的局域网站就有了库
然后另一台虚拟机 cd /etc/yum.repos.d 更改客户端路径 yum仓库必须建立在此目录下且必须是 .repo 后缀
创建BaseOS仓库
name必须是与仓库名同名
baseurl是链接地址 可以是http:
https:// ftp:// file:/// 三种格式
gpgcheck表示 公匙 =0 表示不用密匙这里是私有仓库所以没有设置 如果觉得不安全也可以手动设置gpgkey=file:///etc/pki/rpm-gpg/ 里面有
官网仓库一般有 cnabled=1 表示启用此仓库 也可以不设置 一般默认开启
同理搭建Appstream仓库
如果想让epel源私有化 必须先在仓库里搭建起来,然后在网页上拉到私有仓库里,我们回到搭建库的虚拟机 搭建epel源仓库
然后将epel仓库拉到 /var/www/html/rockylinux/8的目录下
这个命令将会从epel仓库下载软件包和元数据并将他们保存到 指定目录下
yum reposync --repoid=epel --download-metadata -p /var/www/html/rockylinux/8/
登录局域网,然后复制地址给另一台机
然后这台虚拟机再搭建库
如图,现在我们就可以通过私有仓库下载包了
dpkg
安装包,不支持包的依赖
dpkg -i package.deb
#删除包,不建议,不自动卸载依赖于它的包
dpkg -r package
#删除包(包括配置文件)
dpkg -P package
#列出当前已安装的包,类似rpm -qa
dpkg -l
#显示该包的简要说明
dpkg -l package
#列出该包的状态,包括详细信息,类似rpm –qi
dpkg -s package
#列出该包中所包含的文件,类似rpm –ql
dpkg -L package
#搜索包含pattern的包,类似rpm –qf
dpkg -S <pattern>
#配置包,-a 使用,配置所有没有配置的软件包
dpkg --configure package
#列出 deb 包的内容,类似rpm –qpl
dpkg -c package.deb
#解开 deb 包的内容
dpkg --unpack package.deb
apt
ubutu使用的软件管理工具,ap具有更精简但足够的命令选项,而且参数选项的组织方式更为有效。
install 安装软件包
remove 移除软件包
purge 移除软件包及配置文件
update 刷新储存库索引
apt autoremove 自动删除不需要的包
full-upgrade 在升级软件包时自动处理依赖关系
apt search 搜索应用程序
show 显示安装细节
list 列出包含条件的包
edit-sources 编辑源列表
apt包索引配置文件
/etc/apt/sources.list
/etc/apt/sources.list.d
修改阿里云的apt源为清华源
sed -i 's/mirrors.aliyun.com/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list
apt命令操作(如安装和删除软件包)日志文件
/var/log/dpkg.log
查看软件依赖于那些包
root@ubuntu2004:/etc/apt# apt depends bc
bc
Depends: libc6 (>= 2.34)
Depends: libreadline8 (>= 6.0)
一键解读httpd安装脚本
#!/bin/bash
#这个变量定义的是系统的版本号,以便脚本通用
CPUS=`grep -c processor /proc/cpuinfo`
#定义要下载的httpd版本,以便更改
HTTPD_VERSION=2.4.52
#定义下载的版本号,方便解压
HTTPD_FILE=httpd-${HTTPD_VERSION}.tar.gz
#定义安装的位置
INSTALL_DIR=/apps/httpd
#定义字体颜色
COLOR="echo -e \E[32;1m"
END="\E[0m"
#引用文件里的变量,这样可以在脚本里引用
. /etc/os-release
#读取/etc/os-release 文件里$ID是不是三个版本
if [[ $ID =~ rhel|rocky|centos ]];then
#如果是就禁用防火墙
systemctl disable --now firewalld
CPUS=`grep -c processor /proc/cpuinfo`
#定义要下载的httpd版本,以便更改
HTTPD_VERSION=2.4.52
#定义下载的版本号,方便解压
HTTPD_FILE=httpd-${HTTPD_VERSION}.tar.gz
#定义安装的位置
INSTALL_DIR=/apps/httpd
#定义字体颜色
COLOR="echo -e \E[32;1m"
END="\E[0m"
#引用文件里的变量,这样可以在脚本里引用
. /etc/os-release
#读取/etc/os-release 文件里$ID是不是三个版本
if [[ $ID =~ rhel|rocky|centos ]];then
#如果是就禁用防火墙
systemctl disable --now firewalld
#然后下载源码编译的软件
yum -y install gcc make apr-devel apr-util-devel openssl-devel pcre-devel
redhat-rpm-config bzip2 wget
#判读是不是ubutu系统
elif [ $ID = 'ubuntu' ];then
#刷新库存索引
apt update
#下载ubutu源码编译软件
apt -y install gcc make libapr1-dev libaprutil1-dev libpcre3-dev libssl-dev
else
#以上都不是则打印,退出
$COLOR"不支持此系统,退出!"$END
exit
fi
#判断httpd是否下载,如果没有就下载
if [ ! -f ${HTTPD_FILE} ];then
wget https://dlcdn.apache.org//httpd/${HTTPD_FILE} || { $COLOR "下载失败,退
出" $END;exit; }
fi
#解压到指定的 /usr/local/src
tar xf ${HTTPD_FILE} -C /usr/local/src
#进入到此目录下
cd /usr/local/src/httpd-${HTTPD_VERSION}
#启用configure脚本 prefix特性指定安装到此目录下 启用ssl支持,禁用status
./configure --prefix=${INSTALL_DIR} --enable-ssl --disable-status
#用make工具并行编译,编译成功后安装
make -j $CPUS && make install
#使用软链接指向/usr/local/bin 这样就可以在任何地方运行apachectl 来管理httpd
ln -s /apps/httpd/bin/apachectl /usr/local/bin/
#启用apachectl httpd服务 并打印
apachectl start && $COLOR"安装成功!"$END
#hostnaem -I 显示当前ip
$COLOR"请访问:http://`hostname -I`"$END
安装nginx脚本
(过两天再补)
总结系统安装之后的常用初始化步骤。rocky/ubuntu
1.配置网络:根据需要配置网络连接,包括设置网卡名,IP地址、网关、DNS服务器等。
2.配置主机名:设置主机的名称,以便其他计算机能够识别和访问
3.配置时区:设置系统的时区,确保时间显示和日志记录正确。
4.配置SSH访问:如果需要通过SSH远程访问系统,可以配置SSH服务器,并设置适当的安全选 项,如 禁用root登录、使用密钥认证等。
5.配置防火墙:关闭selinux,关闭系统自带的防火墙,配置自定义的防火墙
6.创建用户:创建普通用户账户,以便以非管理员身份进行操作和管理。
7.安装常用软件:根据需求安装常用的软件包,如文本编辑器、Web服务器、数据库等。
总结开放系统互联OSI模型,每层作用及对应的协议
OSI包括七个层级: 应用层,表示层,传输层,网络层,数据链路层,物理层
-
应用层
- 提供应用程序访问OSI环境的服务,常用应用层协议有 HTTP,FTP,DNS,Telnet,DHCP,TFTP,SMIP等
-
表示层
- 设备固有数据格式和网络标准数据格式的转换 常用的协议有:MPEG,JPEG,MIDI,GIF,等等
-
会话层
- 通信管理,负责建立和断开通信连接(数据流动的逻辑通路)管理传输层一下的分层 常见的会话层协议有SQL、NFS、RPC、X Windows
-
传输层
- 管理两个节点之间的数据传输,负责可靠传输(确保数据被可靠传送到目的地)TCP和UDP, TCP是一种可靠的、面向连接的传输方式,确保数据包的顺序和流量控制。UDP是一种无连接的传输方式,不保证数据的可靠传输。UDP效率高但是丢包率也高,常用视频连接,电影等 ,
-
网络层
- 地址管理与路由选择,跨网络通讯 主要协议是IP
-
数据链路层
- 互连接设备之间传送和识别数据帧,常用协议有以太网,wi-fi,ppp等
-
物理层
- 物理层在物理媒体上传输原始的数据比特流。它的主要功能是建立、维护和释放物理连接,为上层协议提供服务。物理层常用的技术有电缆、光纤、无线电波等。
调整动态端口范围为20000-60000
默认的端口范围
[root@rocky8 ~]$ cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
编辑sysctl.conf文件:vim sysctl.conf 在末尾添加以下行
net.ipv4.ip_local_port_range = 20000 60000
运行一下命令以应用新的sysctl.conf设置
[root@rocky8 ~]$ sysctl -p
net.ipv4.ip_local_port_range = 20000 60000
检查更新是否生效:
[root@rocky8 ~]$ cat /proc/sys/net/ipv4/ip_local_port_range
20000 60000
总结TCP包头结构,TCP三次握手,4次挥手。
tcp包头结构包括源端口,目标端口,序号,确认号,数据偏移,控制标志,窗口,检验和,紧急指针和选项等
- 源端口:2字节,16位数字即端口个数为2^16次方即65536个
- 识别发送端端口号,是一个大于1023的16位数(唯一的)
- 1023之前的是给特权(root)用户使用的,(0是未知端口)永久分配给固定的系统用户使用
- 1024~49151:用户端口或注册端口,分配给程序注册为某应用使用
- 49152~65535动态或私有端口,客户端随机使用端口
- 目的端口:2字节,指明接收者所用的端口号一般有程序来指定
- 序号:4字节,用来识别源端口向目的端口发送的数据字节流,以本报文段所发送数据的第一个字节的编号在tcp连接中所传送的字节流的每一个字节流都会按照顺序编号,由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0开始
- 确认号:表示接受方期望收到发送方下一个报文字段的第一个字节数据的编号也就是告诉发送方我希望下次发送的数据的第一字节数据的编号为此确认号
- 数据偏移:报文头的大小,指示TCP包头的长度,以4字节为单位。它占4位,表示最大长度为60字节。
- 控制标志:控制标志包括URG、ACK、PSH、RST、SYN和FIN等。它们用于控制TCP连接的建立、维护和关闭。
- 窗口大小:窗口大小指示接收方的可用缓冲区大小,用于流量控制。
- 检验和:校验和用于检测TCP包头和数据在传输过程中是否发生错误
- 紧急指针:紧急指针用于指示紧急数据的结束位置
- 选项:选项字段用于在TCP包头中添加一些可选的功能和扩展。它的长度可变。
TCP三次握手
1,当通信双方从来没有通信并且通信软件没有打开的情况下,双方都处于(CLOSED)状态当A端向B端发送一个SYN(同步)标志位的TCP包,将序列号设为随机值(seq=x)
此时客户端进入到SYN-SENT状态(同步已发送),等待B端响应
2,B端收到A端的SYN包后,发送一个SYN和ACK(确认)标志位的TCP包,将确认号设为客户端的序列号+1(ACK=x+1),同时将自己的序列号设为随机值(seq=y)
这时B端进入到SYN-RCVD(同步收到)状态,
3,A端收到B端的SYN+ACK包后,发送一个带有ACK标志位的TCP包,将确认号设为B端的序列号+1(ACK=y+1)
B端收到A端的ACK包后,双方都进入已建立连接的ESTABLISHED状态,开始进行数据传输
这就是tcp的三次握手
四次挥手
TCP四次挥手是关闭TCP连接的过程,有客户端和服务器之间进行
1,客户端发送一个带有FIN(结束)标志位的TCP包,表示客户端不再发送数据
客户端进入FIN-WAIT_1(终止等待1)状态,等待服务器确认
2,服务器收到客户端的FIN包后,发送一个带有ACK标志位的TCP包,表示服务器收到了客户端的关闭请求
服务器进入到CLOSE_WAIT(关闭等待)状态,等待自己的关闭请求
3,服务器完成了所有的数据发送,并决定关闭连接时会发送一个FIN标志位的TCP包,表示服务器也不再发送数据了
服务器进入到LAST_ACK状态,等待客户端确认
4,客户端收到服务器的FIN包后,发送一个带有ACK标志位的TCP包,表示客户端收到了服务器的关闭请求
客户端进入到TIME_WAIT状态,在这个状态下会等待一段时间(通常时2倍的最大报文段的寿命),确保服务器收到了ACK包和一些服务器没有传输完的数据
服务器收到客户端的ACK包后,进入到CLOSED状态,关闭连接
客户端在等待时间结束后,也进入到CLOSED状态,关闭连接
主机到主机的包传递过程
1,应用层封装数据:发送主机的应用程序将要发送的数据封装成应用层的数据包,添加上相应的应用层协议头部,如HTTP、FTP等。
2,传输层封装数据:传输层协议(如TCP或UDP)将应用层的数据包封装成传输层的数据段。在TCP中,会添加TCP头部,包括源端口号和目的端口号等信息。
3,网络层封装数据:网络层协议(如IP)将传输层的数据段封装成网络层的数据包。在IP中,会添加IP头部,包括源IP地址和目的IP地址等信息。
4,数据链路层封装数据:数据链路层协议(如以太网)将网络层的数据包封装成帧。在以太网中,会添加以太网头部,包括源MAC地址和目的MAC地址等信息。
5,物理层传输数据:数据链路层将帧传输到物理层,通过物理媒介(如以太网电缆、无线信道等)将数据发送到目标主机。
6,目标主机接收数据:接收主机的物理层接收到数据后,依次向上交给数据链路层、网络层、传输层和应用层进行解封装。
7,数据传递给应用程序:接收主机的应用层接收到数据后,进行相应的处理,将数据交给目标应用程序进行处理或显示。
总结起来,主机到主机的包传递过程经过应用层、传输层、网络层、数据链路层和物理层的封装和传输,最终到达目标主机后再进行解封装,将数据传递给目标应用程序。这个过程中,每一层协议都添加了相应的头部信息,用于标识和控制数据的传输
总结IP地址 A, B, C, D 类,并解析IP地址的组成
A类IP地址:网络ID最高位8位,第一位是0,后七位是0~127之间,后24位是主机id。A类地址适用于大型网络,可以有2^24-2个主机
B类IP地址:网络ID最高位16位,前两位是10,后14位是128~191之间,后16位是主机id。适用于中型网络,可以有2^16-2个主机
C类IP地址:网络ID最高位24位,前三位是110,后21位是192~223之间,后8位是主机id。适用于小型网络,可以有2^8-2个主机
D类IP地址:以1110开头,范围从224.0.0.0到239.0.0.0。 D类地址用于多播通信,不分网络和主机id
ip地址的组成如下:
- 网络部分:IP地址的前面几位用来表示网络的标识,用于路由器进行数据包转发。根据IP地址的类别不同,网络部分的位数也不同
- 主机部分:IP地址的后面几位用来表示主机的标识,用于在网络中唯一标识一个主机。根据IP地址的类别不同,主机部分的位数也不同
- 子网掩码:用于将IP地址划分为网络部分和主机部分。子网掩码是一个与IP地址长度相同的二进制数,其中网络部分为1,主机部分为0。通过与IP地址进行逻辑与运算,可以得到网络部分和主机部分的值。
201.222.200.111/18计算主机数?子网掩码?说明计算方法
通过子网掩码可以计算出网络id和主机id,子网掩码是一个32位的二进制数,对应了IP地址
通过201.222.200.111/18 可以确定前18位是网络ip
那么转换位二进制,因为子网掩码的网络id部分位1 主机位为0,那么前18位是1 后14位为0 得到
201.222.11000000.00000000
计算得出网络地址为201.222.192.0
主机地址范围:201.222.192.1-201.222.255.254
计算主机数:
2^14-2=16382
主机数位16382个
子网掩码为:255.255.192.0
当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?
A的地址转换为二进制是:
10.0.1.1:00001010.00000000.00000001.00000001
子网掩码255.255.0.0:
11111111.11111111.00000000.00000000
B的地址转换为二进制是:
10.0.2.2:
00001010.00000000.00000010.00000010
子网掩码255.255.255.0
11111111.11111111.11111111.00000000
如果A事先不知道B的子网掩码,可以通过将自己的子网掩码和自己的IP地址相与,再将自己的子网掩码和对方的IP地址相与,来判断A和B是否在同一个网段
基于规则:任何数和0相与结果为0,任何数和1相与为原值
0^0=0
0^1=0
1^0=0
1^1=1
将A的子网掩码和A的IP地址相与:
00001010.00000000.00000001.000000001
11111111.11111111.00000000.00000000
00001010.00000000.00000000.00000000:得到的结果是10.0.0.0,这是A的网络地址
B的IP地址是10.0.2.2,转换为二进制位:
00001010.00000000.00000010.00000010
将A的子网掩码和A的IP地址相与:
00001010.00000000.00000001.00000001
11111111.11111111.00000000.00000000
00001010.00000000.00000000.00000000 得到的结果也是10.0.0.0 这是B的网络地址
这时A会认为B的IP和自己在一个网段,这时ApingB的话,能够ping到,但是B也使用上面的方法,B会认为A不可到达,然后就不会回应A的ping
如何将10.0.0.0/8划分32个子网?求每个子网的掩码,主机数
首先要将10.0.0.0/8分32个子网就需要向主机id借5位来创建子网
首先,我们将初始的掩码为8位的网络id转换为二进制:
10.0.0.0/8:00001010.00000000.00000000.00000000
根据我们的需求,从左至右依次借用5个主机id位,这样我们可以得到以下的子网划分,以下是按照二进制+1的方式增长划分的32个子网的网络id 子网掩码 和可用主机数:
10.0.0.0/13: 00001010.00000000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.8.0.0/13: 00001010.00001000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.16.0.0/13: 00001010.00010000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.24.0.0/13: 00001010.00011000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.32.0.0/13: 00001010.00100000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.40.0.0/13: 00001010.00101000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.48.0.0/13: 00001010.00110000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.56.0.0/13: 00001010.00111000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.64.0.0/13: 00001010.01000000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.72.0.0/13: 00001010.01001000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.80.0.0/13: 00001010.01010000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.88.0.0/13: 00001010.01011000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.96.0.0/13: 00001010.01100000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.104.0.0/13: 00001010.01101000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.112.0.0/13: 00001010.01110000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.120.0.0/13: 00001010.01111000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.128.0.0/13: 00001010.10000000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.136.0.0/13: 00001010.10001000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.144.0.0/13: 00001010.10010000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.152.0.0/13: 00001010.10011000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.160.0.0/13: 00001010.10100000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.168.0.0/13: 00001010.10101000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.176.0.0/13: 00001010.10110000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.184.0.0/13: 00001010.10111000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.192.0.0/13: 00001010.11000000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.200.0.0/13: 00001010.11001000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.208.0.0/13: 00001010.11010000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.216.0.0/13: 00001010.11011000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.224.0.0/13: 00001010.11100000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
10.232.0.0/13: 00001010.11101000.00000000.00000000
子网掩码:255.248.0.0
可用主机数:2^19 - 2 = 524286
注意,每个子网的掩码都是255.248.0.0,因为我们借用了5个主机id位,这样每个子网可以容纳2^19-2个主机(-2是因为网络id和广播地址被占用)
通过网络配置命令,让主机可以上网。 ip, netmask, gateway, dns,主机名。相关命令总结,最终可以通过这些配置让你的主机上网。
修改主机名
hostname(临时修改)
hostnamectl set-hostname)
vim /etc/hostname (修改主机名配置文件)
ifconfig
用于查看和配置网卡信息
-a 查看所有网卡信息
-s 查看网卡摘要信息
xx up/down 启用关闭网卡
route
用于查看,添加,删除路由
add 添加路由
del 删除路由
-n 数字显示
-v 查看详细信息
ip
link 显示链路层信息,配置,管理查看网络接口板
link set down 实现网卡的禁用
a 查看网卡信息
a a 添加网卡
a del 删除网卡
a flush 清空IP地址
nmcli
connection delete 删除网卡配置
connection reload 重启网络连接
connection up/down 用于开启/关闭网络连接
connection add 创建网卡配置文件
connection show 查看网络连接信息
解析/etc/sysconfig/network-scripts/ifcfg-eth0配置格式。
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.150
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.2
DNS2=180.76.76.76
DNS3=119.29.29.29
ONBOOT=yes
参数 | 描述 |
---|---|
[TYPE] | 说明网络类型,常见Ethernet |
[NAME] | 与设备名相同 |
[DEVICE] | 设备名 |
[BOOTPROTO] | 使用的协议(none,static表示手动配置静态地址,dhcp表示自动分配动态地址) |
[GATEWAY] | 指明网关 |
[ONBOOT] | 启动此设备 |
[IPADDR] | 指明IP地址 |
[PREFIX] | 网络id的位数 |
[DNS1] | dns服务器的地址 |
[DNS2] | 第二个dns服务器的地址 |
基于配置文件或命令完成bond0配置
两张网卡都基于一个模式下(NAT或者仅NAT模式)
准备配置文件,先设定band0配置文件
[root@cocky8 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
TYPE=bond
BOOTPROTO=none
IPADDR=10.0.0.48
GATEWAY=10.0.0.2
DNS1=223.5.5.5
NAME=bond0
DEVICE=bond0
PREFIX=24
BONDING_OPTS="mode=1 miimon=100"
(这里表示监控间隔100毫秒监控一次)
将eth0和eth1加入到band0里面
[root@rocky8 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
NAME=eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
[root@centos8 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
NAME=eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
然后使用命令启动生效
nmcli connection reload up
通过ifconfig命令结果找到ip地址
使用脚本判断 你主机所在网络内在线的主机IP有哪些? ping通则在线。
#!/bin/bash
NETWORK=10.0.0.
PREFIX=24
for i in $(seq 1 254);do
IP=$NETWORK$i
ping -c 1 -W 1 $IP &> /dev/null && echo "$IP 在线" || echo "$IP 不在线"
done
AT或者仅NAT模式)
准备配置文件,先设定band0配置文件
[root@cocky8 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
TYPE=bond
BOOTPROTO=none
IPADDR=10.0.0.48
GATEWAY=10.0.0.2
DNS1=223.5.5.5
NAME=bond0
DEVICE=bond0
PREFIX=24
BONDING_OPTS="mode=1 miimon=100"
(这里表示监控间隔100毫秒监控一次)
将eth0和eth1加入到band0里面
[root@rocky8 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
NAME=eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
[root@centos8 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
NAME=eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
然后使用命令启动生效
nmcli connection reload up
通过ifconfig命令结果找到ip地址
[外链图片转存中…(img-G3bfaJ80-1716189500498)]
使用脚本判断 你主机所在网络内在线的主机IP有哪些? ping通则在线。
#!/bin/bash
NETWORK=10.0.0.
PREFIX=24
for i in $(seq 1 254);do
IP=$NETWORK$i
ping -c 1 -W 1 $IP &> /dev/null && echo "$IP 在线" || echo "$IP 不在线"
done