N74023,第三周

1. 尝试基于gcc命令说明 c语言编译过程。
gcc编译程序主要经过四个过程:
a. 预编译 将高级语言中的宏展开,去掉代码注释,为调试器添加行号
b. 编译 将预处理优化,生成汇编代码
c. 汇编 gcc 调用汇编器进行汇编,将汇编代码编译成目标文件,就是转换成了目标机器平台上的机器指令
d. 链接 链接过程会将程序所需要的目标文件进行链接成可执行文件。

2. 总结程序包管理器有哪些,以及包中包含什么内容的文件,尝试这些文件如何获取命令获取? yum/dnf/apt
RPM软件包管理器 包中包括二进制可执行文件,库文件,配置文件,帮助文档
yum软件包管理器 就是一台部署有关rpm包及对应的yum元数据,包括(rpm包的列表清单,包依赖,包说明)的主机
DNF软件包管理器 解决了yum管理器的一些瓶颈,用户体验,内存占用,依赖分享,运行速度等
apt软件包管理器 ubuntu的软件包安装器

3. 总结程序包获取途径,以及rpm, yum, apt命令选项示例。
获取地址:https://mirrors.aliyun.com
https://mirrors.tuna.tsinghua.edu.cn
https://mirrors.163.com
rpm -qi 查看安装软件的信息
rpm -ql 查看安装了哪些文件
rpm -qf 查看文件来自哪个包
rpm -q 查看是否安装了某软件
yum install 安装软件
yum repolist 查看源是否正常
yum list all 查看所有包
yum remove 卸载
yum info 查看包的信息
yum provides 看文件来自那个包
yum clean all 清除缓存
yum makecache 重新构建缓存

4. 简要总结yum/dnf工作原理。并搭建私有yum仓库(base, epel源)给另一个虚拟机使用。
用户用yum安装软件包时,自动下载仓库的元数据至本地缓存中,并从中查询对应的软件包是否存在以及软件包的依赖,将相关软件包都下载到本机进行安装,安装后默认删除安装包,元数据还留在缓存中。
vim /etc/yum.repo.d/base.repo
[BaseOS]
name=BaseOS
baseurl=https://mirror.nju.edu.cn/rocky/r e l e a s e v e r / B a s e O S / releasever/BaseOS/releasever/BaseOS/basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial

[AppStream]
name=AppStream
baseurl=https://mirror.nju.edu.cn/rocky/r e l e a s e v e r / A p p S t r e a m / releasever/AppStream/releasever/AppStream/basearch/os/
gpgcheck=0

[epel]
name=epel repo
baseurl=https://mirrors.aliyun.com/epel/r e l e a s e v e r / E v e r y t h i n g / releasever/Everything/releasever/Everything/basearch
https://mirror.tuna.tsinghua.edu.cn/epel/r e l e a s e v e r / E v e r y t h i n g / releasever/Everything/releasever/Everything/basearch
https://mirrors.cloud.tencent.com/epel/r e l e a s e v e r / E v e r y t h i n g / releasever/Everything/releasever/Everything/basearch
gpgcheck=0

[extras]
name=extras
baseurl=https://mirror.nju.edu.cn/rocky/r e l e a s e v e r / e x t r a s / releasever/extras/releasever/extras/basearch/os/
gpgcheck=0

5. 总结系统安装之后的常用初始化步骤。rocky/ubuntu
关闭selinux sed -i ‘/^SELINUX=/c SELINUX=disabled’ /etc/default/config
配置网卡名称eth0 sed -ri ‘/^ GRUB_CMDLINE_LINUX=/s#(.*)”KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲\1 net.ifnames=…releasever/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial

[AppStream]
name=AppStream
baseurl=https://mirror.nju.edu.cn/rocky/r e l e a s e v e r / A p p S t r e a m / releasever/AppStream/releasever/AppStream/basearch/os/
gpgcheck=0

[epel]
name=epel repo
baseurl=https://mirrors.aliyun.com/epel/r e l e a s e v e r / E v e r y t h i n g / releasever/Everything/releasever/Everything/basearch
https://mirror.tuna.tsinghua.edu.cn/epel/r e l e a s e v e r / E v e r y t h i n g / releasever/Everything/releasever/Everything/basearch
https://mirrors.cloud.tencent.com/epel/r e l e a s e v e r / E v e r y t h i n g / releasever/Everything/releasever/Everything/basearch
gpgcheck=0

[extras]
name=extras
baseurl=https://mirror.nju.edu.cn/rocky/r e l e a s e v e r / e x t r a s / releasever/extras/releasever/extras/basearch/os/
gpgcheck=0
关闭防火墙
systemctl disable –now firewalld

