第3周作业

1. 磁盘存储术语总结: head, track, sector, sylinder.

  • head:磁头,一个盘面对应一个磁头
  • track:磁道,盘面上的每一圈就是一个磁道
  • sector:扇区,把每个磁道按512bytes大小再进行划分,就是扇区
  • sylinder:柱面,磁头移动的时候,是一起移动的,如果是6个盘面,则6个磁头对应的磁道是一致的,这就是柱面
  • 在这里插入图片描述

2. 总结MBR,GPT结构。

  • MBR结构
0磁道0扇区主分区扩展分区(逻辑分区)
512bytes,最多4个主分区3主+1扩展在扩展分区下
446bytes:启动相关/dev/sda1-4扩展:/dev/sda4/dev/sda5
64bytes:分区表每16字节存储一个分区信息
2bytes:55AA,标识位单分区不能超过2T
  • MBR由4个部分组成
    在这里插入图片描述

  • MBR中DPT结构
    在这里插入图片描述

    • GPT结构
GTP头分区表GTP分区备份区域
支持128个分区使用128位UUID表示磁盘和分区自动备份头尾两份

3. 总结学过的分区,文件系统管理,SWAP管理相关的命令及示例(加注释)

  • 分区相关命令
	fdisk
		#显示所有设备
		fdisk -l
		#显示指定设备
		fdisk -l /dev/sda
		#显示指定列
		fdisk -lo id,size,type /dev/sda
		#常用子命令:
		p 	#输出分区列表
		t	#更改分区类型
		n	#创建新分区
		d	#删除分区
		v	#校验分区
		u	#转换单位
		w	#保存并退出
		q	#不保存退出
		x	#高级功能(专家模式)
-------------------------------------------------------------------
gdisk
	#常用子命令
	b 	#备份分区表到指定文件
	c 	#修改分区名
	d 	#删除分区
	i 	#显示分区详细信息
	l 	#列出所有分区类型
	n 	#新建分区
	o 	#创建新的分区表
	p 	#查看分区
	q 	#退出
	r 	#恢复和转换选项,非专业人士勿用
	s	 #排序
	t 	#修改分区类型,默认 8300,表示普通分区
	v 	#检测硬盘是否有问题
	w 	#保存退出
	x 	#额外功能,专家模式
	? 	#显示帮助
-----------------------------------------------------------------------
  
 	- parted
		#显示所有分区信息
		parted -l
		#显示指定磁盘设备分区信息
		parted /dev/sdb print
		#在磁盘上创建GPT分区
		parted /dev/sdb mklable gpt
		#创建分区,从1MB到1001MB
		parted /dev/sdb mkpart primary 1 1001
		#删除分区,指定Number 2
		parted /dev/sdb rm 2
		
  • 文件系统管理
	1、创建文件系统
mkfs
	#创建ext4 文件系统
	mkfs.ext4 /dev/sdc1
	#创建xfs 文件系统
	mkfs.xfs /dev/sdc2
	#查看指定设备
	lsblk -f /dev/sdc
	#查看已挂载的设备
	df -l
	--------------------------------------------------------------
tune2fs
	#重新设定ext系列文件系统可调整参数的值
	#查看指定文件系统信息
	tune2fs -l /dev/sdc1
	#修改卷标为TEST
	tune2fs -L TEST /dev/sdb2
	---------------------------------------------------------------
xfs_info
	#显示已挂载的xfs文件系统信息
	xfs_info /dev/sda1
	--------------------------------------------------------------
fsck
	#文件系统检测和修复,不要在挂载状态下执行命令修复
	fsck.ext4 /dev/sdc1

mount
	#挂载文件系统
	#只读挂载光驱
	mount /dev/sr0 -o ro /mnt/cdrom	
	#挂载分区
	mount --source /dev/sdc2 /data
umount
	#卸载文件系统,可使用设备,也可使用挂载点
	umount /mnt/cdcom

swapon
	#启用交换分区
	swapon -a
