第三周作业

 

目录

1. 总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现

1.1 Raid 0

1.2 Raid 1

1.3 Raid 5

1.4 Raid 10

1.5 Raid 01

2. 完成对LVM磁盘扩容及缩容示例

2.1 LVM磁盘扩容

 2.2 LVM磁盘缩容

3. 解读一键安装httpd脚本,并自行实现一个一键安装脚本,要求

4. 总结TCP包头结构,TCP三次握手,4次挥手。

4.1 TCP包头结构

4.2 TCP的三次挥手

4.3 TCP的四次挥手

5. 201.222.200.111/18计算主机数?子网掩码?说明计算方法。

5.1 计算主机数

5.2 子网掩码

6. 当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?

7.如何将10.0.0.0/8划分32个子网?求每个子网的掩码,主机数。


1. 总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现

1.1 Raid 0

原理:以chunk为单位读写数据,然后分布到几个硬盘上,可以并行进行读写

利用率:高

冗余性:没有冗余性,一个硬盘损坏会导致数据丢失

性能:高,因为可以并行进行读写

硬盘数量:1+

1.2 Raid 1

原理:两组以上的硬盘互相作为镜像存放数据

利用率:50%,数据存储量为硬盘容量的一半

冗余性:高,一个硬盘损坏不会丢失数据

性能:读性能好,写性能降低

硬盘数量:2+

1.3 Raid 5

原理:将数据存储在多个硬盘上,同时使用奇偶校验位进行数据冗余。

利用率:高,数据存储量为(硬盘数量-1)*单个硬盘容量

冗余性:中,一个硬盘损坏不会丢失数据

性能:读性能好,写性能好

硬盘数量:3,3+

1.4 Raid 10

原理:将数据使用镜像存储在两个硬盘,然后用分布的方法串联,结合了RAID 1和RAID 0的特点。

利用率:50%,数据存储量为硬盘容量的一半

冗余性:高,每组镜像最多只能损坏一块

性能:读性能好,写性能好

硬盘数量:4,4+

1.5 Raid 01

原理:将数据存储在两个以上硬盘,然后再使用镜像提供冗余,结合了RAID 0和RAID 1的特点。

利用率:50%,数据存储量为硬盘容量的一半

冗余性:低,最多只能损坏一块硬盘

性能:读性能好,写性能好

硬盘数量:4,4+

2. 完成对LVM磁盘扩容及缩容示例

2.1 LVM磁盘扩容

查看硬盘空间

[root@rocky8 ~]$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                  8:0    0  200G  0 disk 
├─sda1               8:1    0    1G  0 part /boot
└─sda2               8:2    0  199G  0 part 
  ├─rl-root        253:0    0   70G  0 lvm  /
  ├─rl-swap        253:1    0    2G  0 lvm  [SWAP]
  └─rl-home        253:2    0  127G  0 lvm  /home
sdb                  8:16   0   20G  0 disk 
├─sdb1               8:17   0    5G  0 part 
│ └─testvg-test_lv 253:3    0   14G  0 lvm  /test
└─sdb2               8:18   0   10G  0 part 
sdc                  8:32   0   10G  0 disk 
└─testvg-test_lv   253:3    0   14G  0 lvm  /test
sr0                 11:0    1 10.5G  0 rom  

[root@rocky8 ~]$ pvs
  PV         VG     Fmt  Attr PSize    PFree   
  /dev/sda2  rl     lvm2 a--  <199.00g       0 
  /dev/sdb1  testvg lvm2 a--    <5.00g 1016.00m
  /dev/sdc   testvg lvm2 a--   <10.00g       0

[root@rocky8 ~]$ vgs
  VG     #PV #LV #SN Attr   VSize    VFree   
  rl       1   3   0 wz--n- <199.00g       0 
  testvg   2   1   0 wz--n-   14.99g 1016.00m

[root@rocky8 ~]$ lvs
  LV      VG     Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home    rl     -wi-ao---- <126.97g                                                    
  root    rl     -wi-ao----   70.00g                                                    
  swap    rl     -wi-ao----   <2.03g                                                    
  test_lv testvg -wi-a-----   14.00g 