7. 总结开放系统互联OSI模型,每层作用及对应的协议。
物理层:是参考模型的最底层,也是OSI模式的第一层。物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
数据链路层:是OSI模型的第二层,负责建立和管理节点间的链路。因此这一层的主要功能是:在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。
网络层:是OSI模型的第三层,是通信子网的最高一层。其主要功能是:通过路由将数据从源地址转发到目的地址,实现IP跳转。
传输层:OSI下3层的任务是数据通信,上3层的任务是数据处理。而传输层是OSI模型的第4层。该层提供建立、维护和诉除传输连接的功能,起到承上启下的作用。主要功能:向网络层提供可靠的端到端的差错和流量控制,保证报文的正确传输;同时向高层屏蔽下层数据通信的细节,保证上层(应用层)提供数据正确无误。
会话层:是用户应用程序和网络之间的接口,主要功能:管理和协调不同主机上各种进程之间的通信(对话),即负责建立、管理和终止应用程序之间的会话建立、管理和维护会话。
表示层:是OSI模型的第六次,主要工程:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。
应用层:是OSI模型的最高层,它是计算机用户,以及各种应用程序和网络之间的接口,该层的主要功能是:直接向用户提供服务,完成用户希望在网络上完成的各种工作。

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

# 显示当前端口范围
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
# 临时修改端口范围
[root@localhost ~]# echo 20000 60000 > /proc/sys/net/ipv4/ip_local_port_range
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_local_port_range
20000 60000
# 永久修改
[root@localhost ~]# echo "net.ipv4.ip_local_port_range = 20000 60000" >> /etc/sysctl.conf

9. 总结TCP包头结构,TCP三次握手,4次挥手。
端口号取值范围0~6535 因为十六位二进制构成 2^16
第一行 四层协议必须干的活
第二行 序号:保证数据的顺序
第三行 确认序号:去要下一个序号同时代表我已经收到了
第四行 首部长度 数据面前的称之为头部
6位标记位 每一个标记位占一位,URG紧急标记位,ACK确认标记位
PSH若置为1这一数据段不在缓存区里等待,直接优先处理,RST断开连接标记位。
SYN请求标记位,置一建立连接的过程。FIN结束标记位,置一释放连接的过程。
第五行 校验和目的是保证数据完整性
二层使用的循环冗余算法 CRC算法
四层使用的是反码相加法 强度较强
四层伪头部校验 --- 12个字节的内容,32源IP,32目标IP,8位保留,8位协议,16位总长度
注意:不要将确认序号Ack与标志位中的ACK搞混了。确认方Ack=发起方Seq+1,两端配对

三次握手过程详细说明:
1、客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值);
2、服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接;
3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)。

四次挥手​​​​​​​过程详细说明:
1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成);
2、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成);
3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成);
4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)
至此TCP断开的4次挥手过程完毕。

10. 总结主机到主机的包传递过程。
主机A在本机的路由表中查询匹配主机B的IP的网络号;
如果能够查询到,说明主机B和主机A在同一网段(通常是在同一局域网内),则下一跳即为主机B。主机A在ARP缓存中查找主机B的MAC地址(如没有则先发送ARP广播),然后将数据包封装成帧发送至通信线路上。该帧的源MAC是主机A的MAC地址,目的MAC是主机B的MAC地址。
如果主机A和主机B是网线直连的,那么主机B直接收到主机A发来的帧。
如果主机A和B是通过交换机相连的,交换机的某个端口收到主机A发来的帧,然后根据帧中的目的MAC地址在MAC地址表中查询对应的转发端口。如果找到了,直接从该端口转发出去;如果没找到,则在除了接收到数据包以外的所有端口进行转发(广播)。
如果主机A和B是通过路由器相连的,路由器的某个端口收到主机A发来的帧,其后的处理流程见步骤4。
如果不能查询到,说明主机A和主机B不处于同一网络中,需要通过网关来进行跨网络的通信。主机A会通过默认网关(通常是路由器)来提交报文,即下一跳是路由器。主机A根据网关的IP在自己的ARP缓存中查找对应的MAC地址(如没有则先发送ARP广播),然后将数据包封装成帧发送至通信线路上。该帧的源MAC是主机A的MAC,目的MAC是路由器的MAC。
当网关路由器接收到数据帧时,首先提取包头中的目的MAC地址,在MAC表进行查询。如果找到对应项,则按对应的端口进行转发(这一步实现了与交换机一样的功能);如果没找到对应项,则提取数据包包头中的目的IP。
如果目的IP是自己(这是可能的,比如ping路由器),则交由上层处理。
如果目的IP不是自己,则需要进行转发,在路由表中查询目的IP的转发端口和下一跳IP。若找到了对应的路由表项,则按照路由表项转发;若没找到对应的路由表项,则按照缺省路由进行转发。转发时,源和目的IP地址不变,源MAC地址改为转发端口的MAC地址,目的MAC地址改为下一跳IP的MAC地址。

