1.总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现。
RAID(冗余磁盘阵列)是一种将多个物理磁盘组合在一起以提供更高性能、更高容量或更高可靠性的技术。以下是对RAID 0、1、5、10和01的工作原理的总结:
- RAID 0:
- 工作原理:RAID 0将数据分成块并将其分散存储在多个物理磁盘上。数据被分割成多个块,每个块被写入不同的磁盘。这样可以提高读写性能,因为数据可以同时从多个磁盘读取或写入。
- 利用率:高,将多个磁盘组合在一起,提供更大的存储容量。
- 冗余性:无,没有冗余备份,一块磁盘故障将导致数据丢失。
- 性能:高,可以提供更高的读写性能和吞吐量,理论上,不管多少硬盘组成,那么他们的读写速度可以叠加。
- 最少硬盘数量:至少两个硬盘。
- 注意:如果多块硬盘大小不一样,则所有硬盘按他们当中最小的的来算,其他硬盘多出来的就用不了了。
- 优点:高性能、高吞吐量。
- 缺点:没有冗余,一块磁盘故障将导致所有数据丢失。
- RAID 1:
- 工作原理:RAID 1使用镜像技术,将数据同时写入两个或多个物理磁盘。这样可以实现数据的冗余存储,即使一块磁盘故障,数据仍然可用。
- 利用率:低,存储容量减半,因为数据被完全复制在多个磁盘上。
- 冗余性:高,数据被完全复制在多个磁盘上,即使一块磁盘故障,数据仍然可用。
- 性能:相对较低,读取性能不错(每块个读%50),写入性能可能略有下降(因为每块硬盘的要写一份)。
- 最少硬盘数量:至少两个硬盘。
- 优点:高可靠性、数据冗余。
- 缺点:存储容量减半(相当于花两倍的价格保存一份数据),读取性能几乎没有提升。
- RAID 5:
- 工作原理:RAID 5将数据和奇偶校验信息分布存储在多个物理磁盘上。奇偶校验信息用于恢复故障磁盘上的数据。数据和奇偶校验信息被分块存储在不同的磁盘上(当一个磁盘发生故障时,可以通过奇偶校验信息来恢复故障磁盘上的数据。假设磁盘1发生故障,可以通过从磁盘2和磁盘3上读取相同位置的数据,再进行异或运算,得到磁盘1上的数据。),提高了读写性能和存储容量。
- 利用率:高,存储容量利用率高,不管多少快硬盘来搭建只需要一个磁盘的容量用于存放奇偶校验信息。
- 冗余性:高,可以容忍一块磁盘故障,通过奇偶校验信息恢复数据。
- 性能:相对较高,读取性能较好,写入性能相对较低。
- 最少硬盘数量:至少三个硬盘。
- 优点:高性能、高可靠性、存储容量利用率高。
- 缺点:写入性能相对较低,防止不了两块硬盘同时损坏。
- RAID 10:
- 工作原理:RAID 10是RAID 1和RAID 0的组合。每两块磁盘组成RAID 1,然后再将这些RAID 1磁盘组成RAID 0阵列。这样既实现了数据的冗余存储,又提高了读写性能。
- 利用率:中等,存储容量减半,因为数据被完全复制在多个磁盘上。
- 冗余性:高,数据被完全复制在多个磁盘上,可以容忍多块磁盘故障(里面的每组RAID 1 坏一块没问题,但是坏两块 比翼双飞 组成不了最后的RAID 0 就GG)。
- 性能:高,具有较好的读写性能和吞吐量。
- 最少硬盘数量:至少四个硬盘。
- 优点:高性能、高可靠性。
- 缺点:存储容量减半。
- RAID 01:
- 工作原理:RAID 01是RAID 0和RAID 1的组合。首先将多个物理磁盘分成两组,每组内部使用RAID 0技术进行数据分块和分散存储,然后再将这两组磁盘使用RAID 1技术进行镜像存储。
- 利用率:中等,存储容量较低,需要至少四个磁盘。
- 冗余性:中等,数据被镜像存储在不同的磁盘上,可以容忍少些硬盘的损坏(坏一块硬盘,相当于坏了个RIAD 0)。
- 性能:高,具有较好的读写性能和吞吐量。
- 最少硬盘数量:至少四个硬盘。
- 优点:高性能。
- 缺点:存储容量较低,需要至少四个磁盘,冗余性不如RAID 10 高。
2.完成对LVM磁盘扩容及缩容示例。
创建逻辑卷
这里我准备了一块硬盘和一个分区。
第一步:创建物理卷(pv):
[root@centos8 ~]# pvcreate /dev/sda6 /dev/sdb 将硬盘和分区变成物理卷
Physical volume "/dev/sda6" successfully created.
Physical volume "/dev/sdb" successfully created.
[root@centos8 ~]# pvs 查看已生成的物理卷
PV VG Fmt Attr PSize PFree
/dev/sda6 lvm2 --- 30.00g 30.00g
/dev/sdb lvm2 --- 20.00g 20.00g
第二部:创建卷组(vg):
[root@centos8 ~]# vgcreate vg_mysql /dev/sda6 /dev/sdb 使用上面生成的物理卷,创建一个名为vg_mysql的卷组
Volume group "vg_mysql" successfully created
[root@centos8 ~]# vgs 查看生成的卷组
VG #PV #LV #SN Attr VSize VFree
vg_mysql 2 0 0 wz--n- 49.99g 49.99g
[root@centos8 ~]# pvdisplay 详细查看物理卷,可以看到两个物理卷属于同一个卷组,每个PE的大小,总PE和剩余的PE。
--- Physical volume ---
PV Name /dev/sda6
VG Name vg_mysql
PV Size 30.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 7679
Free PE 7679
Allocated PE 0
PV UUID 30uewP-ABaB-CjoW-Sz9J-9CfL-ioNZ-QCJ6qH
--- Physical volume ---
PV Name /dev/sdb
VG Name vg_mysql
PV Size 20.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 5119
Free PE 5119
Allocated PE 0
PV UUID BicDZO-3wjR-LI6X-9VmU-W5bT-yD2J-HyzwXQ
第三步:拿出卷组里面的PE来生成逻辑卷
[root@centos8 ~]# lvcreate -n lv_data -l 8960 vg_mysql 从卷组中拿出8960个PE出来(4M*8960=30GB),生成名为lv_datad的逻辑卷。
Logical volume "lv_data" created.
[root@centos8 ~]# lvs 查看生成的逻辑卷
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_data vg_mysql -wi-a----- 35.00g
对逻辑卷格式化,并创建文件系统
[root@centos8 ~]# ll /dev/vg_mysql/lv_data 这就是我们上面创建的逻辑卷
lrwxrwxrwx 1 root root 7 Dec 31 16:39 /dev/vg_mysql/lv_data -> ../dm-0
[root@centos8 ~]# mkfs.ext4 /dev/vg_mysql/lv_data 逻辑卷格式化,由于xfs文件系统不支持逻辑卷缩减,这里使用ext4文件系统。
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 9175040 4k blocks and 2293760 inodes
Filesystem UUID: b5d2f5ee-2b57-4f0d-be7f-0726fdfdabdf
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
然后就可以看到它有了UUID,就可以写到/etc/fstab中进行挂载了
挂载:
[root@centos8 /]# vim /etc/fstab
UUID=5579504a-9e3a-4916-8623-2584afbb8ab7 / xfs defaults 0 0
UUID=10603980-42c4-447b-8053-19339e2d3852 /boot xfs defaults 0 0
UUID=ea1b15cf-e25e-4087-ad8b-799ed334a916 /data xfs defaults 0 0
UUID=e031e142-f45a-430b-b46f-efa202d02720 none swap defaults 0 0
UUID=b5d2f5ee-2b57-4f0d-be7f-0726fdfdabdf /data2 ext4 defaults 0 0 把逻辑卷挂载到根下的data2 目录
[root@centos8 /]# mount -a 挂载
逻辑卷扩容
查看卷组剩余空间
[root@centos8 /]# vgdisplay
--- Volume group ---
VG Name vg_mysql
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 49.99 GiB
PE Size 4.00 MiB
Total PE 12798
Alloc PE / Size 8960 / 35.00 GiB
Free PE / Size 3838 / 14.99 GiB 可以看到还剩余14G多
VG UUID 8LGvmA-C33X-kOLg-z0JC-liKO-D7SM-E67cPn
扩容
[root@centos8 /]# ll /dev/mapper/vg_mysql-lv_data
lrwxrwxrwx 1 root root 7 Dec 31 16:47 /dev/mapper/vg_mysql-lv_data -> ../dm-0
[root@centos8 /]# lvextend -l +100%free /dev/mapper/vg_mysql-lv_data 对逻辑卷扩容,使用掉卷组中剩余的全部空间
Size of logical volume vg_mysql/lv_data changed from 35.00 GiB (8960 extents) to 49.99 GiB (12798 extents).
Logical volume vg_mysql/lv_data successfully resized.
查看扩容后,卷组的剩余PE
[root@centos8 /]# vgdisplay
--- Volume group ---
VG Name vg_mysql
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 49.99 GiB
PE Size 4.00 MiB
Total PE 12798
Alloc PE / Size 12798 / 49.99 GiB
Free PE / Size 0 / 0 可以看到卷组剩余空间已经使用完了
VG UUID 8LGvmA-C33X-kOLg-z0JC-liKO-D7SM-E67cPn
文件系统和磁盘空间同步
[root@centos8 /]# resize2fs /dev/mapper/vg_mysql-lv_data 对逻辑卷进行文件系统和空间同步
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/mapper/vg_mysql-lv_data is mounted on /data2; on-line resizing required
old_desc_blocks = 5, new_desc_blocks = 7
The filesystem on /dev/mapper/vg_mysql-lv_data is now 13105152 (4k) blocks long.
同步成功,可以正常使用了
逻辑卷缩减
注意:xfs的文件系统不支持缩减
注意:缩减前建议备份!!!
第一步:取消逻辑卷的挂载
[root@centos8 /]# umount /data2
第二部:检查文件系统
[root@centos8 /]# e2fsck -f /dev/vg_mysql/lv_data
e2fsck 1.45.6 (20-Mar-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg_mysql/lv_data: 12/3276800 files (0.0% non-contiguous), 1589109/13105152 blocks
第三步:对文件系统进行缩减
[root@centos8 /]# resize2fs /dev/vg_mysql/lv_data 10G 缩减10G
resize2fs 1.45.6 (20-Mar-2020)
Resizing the filesystem on /dev/vg_mysql/lv_data to 2621440 (4k) blocks.
The filesystem on /dev/vg_mysql/lv_data is now 2621440 (4k) blocks long.
第四步:对逻辑卷缩减
[root@centos8 /]# lvreduce -L 10G /dev/vg_mysql/lv_data 缩减10G
WARNING: Reducing active logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg_mysql/lv_data? [y/n]: y
Size of logical volume vg_mysql/lv_data changed from 49.99 GiB (12798 extents) to 10.00 GiB (2560 extents).
Logical volume vg_mysql/lv_data successfully resized.
最后挂载,查看逻辑卷缩减没有
[root@centos8 /]# mount -a
[root@centos8 /]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 948M 0 948M 0% /dev
tmpfs tmpfs 976M 0 976M 0% /dev/shm
tmpfs tmpfs 976M 18M 958M 2% /run
tmpfs tmpfs 976M 0 976M 0% /sys/fs/cgroup
/dev/sda2 xfs 100G 5.2G 95G 6% /
/dev/sda5 xfs 50G 390M 50G 1% /data
/dev/sda1 xfs 1014M 226M 789M 23% /boot
tmpfs tmpfs 195M 12K 195M 1% /run/user/42
tmpfs tmpfs 195M 0 195M 0% /run/user/0
/dev/mapper/vg_mysql-lv_data ext4 9.6G 5.1G 4.1G 56% /data2
3.总结程序包管理器有哪些,以及包中包含什么内容的文件,尝试这些文件如何获取命令获取? yum/dnf/apt总结程序包获取途径,以及rpm, yum, apt命令选项示例。
总结程序包管理器有哪些,以及包中包含什么内容的文件
对于CentOS和Ubuntu这两个主流Linux发行版,其程序包管理器分别是:
CentOS:
-
RPM - 管理软件包格式为.rpm的软件,是CentOS默认的包管理系统。通过rpm命令进行操作。
-
Yum - 基于RPM包管理系统构建的高级包管理工具。通过yum命令进行软件安装、更新、删除等操作。它可以自动处理软件依赖关系问题,DNF(Dandified YUM):DNF是YUM的下一代版本
Ubuntu:
-
dpkg - 低级别的deb软件包管理器。通过dpkg命令直接操作.deb软件包。
-
APT - 基于dpkg的高级软件包管理系统。通过apt命令进行软件安装、更新、删除等操作。它可以自动解决软件依赖问题。
总结下来:
-
CentOS使用RPM作为包格式,Yum作为主要的包管理工具。
-
Ubuntu使用deb作为包格式,dpkg作为底层工具,APT作为高级包管理系统。
程序包管理器总结
主流Linux发行版中的程序包管理器有RPM、Yum、dpkg、APT几种。
RPM包管理器管理的文件格式为.rpm文件,包含:
- 主文件系统中的文件
- 配置文件
- 文档
- 脚本(preinstall、postinstall等)
使用rpm命令可以操作rpm包,如:
- rpm -ivh package.rpm 安装rpm包
- rpm -q package 查询已安装的rpm包信息
- rpm -e package 删除rpm包
dpkg管理deb软件包,deb包包含:
- 数据文件(.deb文件本身)
- 控制信息(描述文件内容和依赖关系的文件)
- 配置文件
- 文档
使用dpkg命令操作deb包,如:
- dpkg -i package.deb 安装deb包
- dpkg -s package 查询deb包信息
- dpkg -r package 删除deb包
APT是基于dpkg构建的高级包管理系统,使用apt命令进行下载和安装操作:
- apt update 更新软件包索引
- apt install package 安装软件包
- apt remove package 删除软件包
总之,主流Linux发行版通过标准化的软件包和程序包管理器,实现了软件的统一打包、分发和管理,大大简化了软件管理工作流程。
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
以及rpm, yum, apt命令选项示例。
rpm命令选项使用示例:
-qa:列出所有已安装的软件包
rpm -qa
-qf:查找某个文件属于哪个软件包
rpm -qf /usr/bin/tree
-qi:显示软件包的详细信息
rpm -qi tree
-y:自动回答“是”以确认安装
rpm -y install package.rpm
yum命令选项使用示例:
install:安装软件包
yum install package
update:更新软件包
yum update
search:搜索软件包
yum search package
list installed:列出所有已安装的软件包
yum list installed
remove:删除软件包
yum remove package
apt命令选项使用示例:
install:安装软件包
apt install package
update:更新软件源
apt update
upgrade:升级所有软件包
apt upgrade
search:搜索软件包
apt search package
list --installed:列出所有已安装的软件包
apt list --installed
remove:删除软件包
apt remove package
4.简要总结yum/dnf工作原理。并搭建私有yum仓库(base, epel源)给另一个虚拟机使用。
简要总结yum/dnf工作原理
yum(Yellowdog Updater, Modified)和dnf(Dandified Yum)是用于在基于RPM的Linux发行版中进行软件包管理的工具。它们的工作原理可以简要总结如下:
-
软件源配置:yum和dnf通过配置软件源来确定从哪里获取软件包。软件源是包含软件包的服务器或存储库。
-
元数据下载:当执行yum或dnf命令时,它们首先会从软件源下载元数据。元数据是描述软件包及其依赖关系的信息,包括软件包名称、版本、依赖关系等。
-
依赖关系解析:yum和dnf会分析软件包的依赖关系,确定需要安装、更新或删除的软件包以及它们的依赖关系。
-
事务处理:在确定要进行的操作后,yum和dnf会执行相应的事务处理。这可能涉及安装、更新、删除软件包以及解决依赖关系。
-
下载和安装:如果需要,yum和dnf会从软件源下载相应的软件包,并将其安装到系统中。它们会自动处理软件包之间的依赖关系,确保所有依赖的软件包都得到满足。
-
本地缓存:yum和dnf会将下载的软件包保存在本地缓存中,以便后续使用。这样可以提高软件包的获取速度,并在离线环境下使用。
搭建私有yum仓库(base, epel源)给另一个虚拟机使用。
[root@centos8 /]# yum -y install httpd 下载Apache提供web服务
[root@centos8 /]# mkdir /var/www/html/centos/8 -p 创建私有仓库目录
三个选择:
1:把光盘挂载到私有仓库目录
[root@centos8 /]# mount /dev/sr0 /var/www/html/centos/8/
2:下载仓库中已经配好的源,里面所有的软件到私有仓库目录
[root@centos8 ~]#cat /etc/yum.repos.d/epel.repo
[epel]
name=EPEL
baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/
gpgcheck=0
[root@centos8 ~]#dnf repolist
Last metadata expiration check: 0:07:40 ago on Sun 22 Dec 2019 03:14:16 PM CST.
repo id repo name status
AppStream AppStream 4,681
BaseOS BaseOS 1,655
epel EPEL 3,707
#下载相关仓库包和元数据到私有仓库目录
[root@centos8 ~]#dnf reposync --repoid=epel --download-metadata -p /var/www/html/centos/8/
3 启动web服务
[root@centos8 /]# systemctl start httpd.service
4 配置yum仓库
[root@centos8 data]# cat /etc/yum.repos.d/test.repo
[epel]
name=My epel
baseurl=http://<主机IP地址>/centos/8/epel/
enabled=1
gpgcheck=0
5.总结系统安装之后的常用初始化步骤。rocky/ubuntu
- 配置网络:根据需要配置网络连接,包括设置网卡名,IP地址、网关、DNS服务器等。
- 配置主机名:设置主机的名称,以便其他计算机能够识别和访问。
- 配置时区:设置系统的时区,确保时间显示和日志记录正确。
- 配置SSH访问:如果需要通过SSH远程访问系统,可以配置SSH服务器,并设置适当的安全选 项,如 禁用root登录、使用密钥认证等。
- 配置防火墙:关闭selinux,关闭系统自带的防火墙,配置自定义的防火墙
- 创建用户:创建普通用户账户,以便以非管理员身份进行操作和管理。
- 安装常用软件:根据需求安装常用的软件包,如文本编辑器、Web服务器、数据库等。
- 备份配置:设置系统备份策略,定期备份重要的数据和配置文件,以防止数据丢失或系统故障。
6.解读一键安装httpd脚本,并自行实现一个一键安装脚本,要求
1)基于位置变量传递版本号
2)基于独立函数进行初始化步骤,禁用防火墙,安装开发依赖包。
3)基于独立函数进行下载包,解压包。
4)基于独立函数进行编译,安装包。
5)基于独立函数完成链接包。
6)启动服务,并输出自定义的语句,安装xxx服务
后面再补
7.总结开放系统互联OSI模型,每层作用及对应的协议。
-
网络通信中的开放系统互联(OSI)模型,包括七个层次:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。每个层次的功能和对应的协议进行了详细解释。
-
应用层
应用层提供应用程序访问OSI环境的服务。常用的应用层协议有HTTP、FTP、DNS、Telnet、SNMP、DHCP、TFTP、SMTP等。这些协议使得应用程序能够进行数据传输和通信。 -
表示层
表示层负责数据信息的语法表示变换。它的主要功能是数据转换,确保源端数据能够被目的端表示层理解和识别。常见的表示层协议有MPEG、JPEG、MIDI、GIF、ASCII等。 -
会话层
会话层通过执行各种机制在应用程序之间建立、维持和终止会话。会话层的机制包括计费、话路控制、会话参数协商等。常见的会话层协议有SQL、NFS、RPC、X Windows系统等。 -
传输层
传输层提供高效、经济、透明的端到端数据传输服务。它的主要功能是建立端到端的连接方式。TCP是一种可靠的、面向连接的传输方式,确保数据包的顺序和流量控制。UDP是一种无连接的传输方式,不保证数据的可靠传输。 -
网络层
网络层将数据分成一定长度的分组,通过通信子网将分组从信源传输到信宿。它的主要功能是将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方。网络层使用的主要协议是IP。 -
数据链路层
数据链路层将数据分成一个个数据帧进行传输。它的主要功能是建立网络实体间的逻辑连接,实现透明的比特流传输。数据链路层常用的协议有以太网、Wi-Fi、PPP等。 -
物理层
物理层在物理媒体上传输原始的数据比特流。它的主要功能是建立、维护和释放物理连接,为上层协议提供服务。物理层常用的技术有电缆、光纤、无线电波等。
8.调整动态端口范围为20000-60000
- 默认的端口范围:
[root@centos8 data]# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
- 编辑sysctl.conf文件:运行以下命令打开sysctl.conf文件:
[root@centos8 data]# vim /etc/sysctl.conf
- 在文件末尾添加以下行来设置动态端口范围:
net.ipv4.ip_local_port_range = 20000 60000
-
保存并关闭文件:按下Esc键,然后输入 ZZ,就保存退出了
-
应用更改:运行以下命令以应用新的sysctl.conf设置:
[root@centos8 data]# sysctl -p
net.ipv4.ip_local_port_range = 20000 60000
- 检查更改是否生效:运行以下命令来检查新的动态端口范围设置:
[root@centos8 data]# cat /proc/sys/net/ipv4/ip_local_port_range
20000 60000
显示为"20000 60000",则表示更改已成功应用。
9.总结TCP包头结构,TCP三次握手,4次挥手。
总结TCP包头结构
TCP包头结构包括源端口、目标端口、序列号、确认号、数据偏移、控制标志、窗口大小、校验和、紧急指针和选项等字段。
TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。TCP包头结构是TCP协议在数据传输过程中用来管理和控制连接的信息。下面是TCP包头结构的总结:
-
源端口和目标端口:源端口和目标端口分别指示发送方和接收方的应用程序或服务。它们是16位的无符号整数。
-
序列号:序列号用于对TCP传输的数据进行编号,确保数据的有序性。范围(2的32次方-1=4294967295)。
-
确认号:确认号用于确认接收方已成功接收到的数据字节的序列号。收到对反发来的序列号,就回复下一次需要的序列号,同时也说明你的是一个包我收到了。
-
数据偏移:数据偏移字段指示TCP包头的长度,以4字节为单位。它占4位,表示最大长度为60字节。
-
控制标志:控制标志包括URG、ACK、PSH、RST、SYN和FIN等。它们用于控制TCP连接的建立、维护和关闭。
-
窗口大小:窗口大小指示接收方的可用缓冲区大小,用于流量控制。
-
校验和:校验和用于检测TCP包头和数据在传输过程中是否发生错误。
-
紧急指针:紧急指针用于指示紧急数据的结束位置。
-
选项:选项字段用于在TCP包头中添加一些可选的功能和扩展。它的长度可变。
TCP包头结构的总长度为20字节(不包括选项字段),可以根据需要进行扩展。TCP协议通过包头中的这些字段来管理连接的建立、数据的传输和连接的关闭,确保数据的可靠性和有序性。
TCP三次握手
TCP三次握手是建立TCP连接的过程,由客户端和服务器之间进行。下面是TCP三次握手的过程:
-
第一次握手(SYN):
- 客户端发送一个带有SYN(同步)标志位的TCP包,将序列号设为随机值(Seq=X)。
- 客户端进入SYN_SENT状态,等待服务器的响应。
-
第二次握手(SYN+ACK):
- 服务器收到客户端的SYN包后,发送一个带有SYN和ACK(确认)标志位的TCP包,将确认号设为客户端的序列号+1(Ack=X+1),同时将自己的序列号设为随机值(Seq=Y)。
- 服务器进入SYN_RCVD状态。
-
第三次握手(ACK):
- 客户端收到服务器的SYN+ACK包后,发送一个带有ACK标志位的TCP包,将确认号设为服务器的序列号+1(Ack=Y+1)。
- 服务器收到客户端的ACK包后,双方都进入已建立连接的ESTABLISHED状态,可以开始进行数据传输。
通过三次握手,客户端和服务器确认彼此的序列号和确认号,建立起可靠的TCP连接。这个过程中,客户端和服务器都发送了SYN包,用于同步序列号;服务器发送了SYN+ACK包,用于确认客户端的序列号和同步自己的序列号;客户端发送了ACK包,用于确认服务器的序列号。这样双方就建立了可靠的连接,可以进行数据的传输和通信。
需要注意的是,TCP三次握手过程中可能会遇到网络延迟、丢包等问题,导致握手过程重复进行。为了解决这个问题,TCP引入了超时重传机制和序列号的随机化,以提高连接的可靠性和安全性。
4次挥手
TCP四次挥手是关闭TCP连接的过程,由客户端和服务器之间进行。下面是TCP四次挥手的过程:
-
第一次挥手(FIN):
- 客户端发送一个带有FIN(结束)标志位的TCP包,表示客户端不再发送数据。
- 客户端进入FIN_WAIT_1状态,等待服务器的确认。
-
第二次挥手(ACK):
- 服务器收到客户端的FIN包后,发送一个带有ACK标志位的TCP包,表示服务器收到了客户端的关闭请求。
- 服务器进入CLOSE_WAIT状态,等待自己的关闭请求。
-
第三次挥手(FIN):
- 服务器发送一个带有FIN标志位的TCP包,表示服务器也不再发送数据。
- 服务器进入LAST_ACK状态,等待客户端的确认。
-
第四次挥手(ACK):
- 客户端收到服务器的FIN包后,发送一个带有ACK标志位的TCP包,表示客户端收到了服务器的关闭请求。
- 客户端进入TIME_WAIT状态,在这个状态下会等待一段时间(通常是2倍的最大报文段寿命),确保服务器收到了ACK包。
- 服务器收到客户端的ACK包后,进入CLOSED状态,关闭连接。
- 客户端在等待时间结束后,也进入CLOSED状态,关闭连接。
通过四次挥手,客户端和服务器完成了双向的关闭连接操作。客户端和服务器都发送了FIN包,用于结束数据的发送;服务器发送了ACK包,用于确认客户端的关闭请求;服务器发送了FIN包,用于结束数据的接收;客户端发送了ACK包,用于确认服务器的关闭请求。这样双方就完成了连接的关闭,不再进行数据的传输和通信。
需要注意的是,TCP四次挥手过程中可能会遇到网络延迟、丢包等问题,导致挥手过程重复进行。为了解决这个问题,TCP引入了超时重传机制,以提高连接的可靠性和安全性。此外,客户端在TIME_WAIT状态下等待一段时间,是为了确保服务器收到了ACK包,防止服务器误判为连接异常而关闭连接。
10.总结主机到主机的包传递过程。
主机到主机的包传递过程可以总结为以下几个步骤:
-
应用层封装数据:发送主机的应用程序将要发送的数据封装成应用层的数据包,添加上相应的应用层协议头部,如HTTP、FTP等。
-
传输层封装数据:传输层协议(如TCP或UDP)将应用层的数据包封装成传输层的数据段。在TCP中,会添加TCP头部,包括源端口号和目的端口号等信息。
-
网络层封装数据:网络层协议(如IP)将传输层的数据段封装成网络层的数据包。在IP中,会添加IP头部,包括源IP地址和目的IP地址等信息。
-
数据链路层封装数据:数据链路层协议(如以太网)将网络层的数据包封装成帧。在以太网中,会添加以太网头部,包括源MAC地址和目的MAC地址等信息。
-
物理层传输数据:数据链路层将帧传输到物理层,通过物理媒介(如以太网电缆、无线信道等)将数据发送到目标主机。
-
目标主机接收数据:接收主机的物理层接收到数据后,依次向上交给数据链路层、网络层、传输层和应用层进行解封装。
-
数据传递给应用程序:接收主机的应用层接收到数据后,进行相应的处理,将数据交给目标应用程序进行处理或显示。
总结起来,主机到主机的包传递过程经过应用层、传输层、网络层、数据链路层和物理层的封装和传输,最终到达目标主机后再进行解封装,将数据传递给目标应用程序。这个过程中,每一层协议都添加了相应的头部信息,用于标识和控制数据的传输。
11. 总结IP地址 A, B, C, D 类,并解析IP地址的组成
IP地址可以分为A、B、C和D类,每个类别有不同的地址范围和网络规模。
-
A类IP地址:以0开头,范围从1.0.0.0到126.0.0.0。A类地址的前8位是网络位,后24位是主机位。A类地址适用于大型网络,可以有2^24-2个主机。
-
B类IP地址:以10开头,范围从128.0.0.0到191.0.0.0。B类地址的前16位是网络位,后16位是主机位。B类地址适用于中型网络,可以有2^16-2个主机。
-
C类IP地址:以110开头,范围从192.0.0.0到223.0.0.0。C类地址的前24位是网络位,后8位是主机位。C类地址适用于小型网络,可以有2^8-2个主机。
-
D类IP地址:以1110开头,范围从224.0.0.0到239.0.0.0。D类地址用于多播(Multicast)通信,不分网络和主机。
私网地址范围是指专门用于内部网络或局域网(LAN)中的IP地址范围,不被公共互联网路由器转发。
私网地址范围如下:
- A类私网地址范围:10.0.0.0到10.255.255.255
- B类私网地址范围:172.16.0.0到172.31.255.255
- C类私网地址范围:192.168.0.0到192.168.255.255
这些私网地址范围是为了在内部网络中使用,不需要向互联网注册和分配。私网地址可以重复使用,因为在互联网上,这些地址是不可路由的,只能在局域网内部使用。
私网地址的使用可以帮助组织和企业在内部网络中进行IP地址分配,而不需要依赖于公共IP地址的有限资源。这样可以更好地管理和控制局域网中的主机和设备。
IP地址的组成如下:
-
网络部分(Network Portion):IP地址的前面几位用来表示网络的标识,用于路由器进行数据包转发。根据IP地址的类别不同,网络部分的位数也不同。
-
主机部分(Host Portion):IP地址的后面几位用来表示主机的标识,用于在网络中唯一标识一个主机。根据IP地址的类别不同,主机部分的位数也不同。
-
子网掩码(Subnet Mask):用于将IP地址划分为网络部分和主机部分。子网掩码是一个与IP地址长度相同的二进制数,其中网络部分为1,主机部分为0。通过与IP地址进行逻辑与运算,可以得到网络部分和主机部分的值。
IP地址的分类和组成是为了实现网络的划分和路由的目的,以便进行有效的数据传输和管理。不同类别的IP地址可以满足不同规模和需求的网络环境。
12. 201.222.200.111/18计算主机数?子网掩码?说明计算方法。
根据IP地址的子网掩码,可以确定网络地址和主机地址的范围。子网掩码是一个32位的二进制数,其中前面的连续位是网络地址,后面的连续位是主机地址。
给定IP地址:201.222.200.111/18
将子网掩码转换为二进制:
18个1,后面是14个0:11111111.11111111.11000000.00000000
根据子网掩码的二进制,可以确定网络地址和主机地址的范围:
网络地址:201.222.192.0
主机地址范围:201.222.192.1 - 201.222.255.254
计算主机数:
主机地址范围中,主机地址的数量是:2^14 - 2 = 16,382
所以,该子网的主机数是16,382个。
子网掩码:255.255.192.0
13. 当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?
A和B是否在同一个网段可以通过比较它们的网络地址和子网掩码来判断。
A的IP地址是10.0.1.1/16,子网掩码是255.255.0.0,转换为二进制为:
10.0.1.1:00001010.00000000.00000001.00000001
255.255.0.0:11111111.11111111.00000000.00000000
B的IP地址是10.0.2.2/24,子网掩码是255.255.255.0,转换为二进制为:
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.00000001
11111111.11111111.00000000.00000000
00001010.00000000.00000000.00000000:得到的结果是10.0.0.0,这是A的网络地址。
B的IP地址是10.0.2.2,转换为二进制为:
10.0.2.2:00001010.00000000.00000010.00000010
将A的子网掩码和B的IP地址相与:
00001010.00000000.00000010.00000010
11111111.11111111.00000000.00000000
00001010.00000000.00000000.00000000:得到的结果也是10.0.0.0,这是B的网络地址。
这时A会认为B的ip和自己在一个网段,这时A ping B 的话,能够ping到,但是B也使用上面的方法,B会认为A不可到达,然后就不会回应A的ping
14. 如何将10.0.0.0/8划分32个子网?求每个子网的掩码,主机数。
要将10.0.0.0/8划分为32个子网,我们需要借用5位主机ID位来创建子网。这样,我们将有27个主机ID位用于主机,而5个主机ID位将用于子网。
首先,我们将初始的掩码为8位的网络ID(10.0.0.0/8)转换为二进制形式:
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和广播地址)。
这样,我们就成功将10.0.0.0/8划分为32个子网,并确定了每个子网的掩码和可用主机数。
15. 通过网络配置命令,让主机可以上网。 ip, netmask, gateway, dns,主机名。相关命令总结,最终可以通过这些配置让你的主机上网。
16. 解析/etc/sysconfig/network-scripts/ifcfg-eth0配置格式。
[root@centos8 data]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
IPADDR=10.0.0.48
GATEWAY=10.0.0.2
DNS1=223.5.5.5
NAME=eth0
DEVICE=eth0
PREFIX=24
ONBOOT=yes
参数 | 描述 |
---|---|
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 | 在系统引导时是否激活此设备 |
USERCTL | 普通用户是否可控制此设备 |
PEERDNS | 如果BOOTPROTO的值为“dhcp”,YES将允许dhcp server分配的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf |
NM_CONTROLLED | NM是NetworkManager的简写,此网卡是否接受NM控制 |
17. 基于配置文件或命令完成bond0配置
当前两张网卡各有个的ip:
准备Bondin的轮询模式配置文件:
[root@centos8 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=0 miimon=100"
让我们的两张物理网卡,连接到bond0:
[root@centos8 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
最后重启生效
[root@centos8 ~]# reboot
可以看到 两张网卡的master 是bond0了
[root@centos8 ~]# ip a
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether 00:0c:29:71:25:81 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether 00:0c:29:71:25:81 brd ff:ff:ff:ff:ff:ff permaddr 00:0c:29:71:25:8b
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:71:25:81 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.48/24 brd 10.0.0.255 scope global noprefixroute bond0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe71:2581/64 scope link
valid_lft forever preferred_lft forever
18. 通过ifconfig命令结果找到ip地址.
19. 使用脚本判断 你主机所在网络内在线的主机IP有哪些? ping通则在线。
[root@centos8 data]# cat ping.sh
#!/bin/bash
network="10.0.0"
GREEN='\033[0;32m'
NC='\033[0m'
for host in {1..254}
do
ip="$network.$host"
(
ping -c 1 -W 1 $ip >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "${GREEN}Host $ip is online${NC}"
fi
) &
done
wait
echo "执行完毕"
exit