1.给LVM磁盘test_lv扩容,由于卷组testvg剩余空间不多,所以先给磁盘sdb创建一个10G的新分区sdb2
2.创建物理卷:
pvcreate /dev/sdb2

3.给卷组testvg扩容:

vgextend testvg /dev/sdb2

4.给LVM磁盘test_lv扩容

lvextend -r -l +50%free /dev/testvg/test_lv

5.查看LVM磁盘空间

[root@rocky8 ~]$ lvs
  LV      VG     Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home    rl     -wi-ao---- <126.97g                                                    
  root    rl     -wi-ao----   70.00g                                                    
  swap    rl     -wi-ao----   <2.03g                                                    
  test_lv testvg -wi-ao----  <19.50g   

LVM磁盘test_lv已扩容

 2.2 LVM磁盘缩容

  1. 缩减有风险,建议先备份
  2. 只能离线缩减
  3. 只支持ext,不支持xfs

1.取消挂载

umount /test

2.检查文件系统

fsck -f /dev/testvg/test_lv

3.缩减LVM磁盘到4G

resize2fs /dev/testvg/test_lv 4G 

lvreduce -L 4G /dev/testvg/test_lv 

4.重新挂载

mount -a

3. 解读一键安装httpd脚本,并自行实现一个一键安装脚本,要求

1)基于位置变量传递版本号
2)基于独立函数进行初始化步骤,禁用防火墙,安装开发依赖包。
3)基于独立函数进行下载包,解压包。
4)基于独立函数进行编译,安装包。
5)基于独立函数完成链接包。
6)启动服务,并输出自定义的语句,安装xxx服务

#定义变量
CPUS=`grep -c processor /proc/cpuinfo` #CPU内核数量
HTTPD_FILE=httpd-$[HTTPD_VERSION}.tar.gz #HTTPD源码
HTTPD_VERSION=1.20.2   #指定版本号
INSTALL_DIR=/apps/httpd  #指定安装目录

. /etc/os-release #加载系统环境

#根据系统版本进行初始化,禁用防火墙,安装开发依赖包
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
elif [ $ID = 'ubuntu' ];then
    apt update
    apt -y gcc make libapr1-dev libaprutil1-dev libpcre3-dev libss1-dev
else
    echo "不支持此系统,退出!"
fi


 
# 下载指定版本的apache,如果下载失败,提示并退出
if [ ! -f ${HTTPD_FILE} ];then
    wget https://dlcdn.apache.org//httpd/${HTTPD_FILE} || { echo "下载失败!";exit 20;  }
fi

#将tar包解压缩到指定目录
tar xf  ${HTTPD_FILE} -C /usr/local/src

#移动到源码目录
cd /usr/local/src/httpd-${HTTPD_VERSION}

#编译安装
./configure --prefix=${INSTALL_DIR} --enable-ssl disable-status
make -j $CPUS && make install
if [ $? -ne 0 ];then
    echo Install apache is failed!
    exit 10
else
    echo "Install apache is finished!" 
fi
#完成链接
ln -s /apps/httpd/bin/apachectl /usr/local/bin/
#启动服务
apachectl start && echo “安装成功!”
echo "请访问:http://`hostname -I`"

4. 总结TCP包头结构,TCP三次握手,4次挥手。

4.1 TCP包头结构

TCP首部包括20字节的固定首部部分及长度可变的其他选项,所以TCP首部长度可变。20个字节又分为5部分,每部分4个字节32位,如图中的前5行,每行表示32位。

源端口和目标端口字段:进程与其他进程通信需要通过端口,而一个进程某个时刻只能占用一个端口,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通宵,源端口和目的各占 2 字节(16位),所以可以推断出计算机的端口个数为 2^16个,即65536

序列号:表示本报文段所发送数据的第一个字节的编号,在TCP连接中的字节流的每一个字节都会按顺序编号,即这一次发的是1,如果传输正常,下一次发的就是2

确认号:表示接收方下一次希望收到发送方发送的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。如返回报文确认号为2,即表示接收方已经收到发送方发的序号为1的数据,希望发送方下一次发送序号为2的数据

数据偏移:即首部长度,表示TCP报文段的首部长度。