11. 总结IP地址 A, B, C, D 类,并解析IP地址的组成
A类IP地址
一个A类IP地址由1字节的网络地址和3字节主机地址组成,它主要为大型网络而设计的,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到127.0.0.0)。可用的A类网络有127个,每个网络能容纳16777214个主机。其中127.0.0.1是一个特殊的IP地址,表示主机本身,用于本地机器的测试。
注:
A:0-127,其中0代表任何地址,127为回环测试地址,因此,A类ip地址的实际范围是1-126.
默认子网掩码为255.0.0.0
B类IP地址
一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。
注:
B:128-191,其中128.0.0.0和191.255.0.0为保留ip,实际范围是128.1.0.0–191.254.0.0。
C类IP地址
一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。
注:C:192-223,其中192.0.0.0和223.255.255.0为保留ip,实际范围是192.0.1.0–223.255.254.0
D类地址
用于多点广播(Multicast)。D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。224.0.0.0到239.255.255.255用于多点广播 。

在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下:
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

另一种解释方法,道理都一样,供参考:
A类地址的第一组数字为1~126。其中0代表任何地址,127为回环测试地址,注意,数字0和 127不作为A类地址,数字127保留给内部回送函数,而数字0则表示该地址是本地宿主机,不能传送。B类地址的第一组数字为128~191。C类地址的第一组数字为192~223。
A类地址
A类地址的表示范围为:0.0.0.0~126.255.255.255,默认网络掩码为:255.0.0.0;A类地址分配给规模特别大的网络使用。A类网络用第一组数字表示网络本身的地址,后面三组数字作为连接于网络上的主机的地址。分配给具有大量主机(直接个人用户)而局域网络个数较少的大型网络。例如IBM公司的网络。
B类地址
B类地址的表示范围为:128.0.0.0~191.255.255.255,默认网络掩码为:255.255.0.0;B类地址分配给一般的中型网络。B类网络用第一、二组数字表示网络的地址,后面两组数字代表网络上的主机地址。
C类地址
C类地址的表示范围为:192.0.0.0~223.255.255.255,默认网络掩码为:255.255.255.0;C类地址分配给小型网络,如一般的局域网和校园网,它可连接的主机数量是最少的,采用把所属的用户分为若干的网段进行管理。C类网络用前三组数字表示网络的地址,最后一组数字作为网络上的主机地址。
D类地址
用途比较特殊,D类地址称为广播地址,供特殊协议向选定的节点发送信息时用。

12. 201.222.200.111/18计算主机数?子网掩码?说明计算方法。
计算方法
CIDR:无类域间路由,目前的网络已不再按A,B,C类划分网段,可以任意指定网段的范围
CIDR 无类域间路由表示法:IP/网络ID位数,如:172.16.0.100/16
netmask子网掩码:32位或128位(IPv6)的数字,和IP成对使用,用来确认IP地址中的网络ID和主机ID,对应网络ID的位为1,对应主机ID的位为0,范例:255.255.255.0 ,表现为连续的高位为1,连续的低位为0
主机数
CIDR表示法显示网络id是前18位,所以主机id为后14位,主机数=2^14-2=16382
子网掩码
主机IP为 201.222.200.111
根据CIDRD对应的子网掩码为:255.255.11000000.0 转换成二进制就是255.255.192.0
主机数=16382
子网掩码=255.255.192.0

13. 当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?
用自已的子网掩码分别和自已的IP及对方的IP相与,比较结果,相同则同一网络,不同则不同网段
例:A的子网掩码为255.255.0.0转为二进制为11111111.11111111.0.0 A的IP转为二进制为00001010.0.00000001.00000001
与己IP相与00001010.0.0.0 转换为二进制结果为10.0.0.0 A的网段为10.0.0.0
与BIP相与00001010.0.0.0转换为二进制结果为10.0.0.0
A可以同B通信,A的角度,A与B在同一个网段
如果B与A通信
B拿自己的子网掩码和自己的IP相与得出网段为10.0.2.0。拿自己的子网掩码与A的IP相与得出的网段为10.0.1.0。结果不在同一个网段
与判断,有假则假,全真才真

14. 如何将10.0.0.0/8划分32个子网?
划分子网:将一个大的网络(主机数多)划分成多个小的网络(主机数少),主机ID位数变少,网络ID
位数变多,网络ID位向主机ID位借n位,将划分2^n个子网
2^5=32 所以网络ID要向主机ID借5位才可以划分32个子网
公式
网络数=2^可变的网络ID位数
主机数=2^主机ID的位数-2
网络ID=IP与子网掩码netmask
CIDR表示法,可以表示网络的ID的位数,IP/网络ID的位数
netmask子网掩码: 可以表示网络ID的位数,32bit二进制,对应于网络ID的位为1,对应于主机ID的位为0
划分子网:网络ID向主机借位,如果借N位,则划分2^N个子网

求每个子网的掩码,主机数。

由第一题可知划分子网后的IP为10.0.0.0/13
所以子网掩码为11111111.11111000.0.0 转换为10进制为255.248.0.0
主机数=2^(32-13)-2=524286

18. 通过ifconfig命令结果找到ip地址.
ifconfig ens32 | awk 'NR==2{print $2}'

 

posted @ 2023-03-26 09:41  下雨天ltf  阅读(31)  评论(0)    收藏  举报