swapoff
	#禁用交换分区
	swapoff -a
	#永久禁用swap
	sed -i.bak '/swap/s@^@#@' /etc/fstab
	

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

  • 工作原理:
    • RAID 0:以chunk为单位读写数据,‌可并行处理,‌速度最快,‌但没有冗余和容错能力。‌‌
    • RAID 1:通过镜像方式,‌将数据复制到两个硬盘上,‌提供冗余和容错功能‌。‌
    • RAID 5:使用分布式奇偶校验,‌将数据分割并存储在多个硬盘上,‌同时用一个额外硬盘存储奇偶校验信息,‌以提供中至高的冗余性。‌‌
    • RAID 10:结合了RAID 1和RAID 0的特点,‌将数据分成两部分,‌每部分都复制到两个硬盘上,‌并提供更高的性能‌。‌
    • RAID 01:也结合了RAID 0和RAID 1的特点,‌但每个条带都使用不同的硬盘来提供冗余和容错功能‌
RAID级别利用率冗余性性能最少硬盘
0100%读写性能↑1
150%1读性能↑,写性能↓2
5(N-1) / N1读写性能↑3
1050%1/组读写性能↑4
0150%1/组读写性能↑4

5. 总结LVM的基本原理,完成实验对LVM的创建和磁盘扩容。

  • LVM的基本原理:
    • 抽象封装‌:‌LVM通过将底层的物理硬盘抽象封装起来,‌以逻辑卷的方式呈现给上层应用,‌实现了对硬盘分区设备的动态调整。‌
    • ‌三个重要概念‌:‌LVM的架构体系中,‌有三个很重要的概念,‌分别是物理卷(‌PV)‌、‌卷组(‌VG)‌和逻辑卷(‌LV)‌。‌
    • ‌动态管理‌:‌LVM允许用户对磁盘进行动态管理,‌包括动态扩展和缩小逻辑卷的空间,‌而无需关心物理硬盘设备的底层架构和布局。‌
  • 实现对LVM的创建和磁盘扩容
#PV Physical Volumes; VG Volume Group;LV Logical Volume
#实现过程:pvcreate ——> vgcreate ——> lvcreate
#热插入添加一块20G硬盘,不重启识别
	for i in `ls /sys/class/scsi_host/`;do 
	echo '- - -' >/sys/class/scsi_host/$i/scan;
	done
lsblk	#查看新硬盘
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdb                         8:16   0   20G  0 disk

#分区
交互式:fdisk /dev/sdb,输入“ p回车,回车,回车,+5G回车,t回车,8E回车,w回车”
非交互式:echo -e 'n\np\n\n\n+2G\nt\n\n8E\nw' | fdisk /dev/sdb
lsblk	#查看
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdb                         8:16   0   20G  0 disk 
├─sdb1                      8:17   0    5G  0 part 
└─sdb2                      8:18   0    2G  0 part
--------------------------------------------------------------------
#安装pv管理工具
apt install lvm2
#显示pv信息
pvs			#显示pv简要信息
pvdisplay	#显示详细信息
#1、创建pv,pvs查看
pvcreate /dev/sdb1

#2、创建vg,vgs查看,不指定容量vg容量即sdb1和sdb2容量之和5+2=7G
vgcreate vg1 /dev/sdb1 /dev/sdb2

#3、创建逻辑卷
lvcreate -l 100 -n lv1 vg1		#创建lv1 大小为 100个PE
lvcreate -L 5G -n lv2 vg1		#创建lv2 大小为 5G
lvcreate -l 20%free -n lv3 vg1	#创建lv3 大小为剩下可用PE数量的20%
lvcreate -l 10%VG -n lv4 vg1	#创建lv4 大小为指定vg的10%

#4、在线扩展逻辑卷
lvextend -L +1.5G /dev/vg1/lv1

#5、创建文件系统
mkfs.ext4 /dev/vg1/lv1
mkfs.xfs /dev/vg1/lv2

#6、挂载文件系统
mount /dev/vg1/lv1 /test-lv1
mount /dev/vg1/lv2 /test-lv2
#7、扩容vg,testvg容量扩容sdb3的大小,7+3=10G
vgextend vg1 /dev/sdb3
#8、在线扩展逻辑卷,一步实现容量和文件系统的扩展
lvresize -r -l +100%FREE /dev/vg1/lv1
#9、查看逻辑卷、卷组、物理卷
[root@ubuntu150 ~]# lvs /dev/vg1/lv*
  LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-ao---- <4.99g                                                    
  lv2  vg1 -wi-ao----  5.00g   