控制位:

  • ACK:只有该位为 1 时,前面的确认号字段才有效,TCP 规定连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
  • RST:该位为 1 时,表示 TCP 连接中出现严重错误,必须释放连接,然后再重新建立连接,或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段
  • SYN:在建立连接时使用,当SYN= 1,ACK=0 时,表示希望建立连接,当SYN= 1,ACK=1 时,表示对方同意建立连接,SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才为1,带SYN标志的TCP报文称为同步报文段
  • FIN:表示通知对方本段要关闭连接了,标志数据是否发送完毕,如果FIN= 1 ,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段。
  • 紧急 URG —— 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 即URG=1的数据包不用排队直接优先传输。
  • PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接受后续数据腾出空间,如果为1,则表示对方应当立即把数据提交给上层使用,而不是缓存起来。

窗口大小:表示现在允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传输后面数据。

校验和:提供额外的可靠性

紧急指针:标记紧急数据在数据字段中的位置

4.2 TCP的三次挥手

TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。三次握手的过程如下图:

  1. 一开始,客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口,处于 LISTEN 状态
  2. 然后客户端会随机初始化序号(client_isn)为x,将x作为 TCP 首部的序号,同时把SYN标志位置为1 ,表示SYN报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,,之后客户端处于SYN_SEND状态。

  3. 服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号(server-isn)y,将将y作为 TCP 首部的序号,其次把 TCP 首部的「确认应答号」字段填入 x + 1, 接着把 SYN 和 ACK 标志位置为 1。最后把该报文发给客户端,之后服务端处于 SYN-RCVD 状态

  4. 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部 ACK 标志位置为 1 ,其次「确认应答号」字段填入 y+ 1 ,最后把报文发送给服务端,这次报文可以携带客户到服务端的数据,之后客户端处于 ESTABLISHED 状态。

  5. 服务端收到客户端的应答报文后,也进入 ESTABLISHED 状态。

前两次的握手是确保成功建立连接,所以第三次握手才携带数据

4.3 TCP的四次挥手


TCP 断开连接是通过四次挥手的方式,过程如下图:

  1. 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN =1 ,seq=u的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。
  2. 服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSE_WAIT 状态。
  3. 客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态。
  4. 等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。
  5. 客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT 状态
  6. 服务端收到了 ACK 应答报文后,就进入了 CLOSE 状态,至此服务端已经完成连接的关闭。
  7. 客户端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,至此客户端也完成连接的关闭

前 2 次挥手用于关闭一个方向的数据通道,后两次挥手用于关闭另外一个方向的数据通道

5. 201.222.200.111/18计算主机数?子网掩码?说明计算方法。

5.1 计算主机数

201.222.200.111/18说明网络ID位数是18位,即主机位数为32-18=14,则该网段主机数为2^14-2=16382个

5.2 子网掩码

201.222.200.111/18转化为二进制:11001001.11011111.11001000.01101111

则网络ID为   (11001001.110111111.11),保留原数字子网掩码应该为1,否则为0

则子网掩码为(11111111.11111111.11000000.00000000)

转化为十进制:255.255.192.0

6. 当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?

A(10.0.1.1/16),子网掩码为255.255.0.0

B  (10.0.2.2/24)   ,子网掩码为255.255.255.0

A如何判断和B是否在同一网段,则需要用自己的子网掩码 跟自己的IP地址和B的IP地址进行与运算

运算结果:A的网段为10.0,B的网段为10.0,则A与B在同一网段,A可以和B通信

但是从B判断的话,A的网段为10.0.1,B的网段为10.0.2,B和A不在同一网段,所以B不可以和A通信

7.如何将10.0.0.0/8划分32个子网?求每个子网的掩码,主机数。

划分子网需要网络ID位数像主机ID位数借位,划分子网数32=2^5,则划分32个子网,网络ID位数需要向主机ID位数借5位 ,即10.0.0.0/13

划分子网后网络ID转化为二进制为(00001010.00000)

则每个子网的掩码为11111111.11111000.00000000.00000000

转化为十进制为255.248.0.0

每个子网的主机数=2^(32-13)-2=524286

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值