一、磁盘管理
1.1 常用磁盘存储术语
磁头(head):一个盘面对应一个磁头。
磁道(track):盘面上每一圈就是一个磁道。
扇区(sector):把每个磁道按512个字节进行划分,就是扇区。每个磁道上的扇区数量不一致。
柱面(cylinder):磁头移动时,是一起移动的。如果是6个盘面,6个磁头对应的磁道是一致的,就形成了一个柱面。
1.2 MBR, GPT的结构
1.2.1 MBR分区
MBR: Master Boot Record,使用32为表示扇区数,分区不超过2T。
划分分区的单位:
- CentOS 5 之前按整柱面划分
- CentOS 6 版本后可以按Sector划分
分区信息存储在0磁道0扇区的512字节,该扇区包含如下信息:
- 446字节:boot loader 启动相关
- 64字节:分区表,其中每16字节标识一个分区
- 2字节:55AA,结束标识位
MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展分区(N个逻辑分区)
MBR分区id:主和扩展分区对应 1--4,/dev/sda3,逻辑分区从5开始,/dev/sda5。
1.2.2 GPT分区
GPT:分区表支持128个分区,使用64位,支持8Z(512byte/block)和64Z(4096byte/block)
使用128位UUID表示磁盘和分区,GPT分区表自动备份再头和尾两份,并有CRC校验位。
UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动。
1.3 常用的分区管理、文件系统管理、挂载、交换分区管理命令
1.3.1 分区
fdisk
fdisk是常用的MBR分区工具。可以使用-l参数查看分区详细信息:
[root@rocky profile.d]$ fdisk -l
Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x637dd2fc
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 419430399 417331200 199G 8e Linux LVM
Disk /dev/mapper/rl-root: 70 GiB, 75161927680 bytes, 146800640 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/rl-swap: 2 GiB, 2176843776 bytes, 4251648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/rl-home: 127 GiB, 136331657216 bytes, 266272768 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
在虚拟机设置里面添加一块新的10G的虚拟硬盘,重启机器后,可看到/dev目录下多了sdb文件,表示新的硬盘。接下来使用fdisk命令进行分区操作:
# 新磁盘分区
[root@rocky ~]$ fdisk /dev/sdb
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x7ba19c92.
# 查看当前分区信息
Command (m for help): p
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7ba19c92
# 创建新的分区
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
# 选择主分区还是扩展分区
Select (default p):
Using default response p.
# 选择分区编号
Partition number (1-4, default 1):
# 选择分区起始扇区和结束扇区
First sector (2048-20971519, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +2G
Created a new partition 1 of type 'Linux' and of size 2 GiB.
# 将新的分区设置写入分区表中,并退出
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
使用 lsblk 命令可看到分区信息已更新,如果未更新则使用 partprobe 命令将磁盘分区信息刷到内存中。
[root@rocky ~]$ partprobe
[root@rocky ~]$ 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 10G 0 disk
└─sdb1 8:17 0 2G 0 part
sr0 11:0 1 10.5G 0 rom
part
使用 parted 命令同样可以创建和查看分区信息:
# 创建分区
[root@rocky ~]$ parted /dev/sdb mkpart primary 2150 2250
Information: You may need to update /etc/fstab.
# 查看分区
[root@rocky ~]$ parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 2149MB 2147MB primary
2 2150MB 2250MB 101MB primary
# 删除分区2
[root@rocky ~]$ parted /dev/sdb rm 2
Information: You may need to update /etc/fstab.
# 查看分区
[root@rocky ~]$ parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 2149MB 2147MB primary
1.3.2 文件系统管理
mkfs
mkfs可用于创建文件系统,相当于格式化分区。新创建的分区只有格式化后才能使用。
# 创建文件系统
[root@rocky ~]$ mkfs.ext4 /dev/sdb1
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: cbd136de-6892-440d-9c8c-27beae157d7d
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
# 查看文件系统已被创建
[root@rocky ~]$ lsblk -f /dev/sdb
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb
└─sdb1 ext4 cbd136de-6892-440d-9c8c-27beae157d7d
# 以下命令也可以创建文件系统
[root@rocky ~]$ mkfs -t ext4 /dev/sdb1
tune2fs
tune2fs命令可用于查看文件系统:
[root@rocky ~]$ tune2fs -l /dev/sdb1
tune2fs 1.45.6 (20-Mar-2020)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: cbd136de-6892-440d-9c8c-27beae157d7d
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
xfs_info
xfs_info命令显示已挂载的文件系统信息
[root@rocky ~]$ xfs_info /dev/sda1
meta-data=/dev/sda1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
fsck
fsck命令用于检测文件系统故障, 通常搭配 e2fsck 命令修复文件系统故障。
[root@rocky ~]$ fsck -t ext4 /dev/sdb1
fsck from util-linux 2.32.1
e2fsck 1.45.6 (20-Mar-2020)
/dev/sdb1: clean, 11/131072 files, 26156/524288 blocks
1.3.3 挂载
mount
mount命令用于挂载,只有挂载到目录,才可以通过该目录访问这个文件系统。
[root@rocky ~]$ mkdir /mnt/sdb1
[root@rocky ~]$ mount /dev/sdb1 /mnt/sdb1
# 查看设备已经挂载
[root@rocky ~]$ lsblk -f /dev/sdb
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb
└─sdb1 ext4 cbd136de-6892-440d-9c8c-27beae157d7d /mnt/sdb1
umount
umount命令用于卸载文件系统:
[root@rocky ~]$ umount /mnt/sdb1
# 文件系统已经解挂载
[root@rocky ~]$ lsblk -f /dev/sdb
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb
└─sdb1 ext4 cbd136de-6892-440d-9c8c-27beae157d7d
1.3.4 创建交换分区
交换分区是磁盘上供内存使用的分区,当内存空间不够时,可使用交换分区的空间。这样,交换分区可以用于扩展内存空间。
接下来演示交换分区的创建和管理。首先使用 parted 命令创建一个分区 /dev/sdb2 ,上面已经演示过。
详细创建交换分区的步骤如下:
# 将创建的分区制作为交换分区
[root@rocky ~]$ mkswap /dev/sdb2
# 交换分区
[root@rocky ~]$ tune2fs -l /dev/sdb2
tune2fs 1.45.6 (20-Mar-2020)
tune2fs: Bad magic number in super-block while trying to open /dev/sdb2
/dev/sdb2 contains a swap file system
# 查看内存信息
[root@rocky ~]$ free -h
total used free shared buff/cache available
Mem: 1.7Gi 601Mi 654Mi 10Mi 529Mi 1.0Gi
Swap: 2.0Gi 0B 2.0Gi
# 开启交换分区后,内存空间增加。
[root@rocky ~]$ swapon /dev/sdb2
[root@rocky ~]$ free -h
total used free shared buff/cache available
Mem: 1.7Gi 602Mi 653Mi 10Mi 529Mi 1.0Gi
Swap: 3.0Gi 0B 3.0Gi
1.4 RAID
RAID是一种虚拟化磁盘技术,将多块磁盘组成一个阵列,目的是提升性能或数据冗余。常见的RAID有 RAID0、RAID1、RAID5、RAID01、RAID10。
RAID0
多块磁盘组成,读写磁盘在多块磁盘同时并行处理。
利用率:最小的磁盘容量 * 磁盘数 / 总容量
冗余性:没有冗余性
性能:读写性能提升
至少需要的磁盘数:2
RAID1
两块磁盘组成,只使用一块作为数据盘,另一块作为镜像盘用作备份。
利用率:1/2
冗余性:高
性能:读写没有变化
至少需要的磁盘数:2
RAID5
至少三块磁盘组成,一块磁盘作为校验盘,其他磁盘作为数据盘,当一块数据盘坏了时,可使用校验盘和其他数据盘来恢复坏了的磁盘。
利用率:(N-1)/N
冗余性:有提升,但不如RAID1
性能:读写没有变化
至少需要的磁盘数:3
RAID01
多块磁盘先组合成RAID0,在组合成RAID1
利用率:略低于 1/2
冗余性:高
性能:读写有显著提升
至少需要的磁盘数:4
RAID10
多块磁盘先组合成RAID0,在组合成RAID1
利用率:略低于 1/2
冗余性:高
性能:读写有显著提升
至少需要的磁盘数:4
1.5 LVM
LVM 是允许在卷进行方便操作的抽象层,可以重新更改文件系统的大小,也可以在多个物理设备间重新组织文件系统。
工作原理:通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备中的PE加到LV中以加大容量。
接下来演示实现逻辑卷LVM的过程。
首先添加2块硬盘/dev/sdc与/dev/sdd,大小分别为3G和5G。
# 创建物理卷sdc
[root@rocky ~]$ pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
# 查看pv信息
[root@rocky ~]$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a-- <199.00g 0
/dev/sdc lvm2 --- 3.00g 3.00g
[root@rocky ~]$
# 创建卷组,并添加物理卷sdc
[root@rocky ~]$ vgcreate test-vg1 /dev/sdc
Volume group "test-vg1" successfully created
# 显示vg信息
[root@rocky ~]$ vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 3 0 wz--n- <199.00g 0
test-vg1 1 0 0 wz--n- <3.00g <3.00g
# 在卷组test-vg1创建逻辑卷
[root@rocky ~]$ lvcreate -L 2G -n test-lv1 test-vg1
Logical volume "test-lv1" created.
# 显示lv信息
[root@rocky ~]$ 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-lv1 test-vg1 -wi-a----- 2.00g
现在已经完成了对逻辑卷test-lv1的创建,大小为2G。接下来需要对该逻辑卷扩容3G,然而/dev/sdc只剩下1G容量,显然不足以扩容。此时就需要将/dev/sdd磁盘加入卷组来实现逻辑卷扩容。
# 创建sdd物理卷
[root@rocky ~]$ pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created.
# 将物理卷sdd添加到test-vg1
[root@rocky ~]$ vgextend test-vg1 /dev/sdd
Volume group "test-vg1" successfully extended
# test-vg1容量增加
[root@rocky ~]$ vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 3 0 wz--n- <199.00g 0
test-vg1 2 1 0 wz--n- 7.99g 5.99g
# 扩展逻辑卷test-lv1空间3G
[root@rocky ~]$ lvextend -L +3G /dev/test-vg1/test-lv1
Size of logical volume test-vg1/test-lv1 changed from 2.00 GiB (512 extents) to 5.00 GiB (1280 extents).
Logical volume test-vg1/test-lv1 successfully resized.
# test-lv1已扩展到5G
[root@rocky ~]$ 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-lv1 test-vg1 -wi-a----- 5.00g
已完成了逻辑卷的扩展。注意后续逻辑卷需要创建文件系统并挂载后才能使用。
二、软件管理
2.1 软件包管理器
主流的软件包管理器:rpm和deb,主要包含的文件有以下几种:
- 二进制文件
- 库文件
- 配置文件
- 帮助文件
2.2 软件包管理命令
常见的软件包管理命令,CentOS主要是yum/dnf,ubuntu主要是apt。
yum/dnf安装软件:
# 安装httpd
[root@rocky tmp]$ yum -y install httpd
Last metadata expiration check: 0:57:14 ago on Sat 17 Aug 2024 10:02:03 AM CST.
Dependencies resolved.
======================================================================================================
Package Arch Version Repository Size
======================================================================================================
Installing:
httpd x86_64 2.4.37-65.module+el8.10.0+1842+4a9649e8.2 appstream 1.4 M
...
# 卸载httpd
[root@rocky tmp]$ dnf -y remove httpd
Dependencies resolved.
======================================================================================================
Package Arch Version Repository Size
======================================================================================================
Removing:
httpd x86_64 2.4.37-65.module+el8.10.0+1842+4a9649e8.2 @appstream 4.3 M
apt安装软件:
# 安装redis(-y表示确认)
[root@ubuntu1 ~]# apt -y install redis
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libatomic1 libjemalloc2 liblua5.1-0 liblzf1 lua-bitop lua-cjson redis-server redis-tools
Suggested packages:
ruby-redis
...
# 卸载redis
[root@ubuntu1 ~]# apt remove redis
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
libatomic1 libjemalloc2 liblua5.1-0 liblzf1 lua-bitop lua-cjson redis-server redis-tools
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
redis
0 upgraded, 0 newly installed, 1 to remove and 97 not upgraded.
After this operation, 67.6 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 110088 files and directories currently installed.)
Removing redis (5:6.0.16-1ubuntu1) ...
rpm命令可以直接对rpm包管理,常见命令如下:
# 安装rpm包,-i 安装,-v 显示详细过程,-h 显示百分比
rpm -ivh [rpm package]
# 卸载软件
rpm -evh httpd
# 查询特定包是否存在
rpm -q httpd
# 查询所有rpm包(包括未安装的)
rpm -qa
# 查询配置文件
rpm -qc httpd
# 查询软件相关文件
rpm -ql httpd
# 查询相关文档
rpm -qd httpd
2.3 自定义软件仓库
用户也可以自己配置私有的软件仓库,相关软件可以从仓库下载。接下来演示私有软件仓库的创建。
前置工作:准备两台rocky机器,网络均设置NAT模式,两台机器分别开启同一网段的一张网卡。经测试两台机器可相互ping通。
一台机器作为server,一台作为client。设置自定义软件仓库的主要步骤如下:
- 在server上安装web服务,保证其他机器能通过web服务访问本机;
- 在server上搭建yum仓服务;
- 设置client的yum的repos源指向server。
服务端配置
# 安装web服务
[root@rocky ~]$ yum -y install httpd
...
# 禁用防火墙
[root@rocky ~]$ systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
# 开启web服务
[root@rocky ~]$ systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
# 在目录 /var/www/html 下分别添加 BaseOS和extras 两个目录分别作为两个软件源。其中Packages存放rpm包,repodata存放repo源的元数据
[root@rocky html]$ tree /var/www/html
/var/www/html
├── BaseOS
│ ├── Packages
│ └── repodata
└── extras
├── Packages
└── repodata
客户端配置
[root@rocky ~]$ cat /etc/yum.repos.d/private-extras.repo
[private-extras]
name=private extras
baseurl=http://10.0.0.157/extras/
gpgcheck=0
[root@rocky ~]$ cat /etc/yum.repos.d/private-baseos.repo
[private-baseos]
name=private baseos
baseurl=http://10.0.0.157/BaseOS/
gpgcheck=0
这样,客户端便可以指定自定义的repo源来通过yum下载安装自定义软件仓库的软件。
2.4 系统安装后的初始化
在系统安装后,一般都需要进行软件包管理工具dnf/apt的更新,确保软件可以正确地下载安装:
dnf update # CentOS/rocky
apt update && apt upgrade # ubuntu
三、网络协议与通信
3.1 网络分层
OSI参考模型是网络分层的主要模型,分为七层:从下到上分别是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
物理层:物理层在局域网上传输数据帧,它负责管理电脑通信设备和网络媒体之间的的互通。包括针脚、电压、线缆规范、集线器、中继器、主机接口卡等。
数据链路层:数据链路层负责网络寻址、错误侦测和改错。
网络层:网络层决定数据的路径选择和转寄,将网络表头加至数据包,以形成报文。
传输层:传输层把传输表头加至数据以形成数据包。传输表头包含了所使用协议等发送信息。
会话层:会话层负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。
表示层:表示层把数据转换为能与接收者的系统格式兼容并适合传输的格式。
应用层:提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如:HTTP、HTTPS、FTP等。
3.2 端口号及调整动态端口范围
传输层为每一个应用层协议分配一个端口号,端口号范围为0~65535。
其中,动态或私有端口的默认端口范围保存在文件 /proc/sys/net/ipv4/ip_local_port_range:
[root@rocky ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
可以修改该范围为20000至60000:
[root@rocky ~]# echo -e "20000\t60000" > /proc/sys/net/ipv4/ip_local_port_range
[root@rocky ~]# cat /proc/sys/net/ipv4/ip_local_port_range
20000 60000
3.3 TCP协议
3.3.1 TCP协议包头
TCP协议有20字节的固定首部和可变长度的选项部分。其中20字节的固定首部内容如下:
源端口、目的端口(各2字节):计算机上的进程要和其他进程通信时要通过计算机的端口,而计算机的端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道哪两个进程需要通信。源端口、目标端口是用16位表示的,可推断计算机的端口个数为2的16次方个。
序列号(4字节):表示本报文段所发送的数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2的32次方个字节,就会出现序列号回绕,再次从0开始。
确认号(4字节):表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你下次发送的数据的第一个字节数据的编号为此确认号。
数据偏移(4bit):表示TCP报文段的首部长度,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出TCP报文段的数据起始处距离TCP报文段起始处有多远。该字段的单位是4字节,4位二进制最大值是15,所以TCP首部最大60字节。
URG、ACK、PSH、RST、SYN、FIN(各1bit):各自具有特殊含义的标志位,如ACK表示确认报文,URG表示报文包含紧急字段,FIN表示通知对方要关闭连接了。
窗口大小(2字节):表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能继续传送后面的数据。
校验和(2字节):提供额外的可能性
紧急指针(2字节):标记紧急数据在数据字段的位置
3.3.2 TCP三次握手
TCP三次握手流程如下图所示。SYC、ACK为标志位,seq是序列号,ack是确认号。
3.3.3 TCP四次挥手
3.4 主机到主机的包传递过程
如图所示,2台主机之间包传递,主要流程如下:
- host1向host2发送ARP request报文请求host2的MAC地址;
- host2从host1的ARP request报文获取host1的MAC地址,保存到本地ARP表,并回应ARP reply报文给host1;
- host1从ARP reply获取host2的MAC地址,保存到本地ARP表;
- host1使用host2的IP和MAC构造TCP SYC报文发起三次握手建立连接过程,TCP连接建立。
- host1构造数据报文发送给host2。
3.5 IP相关
IP地址为网络层通信地址,共4字节32位,采用点分十进制的方式表示一个IP地址,分为4段,如:192.168.106.134。
IP地址由两部分组成:网络ID和主机ID。其中网络ID标志一个网段,位于高位。主机ID标志网段内的一台主机,位于低位。
IP地址主要有以下几类:
类型 | IP范围 |
A类 | 0.0.0.0 ~ 127.255.255.255 |
B类 | 128.0.0.0 ~ 191.255.255.255 |
C类 | 192.0.0.0 ~ 223.255.255.255 |
D类 | 224.0.0.0 ~ 239.255.255.255 |
E类 | 保留 |
典型问题
问题一:计算201.222.200.111/18的主机数?子网掩码?
子网掩码是18位,前18位取1,后14位取0,得到的子网掩码IP是255.255.192.0。
主机ID是14位,共包含 2^14 = 16384 个IP,其中2个保留位,所以共包含 16384 个主机。
问题二:当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?
如何判断同一网段:将自己IP与对方IP分别与自己掩码作按位与操作,得到的IP均为10.0.0.0,因此是同一网段。
A不能和B通信,因为从B的视角来看,A与B不在同一网段。
问题三:如何将10.0.0.0/8划分32个子网?求每个子网的掩码,主机数。
取主机ID前5位(整个IP9~13位)作为子网ID,刚好可以划分32个子网,子网掩码为255.248.0.0,主机数为 2^19 - 2