[root@ubuntu150 ~]# vgs /dev/vg1
  VG  #PV #LV #SN Attr   VSize  VFree
  vg1   3   2   0 wz--n- <9.99g    0 
[root@ubuntu150 ~]# pvs /dev/sdb*
  Cannot use /dev/sdb: device is partitioned
  PV         VG  Fmt  Attr PSize  PFree
  /dev/sdb1  vg1 lvm2 a--  <5.00g    0 
  /dev/sdb2  vg1 lvm2 a--  <2.00g    0 
  /dev/sdb3  vg1 lvm2 a--  <3.00g    0 
  

6. 总结程序包管理器有哪些,以及包中包含什么内容的文件,尝试这些文件如何获取命令获取? yum/dnf/apt总结程序包获取途径,以及rpm, yum, apt命令选项示例。

  1. 主流的程序包管理器:
    redhat:rpm文件, rpm 包管理器,rpm:Redhat Package Manager,RPM Package Manager
    debian:deb文件, dpkg 包管理器
  2. 程序包管理器相关文件
    • 1 包文件组成 (每个包独有)
      • 包内的文件
      • 元数据,如:包的名称,版本,依赖性,描述等
      • 可能会有包安装或卸载时运行的脚本
    • 2 数据库(公共):/var/lib/rpm
      • 程序包名称及版本
      • 依赖关系
      • 功能说明
      • 包安装后生成的各文件路径及校验码信息
  3. 获取程序包的途径
    • 系统发版的光盘或官方网站
    • 第三方组织提供
    • 软件项目官方站点
    • 搜索引擎
    • 自己制作
  • #rpm 命令选项示例:

rpm -ivh vsftpd		#安装
rpm -Uvh vsftpd		#升级
rpm -qa | grep passwd	#查询包
rpm -q php			#查询包是否安装了
rpm -qi nginx 		#显示详细信息
rpm -qc nginx		#查询配置文件
rpm -ql nginx 		#列出包内所有文件
rpm -qd nginx		#查询文档文件
rpm -q --scripts postfix	#查询安装脚本
rpm -q vsftpd || rpm -ivh vsftpd-3.0....rpm 	#短路安装
rpm -evh vsftpd		#包卸载
rpm -q vsftpd && rpm -evh vsftpd	#短路卸载
  • yum/dnf 命令选项示例
yum repolist	#显示仓库列表
yum list		#显示所有包,包括已经安装的和repo源中的可用包
yum list --avalable php	#指定repo 源
yum install httpd 	#安装
yum remove httpd 	#卸载
yum erase httpd nginx #卸载多个包
yum update nginx 	#升级指定包
yum check-update	#列出所有可更新的包
yum info nginx		#查询包信息
yum info --install httpd	#查询已安装的包
yum search redis key-value	#在包名和关键字中查询,多个关键字是 且 关系
yum deplist nginx --installed	#查看指定包所依赖的库和程序
#dnf 兼容 yum 命令通用, dnf 解决了yum程序在安装的过程中,如果被终止,
#下次再执行将无法解决依赖的问题
  • apt命令选项示例
apt list				#列出所有包
apt list --installed	#列出所有已经安装的包
apt list --upgradeable	#列出所有
apt search nginx		#在包名和描述信息中搜索
apt search --names-only nginx	#仅在包名中搜索 
apt info nginx			#查询包的具体信息
apt show nginx -a		#显示所有版本
apt update				#统计源中可更新的信息,并不执行更新
apt upgrade				#更新所有已安装的包
apt install --only-upgrade nginx #更新某个具体的包
apt install nginx redis -y	#同时安装多个包,自动交互y
apt install nginx --no-upgrade	#安装时如果已经存在,则不升级
apt install nginx --only-upgrade #只升级不安装
apt remove nginx -y		#仅卸载 包
apt autoremove nginx 	#卸载所有依赖包
apt edit-sources		#编辑源,直接 vim /etc/apt/sources.list即可
apt-cache stats			#显示当前系统安装包的统计信息
apt-cache madison nginx #查看源中指定软件的所有版本
apt-cache depends nginx	#查看nginx 有哪些依赖

7. 简要总结yum/dnf工作原理。并 搭建私有yum仓库(base, epel源)给另一个虚拟机使用。

  • yum/dnf工作原理
    • yum/dnf 是基于C/S 模式
    • yum 服务器存放rpm包和相关包的元数据库
    • yum 客户端访问yum服务器进行安装或查询等
  • 搭建私有yum仓库
    • 第一步:在 yum server 机上搭建 web 服务,保证其它机器能能过web服务访问本机
    • 第二步:在 yum server 机上搭建 yum 仓服务
    • 第三步:在 client 机上将yum 的 repos 源指向 yum server 机
#第一步:
	yum install -y httpd						#安装web服务
	systemctl disabled --now firewalld.service	#关闭防火墙
	systemctl enable --now httpd.service		#启动webeb服务
#第二步:将阿里云的extras 源的相关数据下载到本地,给客户端使用
	yum reposync --repoid=al-extras --download-metadata -p /var/www/html/
#更改文件夹属主属组让客户端有权限访问下载
	chown -R apache.apache al-extras/	
#将本地光盘中的内容CP到web目录中,给客户端使用
	mkdir /mnt/cdrom
	mount /dev/sr0 /mnt/cdrom
	cp -r /mnt/cdrom/BaseOS/* /var/www/html/BaseOS
#第三步:客户端配置,将yum 的 repos 源指向 yum server机
	vim /etc/yum.repos.d/private-extras.repo
[private-extras]
name=private extras
#指向yum server 10.0.0.154
baseurl=http://10.0.0.154/extras/
gpgcheck=0
#BaseOS 和extras配置类似
#客户端运行
yum repolist

8. 总结系统安装之后的常用初始化步骤。rocky/ubuntu

  • rocky:
    • 设置管理员密码:passwd
    • 检查系统时间,调整时区: timedatectl
    • 修改网卡名称:
      sed -Ei '/^GRUB_CMDLINE_LINUX/s#"$# net.ifnames=0"#' /etc/default/grub
      grub2-mkconfig -o /etc/grub2.cfg;reboot;
    • 关闭防火墙: systemctl disable --now firewalld
    • 禁用SELinux:sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    • 安装常用工具:dnf install tree lrzsz
    • 安装编译环境:dnf install -y make gcc libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev
  • ubuntu:
    • 修改配置允许root远程连接
      vim /etc/ssh/sshd_config
      添加一行 PermitRootLogin yes
    • 其他参照rocky修改

9. 总结开放系统互联OSI模型,每层作用及对应的协议。

OSI模型结构作用对应的协议
应用层提供为应用软件而设的接口,以设置与另一应用软件之间的通信。HTTP、FTP、TELNET、SSH、SMTP、POP3
表示层转换数据格式,‌确保不同系统间的数据理解。‌ASN.1、‌XML
会话层管理会话状态,‌同步数据传输。‌NetBIOS、‌SPX
传输层提供端到端的通信服务,‌确保数据可靠传输。TCP UDP
网络层基于IP地址路由数据包,‌实现不同网络间的数据传输。‌IP ICMP ARP
数据链路层负责网络寻址、错误侦测和改错。MAC、‌PPP
物理层在局部局域网上传送数据帧(Data Frame),它负责管理电脑通信设备和网络媒体之间的互通。Ethernet、‌Wi-Fi

10. 调整动态端口范围为20000-60000

  • 查看当前系统默认的动态端口范围:
    sudo sysctl net.ipv4.ip_local_port_range

  • 永久生效:修改配置文件

    • vim /etc/sysctl.conf #添加以下一行
      net.ipv4.ip_local_port_range = 20000 60000
  • 临时生效:sudo sysctl -w net.ipv4.ip_local_port_range="20000 60000"

  • 执行sudo sysctl -p重新加载sysctl.conf,使修改生效

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

  • TCP包头结构

    • 源端口、目标端口:用16位表示,端口个数为2^16,65536。
    • 序列号:用32位表示,表示本报文段所发数据的第一个字节的编号。2^32个字节
    • 确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。
    • 数据偏移:表示TCP报文段的首部长度,共4位
    • URG:表示本报文段中发送的数据是否包含紧急数据。
    • ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。
    • PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间
    • RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
    • SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报
      文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
    • FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。
    • 窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据
    • 校验和:提供额外的可靠性
    • 紧急指针:标记紧急数据在数据字段中的位置。只有当URG为1时,才有效
    • 选项部分:其最大长度可根据TCP首部长度进行推算
  • TCP三次握手

  • 在这里插入图片描述

    • 第一次握手 ——客户端发送SYN包‌:‌
      • 客户端向服务器发送一个SYN(‌同步序列编号Synchronize Sequence Numbers)‌包,‌并将SYN标志位设置为1。‌
      • 客户端随机生成一个序列号(‌seq=x)‌,‌并将这个序列号放在SYN包中发送给服务器。‌
      • 客户端进入SYN_SENT状态,‌等待服务器的确认。‌
    • 第二次握手——服务器回复SYN+ACK包
      • 服务器收到客户端的SYN包后,知道客户端请求建立连接。
      • 服务器将SYN和ACK标志位都设置为1。ACK的确认号(ack)为客户端的序列号加1,即ack=x+1,表示对客户端的SYN包的确认。
      • 服务器随机生成一个自己的序列号(seq=y),并将这个序列号放在SYN+ACK包中发送给客户端。
      • 服务器进入SYN_RCVD(同步收到) ,等待客户端的确认。
    • 第三次握手——客户端回复ACK包
      • 客户端收到服务器的SYN+ACK包后,检查ack是否为x+1,ACK是否为1,以确认服务器的SYN包已被接收。
      • 客户端将ACK标志位设置为1,并将确认号设置为服务器的序列号加1,即ack=y+1,表示对服务器SYN包的确认。
      • 此时,客户端的序列号也自增1,变为x+1,但此序列号在ACK包中通常不携带实际数据,而是作为下一个数据包的序列号准备。
      • 客户端发送ACK包给服务器。
      • 客户端和服务器都进入ESTablished(已建立连接)状态,完成三次握手。随后,客户端和服务器之间可以开始传输数据。
  • TCP四次挥手

  • 在这里插入图片描述

    • 第一次挥手:主动关闭方(通常是客户端)发送一个FIN(Finish)报文给被动关闭方(通常是服务器),请求关闭连接,进入FIN_WAIT_1状态。
    • 第二次挥手:被动关闭方收到FIN报文后,发送一个ACK(Acknowledgement)报文作为应答,进入CLOSE_WAIT状态,表示准备关闭连接,但仍然可以接收来自对方的数据。
    • 第三次挥手:在完成自己的数据传输后,被动关闭方也会发送一个FIN报文给主动关闭方,请求关闭连接,进入LAST_ACK状态。
    • 第四次挥手:主动关闭方收到FIN报文后,发送一个ACK报文作为应答,进入TIME_WAIT状态,等待2MSL时间后(即两倍的报文最大生存时间),以确保被动关闭方收到了确认报文。经过这段时间后,主动关闭方关闭连接,被动关闭方收到 ACK后也关闭连接。

12. 总结主机到主机的包传递过程。

  1. 应用层数据处理
    应用层数据首先被准备好,‌这些数据可能来自用户的输入、‌文件内容或其他应用程序的输出。‌
  2. 传输层封装
    应用层数据传递到传输层(‌TCP或UDP)‌,‌TCP会为数据添加传输层头部,‌包括源端口号、‌目的端口号、‌序列号、‌确认号、‌数据偏移量、‌控制位(‌如SYN、‌ACK、‌FIN等)‌、‌窗口大小、‌校验和和紧急指针等。‌
    TCP通过序列号确保数据的顺序,‌通过确认号实现可靠传输,‌控制位用于管理连接的建立、‌维护和断开。‌
  3. 网络层封装
    传输层报文传递到网络层(‌IP层)‌,‌IP层为报文添加网络层头部,‌包括版本、‌头部长度、‌服务类型、‌总长度、‌标识、‌标志、‌片偏移、‌生存时间(‌TTL)‌、‌协议类型(‌TCP或UDP)‌、‌头部校验和以及源IP地址和目的IP地址。‌
    如果数据包大小超过了网络的最大传输单元(‌MTU)‌,‌IP层还会进行分片处理。‌
  4. 数据链路层封装
    网络层数据包传递到数据链路层,‌数据链路层根据网络类型(‌如以太网)‌添加帧头部和尾部。‌帧头部通常包括目的MAC地址、‌源MAC地址、‌类型字段等,‌帧尾部可能包括循环冗余校验(‌CRC)‌等信息。‌
    在发送之前,‌如果源主机不知道目的主机的MAC地址,‌它会发送ARP(‌地址解析协议)‌请求来获取目的MAC地址。‌
  5. 物理层传输
    数据链路层帧通过物理层在物理媒体(‌如网线、‌光纤等)‌上传输,‌转换为电信号或光信号。‌
    信号在物理媒体上传输到目的主机。‌
  6. 接收过程
    目的主机的物理层接收到信号后,‌将其转换为比特流传递给数据链路层。‌
    数据链路层剥去帧头部和尾部,‌将数据包传递给网络层。‌
    网络层剥去IP头部,‌根据协议类型将数据包传递给相应的传输层协议(‌TCP或UDP)‌。‌
    传输层剥去传输层头部,‌将应用层数据传递给应用进程。‌
    应用进程处理接收到的数据。‌
  7. 连接的建立和断开(‌TCP特有)‌
    在TCP连接中,‌还需要经过三次握手建立连接和四次挥手断开连接的过程。‌
    三次握手包括:‌客户端发送SYN包,‌服务器回应SYN-ACK包,‌客户端再发送ACK包确认。‌
    四次挥手包括:‌一方发送FIN包请求断开连接,‌另一方回应ACK包确认,‌并可能在发送完剩余数据后也发送FIN包请求断开,‌最后由发起方发送ACK包确认。‌

13. 总结IP地址 A, B, C, D 类,并解析IP地址的组成

  • IP地址分类
IP类别1-8位9-16位17-24位25-32位
A类网络ID 0-127主机ID主机ID主机ID
B类网络ID 128-191网络ID主机ID主机ID
C类网络ID 192-223网络ID网络ID主机ID
D类(多播组播)网络ID 224-239
  • 解析IP地址的组成
    • IP地址由两部分组成:网络地址(Network Address)和主机地址(Host Address),也称为网络号(NetID)和主机号(HostID)。
    • 网络地址(Network Address):
      • 用于标识设备所在的网络。
      • 在IP地址中,网络地址占据了地址的一部分,其长度根据IP地址的类别(A、B、C等)而有所不同。
      • 例如,在A类IP地址中,第一个字节代表网络地址;在B类IP地址中,前两个字节代表网络地址;在C类IP地址中,前三个字节代表网络地址。
    • 主机地址(Host Address):
      • 用于标识网络中的具体设备。
      • 在IP地址中,主机地址占据了地址的另一部分,其长度同样根据IP地址的类别而有所不同。
      • 例如,在A类IP地址中,后三个字节代表主机地址;在B类IP地址中,后两个字节代表主机地址;在C类IP地址中,最后一个字节代表主机地址。

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

计算方法:将IP地址和子网掩码转换为2进制,再做与运算得到网络ID
网络ID: 201.222.200.111/18 = 201.222.200.111/ 255.255.192.0
# 201=128+64+8+1, 222=128+64+16+8+4+2,200=128+64+8,111=64+32+8+6+1
# 子网18位,18=8+8+2,1-18位全1,19-32位是主机位。
# 11001000.11011100.11001000.01101000  IP
# 11111111.11111111.11000000.00000000  network
# 11001000.11011100.11000000.00000000  网络ID 201.222.192.0

#网络ID是18位,32-18可知 主机位ID数是14
主机数量 : 2^14-2 = 2^14-2 = 16384-2 = 16382
子网掩码 : 255.255.192.0

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

A判断是否在同一个网段,用A自己的子网掩码分别和自己的IP及对方的IP相与,
比较结果 ,相同则同一网络,不同则不同网段

  • A的子网掩码:255.255.0.0

  • B 的 IP10.0.2.2,

  • IP地址 和子网掩码转换二进制:再做与操作。

    - A: 00001010.00000000.00000001.00000001   #A IP 10.0.1.1
    -     11111111.11111111.00000000.00000000 	#A 子网掩码
    - 计算 00001010.00000000.00000000.00000000	#A 网络ID 10.0.0.0
    - B:  00001010.00000000.00000010.00000010   #B IP
    - 	  11111111.11111111.00000000.00000000	#A 子网掩码
    - 计算 00001010.00000000.00000000.00000000   #B 网络ID 10.0.0.0
    
  • 结论1:A的网络ID是10.0.0.0,B的网络ID是10.0.2.0。但是A 用自己的子网掩码判断B和自己在同一个网段。

  • 结论2:因为实际A和B并不在同一网段,如果不借助其他网络设备路由,AB之间无法通信

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

#划分32个子网,大网络(主机数多)——>小网络(主机数少),主机ID位数变少,
#网络ID位数变多,网络ID位向主机ID位借 n 位,将划分 2^n个子网

IP地址:
转换二进制 : 00001010.00000000.00000000.00000000 #10.0.0.0
			11111111.00000000.00000000.00000000 #255.0.0.0
#要划分32个子网即( 2^n=32),n=5,网络位向主机位借5位。
	8+5=13 位网络ID,
 	32-13=19 位主机ID

每个子网主机数为:2^19-2=524286

借位后的子网掩码:	
			11111111.11111000.00000000.00000000 #255.248.0.0
			
每个子网的网络地址如下:
#借的5位全为0	00001010.00000  000.00000000.00000000 #10.0.0.0/13  
			00001010.00001  000.00000000.00000000 #10.8.0.0/13
			00001010.00010  000.00000000.00000000 #10.16.0.0/13
			00001010.00011  000.00000000.00000000 #10.24.0.0/13
			00001010.00100  000.00000000.00000000 #10.32.0.0/13
			00001010.00101  000.00000000.00000000 #10.40.0.0/13
			00001010.00110  000.00000000.00000000 #10.48.0.0/13
			00001010.00111  000.00000000.00000000 #10.56.0.0/13
			00001010.01000  000.00000000.00000000 #10.64.0.0/13
			00001010.01001  000.00000000.00000000 #10.72.0.0/13
			00001010.01010  000.00000000.00000000 #10.80.0.0/13
			00001010.01011  000.00000000.00000000 #10.88.0.0/13
							......
			......省略10.96.0.0~10.240.0.0之间的网络...... 
							......
#借的5位全为1	00001010.11111  000.00000000.00000000 #10.248.0.0/13

				   
  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!改善深层神经网络的方法有很多,以下是一些常见的方法: 1. 使用更好的激活函数:传统的激活函数如Sigmoid、tanh等可能存在梯度消失或爆炸的问题。可以尝试使用ReLU、Leaky ReLU、ELU等激活函数,以减轻这些问题。 2. 使用批标准化(Batch Normalization):批标准化对网络的输入进行标准化,有助于加快网络的训练速度,并且可以缓解梯度问题,使得更深层的网络也能够训练得更好。 3. 使用残差连接(Residual Connections):残差连接可以帮助信息在网络中更好地流动,从而减轻梯度消失的问题。通过将某些层的输出与输入相加,可以使得网络更易于训练。 4. 使用更好的优化算法:传统的梯度下降算法如随机梯度下降(SGD)可能存在训练速度慢、易陷入局部最优等问题。可以尝试使用更高级的优化算法如Adam、RMSprop等,以加快模型的收敛速度。 5. 添加正则化:过拟合是深层神经网络常见的问题之一。可以通过添加正则化项如L1正则化、L2正则化等来限制模型的复杂度,防止过拟合的发生。 6. 数据增强:通过对训练数据进行一些随机的变换,如平移、旋转、缩放等,可以增加模型的泛化能力,防止过拟合。 这些方法只是改善深层神经网络的一部分,具体的选择和调整需要根据具体问题和数据集来进行。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值