第三周学习作业

第三周学习作业

1. 尝试基于gcc命令说明 c语言编译过程。

  • 分步骤编译
gcc -E hello.c -o hello.i		对hello.c文件进行预编译,生成hello.i文件
gcc -S hello.i -o hello.s		对预处理文件进行编译,生成了汇编文件
gcc -c hello.s -o hello.o		对汇编文件进行编译,生成了目标文件
gcc hello.o -o hello			对目标文件进行链接,生成可执行文件
  • 一步实现编译过程
gcc hello.c -o hello			直接编译链接成可执行目标文件

2. 总结程序包管理器有哪些,以及包中包含什么内容的文件,尝试这些文件如何获取命令获取? yum/dnf/apt

根据linux派系来进行区分大致分为debian和redhat两类

  • debian

deb文件,dpkg包管理器

  • redhat

rpm包,rpm包管理器

程序包中包含的内容包括;

  1. 包文件组成(每个包独有)
  • 包内的文件
  • 元数据,如;
    包的名称,版本,依赖性,描述等
  • 可能会有包安装或卸载时的运行的脚本
  1. 数据库(公用):/var/lib/rpm
  • 程序包名称及版本
  • 依赖关系
  • 功能说明
  • 包安装后生成的各文件路径及校验码信息

获取程序包的途径

由于软件包需要事先将源码进行编译后打包形成,获取包的途径如下;

  • 系统发行的光盘或官方网站
  • 第三方组织提供
  • 软件项目官方站点
  • 搜索引擎
  • 自己制作

尝试这些文件如何获取命令获取

  • yum

yum install [package]

  • dnf

dnf install [package]

  • apt

apt install [package]


3. 总结程序包获取途径,以及rpm, yum, apt命令选项示例。

由于软件包需要事先将源码进行编译后打包形成,获取包的途径如下:

  • 系统发版的光盘或官方网站
  • 第三方组织提供
  • 软件项目官方站点
  • 搜索引擎
  • 自己制作

rpm, yum, apt命令选项示例

  • rpm

格式:
`rpm {-i|--install} [install-options] PACKAGE_FILE...`

-----------------------------------------------------------------
选项:
-v: verbose
-vv:
-h: 以#显示程序包管理执行进度

-----------------------------------------------------------------
常用组合:

`rpm -ivh PACKAGE_FILE ..`

-----------------------------------------------------------------
rpm包升级:

`rpm {-U|--upgrade} [install-options] PACKAGE_FILE...`
`rpm {-F|--freshen} [install-options] PACKAGE_FILE...`

-----------------------------------------------------------------
包查询:

`rpm {-q|--query} [select-options] [query-options]`

"[select-options]"
-a:				所有包
-f:				查看指定的文件由哪个程序包安装生成
-p rpmfile:		针对尚未安装的程序包文件做查询操作

"[query-options]"
--changelog:		查询rpm包的changelog
-c:				查询程序的配置文件
-d:				查询程序的文档
-i:				information
-l:				查看指定的程序包安装后生成的所有文件
--scripts:			程序包自带的脚本
--last 				最后安装的包
--changelog 		安装包的变更历史

-----------------------------------------------------------------
包卸载:
`rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...`

  • yum

yum命令的用法:
`yum [options] [command] [package ...]`

-----------------------------------------------------------------
显示仓库列表:
`yum repolist [all|enabled|disabled]`

-----------------------------------------------------------------
显示程序包:
`yum list`
`yum list [all | glob_exp1] [glob_exp2] [...]`
`yum list {available|installed|updates} [glob_exp1] [...]`

-----------------------------------------------------------------
安装程序包:
`yum install package1 [package2] [...]`
`yum reinstall package1 [package2] [...] `		#重新安装
--downloadonly 									#只下载相关包默认至/var/cache/yum/x86_64/7/目录下,而不执行install/upgrade/erase
--downloaddir=<path>, --destdir=<path> 			#--downloaddir选项来指定下载的目录,如果不存在自动创建

-----------------------------------------------------------------
升级和降级:
`yum upgrade|update [package1] [package2] [...]`
`yum upgrade-minimal 	`						#最小化升级
`yum downgrade package1 [package2] [...] (降级)`

  • apt 命令用法
apt命令命令的功能
apt install安装软件包
apt install apt-get install 安装软件包
apt remove移除软件包
apt purge移除软件包及配置文件
apt update刷新存储库索引
apt upgrade升级所有可升级的软件包
apt autoremove自动删除不需要的包
apt full-upgrade在升级软件包时自动处理依赖关系
apt search搜索应用程序
apt show显示安装细节

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


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


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

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


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

  • 第1层 物理层

物理层(Physical Layer)在局部局域网上传送数据帧(Data Frame),它负责管理电脑通信设备和网
络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、主机接口卡等

  • 第2层 数据链接层

数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形
成信息框(Data Frame)。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表
尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务
(GPRS)等。分为两个子层:逻辑链路控制(logical link control,LLC)子层和介质访问控制(Media
access control,MAC)子层

  • 第3层 网络层

网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成报文。
网络表头包含了网络数据。例如:互联网协议(IP)等

  • 第4层 传输层

传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议
等发送信息。例如:传输控制协议(TCP)等。

  • 第5层 会话层

会话层(Session Layer)负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。

  • 第6层 表示层

主条目:表示层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式

  • 第7层 应用层

应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如:
HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等


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

在这里插入图片描述


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

总结TCP包头结构

  • 源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口
    某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通
    信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即65536
  • 序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字
    节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0
    开始
  • 确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:
    我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号
  • 数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要
    指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多
    远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是
    TCP首部最大60字节
  • URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只
    有当URG=1时才有效
  • ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规
    定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
  • PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如
    果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到
    的数据读走,就会一直停留在TCP接收缓冲区中
  • RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放
    连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志
    的TCP报文段称为复位报文段
  • SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报
    文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意
    建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
  • FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的
    数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
  • 窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方
    发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value *
    Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
  • 校验和:提供额外的可靠性
  • 紧急指针:标记紧急数据在数据字段中的位置
  • 选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:
    (2^4-1)*4-20=40字节

TCP三次握手,4次挥手

在这里插入图片描述

  • 三次握手
    TCP协议位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略。

  • 三次握手​​​​​​​原理:

第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端;
第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了;
第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。
其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。

在这里插入图片描述

四次挥手

  • 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

  • 四次挥手​​​​​​​原理:

第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;
第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;
第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;
第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。


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

主机A需要发送一个数据包到主机B,在整个传输流程中,源和目的IP地址是保持不变的(不考虑NAT),源和目的MAC地址是随着具体链路的变化而变化。

这里只考虑三种基本情形:A和B通过网线直连,A和B通过路由器连接,A和B通过交换机连接。真实网络中A和B的连接关系可能很复杂,但无非就是这三种基本情形的组合。

传输流程
1.主机A在本机的路由表中查询匹配主机B的IP的网络号;
2.如果能够查询到,说明主机B和主机A在同一网段(通常是在同一局域网内),则下一跳即为主机B。主机A在ARP缓存中查找主机B的MAC地址(如没有则先发送ARP广播),然后将数据包封装成帧发送至通信线路上。该帧的源MAC是主机A的MAC地址,目的MAC是主机B的MAC地址。
o如果主机A和主机B是网线直连的,那么主机B直接收到主机A发来的帧。
o如果主机A和B是通过交换机相连的,交换机的某个端口收到主机A发来的帧,然后根据帧中的目的MAC地址在MAC地址表中查询对应的转发端口。如果找到了,直接从该端口转发出去;如果没找到,则在除了接收到数据包以外的所有端口进行转发(广播)。
o如果主机A和B是通过路由器相连的,路由器的某个端口收到主机A发来的帧,其后的处理流程见步骤4。

3.如果不能查询到,说明主机A和主机B不处于同一网络中,需要通过网关来进行跨网络的通信。主机A会通过默认网关(通常是路由器)来提交报文,即下一跳是路由器。主机A根据网关的IP在自己的ARP缓存中查找对应的MAC地址(如没有则先发送ARP广播),然后将数据包封装成帧发送至通信线路上。该帧的源MAC是主机A的MAC,目的MAC是路由器的MAC。

4.当网关路由器接收到数据帧时,首先提取包头中的目的MAC地址,在MAC表进行查询。如果找到对应项,则按对应的端口进行转发(这一步实现了与交换机一样的功能);如果没找到对应项,则提取数据包包头中的目的IP。
o如果目的IP是自己(这是可能的,比如ping路由器),则交由上层处理。
o如果目的IP不是自己,则需要进行转发,在路由表中查询目的IP的转发端口和下一跳IP。若找到了对应的路由表项,则按照路由表项转发;若没找到对应的路由表项,则按照缺省路由进行转发。转发时,源和目的IP地址不变,源MAC地址改为转发端口的MAC地址,目的MAC地址改为下一跳IP的MAC地址。

Attention
如果主机A和主机B位于同一网络,并通过路由器相连,主机A发送数据包至主机B,目的MAC地址是主机B。路由器接收到主机A发送的包,取目的MAC地址在自身MAC表中查询,通常情况下是能查到的。但如果查不到,路由器不会进行广播(在每个端口都转发),因为它不知道这个MAC地址是本网段的还是外网的。路由器会进一步查询目的IP,确定转发端口,修改源和目的MAC地址,然后转发出去。所以说,路由器是包含交换机功能的,并且也首先进行交换机应做的工作(但不会进行广播),这使得内网之间的数据传输更快。


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

  • A类:
    0 0000000 - 0 1111111.X.Y.Z : 0-127.X.Y.Z
    网络ID位是最高8位,主机ID是24位低位
    网络数:126=2^7(可变是的网络ID位数)-2
    每个网络中的主机数:2^24-2=16777214
    默认子网掩码:255.0.0.0
    私网地址:10.0.0.0
    范例:114.114.114.114,8.8.8.8,1.1.1.1,123.56.174.200,119.29.29.29
  • B类:
    10 000000 - 10 111111.X.Y.Z:128-191.X.Y.Z
    网络ID位是最高16位,主机ID是16位低位
    网络数:2^14=16384
    每个网络中的主机数:2^16-2=65534
    默认子网掩码:255.255.0.0
    私网地址:172.16.0.0-172.31.0.0
    范例:180.76.76.76,172.16.0.1
  • C类:
    110 0 0000 - 110 1 1111.X.Y.Z: 192-223.X.Y.Z
    网络ID位是最高24位,主机ID是8位低位
    网络数:2^21=2097152
    每个网络中的主机数:2^8-2=254
    默认子网掩码:255.255.255.0
    私网地址:192.168.0.0-192.168.255.0
    范例: 223.6.6.6,223.5.5.5
  • D类:组(多)播,1110 0000 - 1110 1111.X.Y.Z: 224-239.X.Y.Z
  • E类:保留未使用,240-255

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

网络地址:201.222.200.111(1100 1001.1101 1110.1101 1000.0110 1111)
子网掩码:255.255.192.0(1111 1111.11111 1111.1100 0000.0000 0000)


有多少个子网:2^2=4
每个子网有多少台主机:2^14-2=16382


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

首先需要查看网段的信息,如果前三位有一个或多个不相同则无法通信。其次,如果在网段前三位相同的情况下,会继续查看子网掩码段,如果不相同则也不能进行通信。


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

网络地址段:10.0.0.0(0000 1010.0000 0000.0000 0000.0000 0000)
子网掩码:255.0.0.0(1111 1111.0000 0000.0000 0000.0000 0000)


有多少个子网:2^8=256
每个子网有多少台主机:2^24-2=16777214
有哪些合法子网:256-255=1。因此子网为10.0.0.0、10.2.0.0…10.255.0.0


且由于需要划分32个子网,则按照需求将子网掩码定为255.248.0.0.0(1111 1111.1111 1000.0000 0000 .0000 0000)
在根据子网掩码来定位
有多少个子网:2^5=32
每个子网有多少台主机:2^19-2=524286


15. 通过网络配置命令,让主机可以上网。 ip, netmask, gateway, dns,主机名。·相关命令总结,最终可以通过这些配置让你的主机上网。

ip命令
#禁用网卡
ip link set ens160 down
#网卡改名
ip link set ens160 name wangnet
#启用网卡
ip link set wangnet up
#网卡别名
ip addr add 192.168.125.128/24 dev ens160 label ens160:0
ip addr del 192.168.125.128/24 dev ens160 label ens160:0
#清除网络地址
ip addr flush dev ens160
ifconfig 命令
#查看所有网卡ip地址
ifconfig -a
#配置ip
ifconfig ens160 192.168.125.128/24 netmask 255.255.0.0
#清除eth0上面的IP地址
ifconfig ens160 0.0.0.0
#启用和禁用网卡
ifconfig ens160 down
ifconfig ens160 up


16. 解析/etc/sysconfig/network-scripts/ifcfg-eth0(我的虚机网卡是ens160)配置格式。

设置说明
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_CONTROLLEDNM是NetworkManager的简写,此网卡是否接受NM控制

17. 基于配置文件或命令完成bond0配置

  • 基于配置文件完成bond0配置
vim /etc/sysconfig/network-scripts/ifcfg-bond0
NAME=bond0
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=10.0.0.100
PREFIX=8
#miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一
条线路不通就转入另一条线路
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"
#更改物理网卡内部配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens160
NAME=ens160
DEVICE=ens160
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
/etc/sysconfig/network-scripts/ifcfg-ens224
NAME=ens224
DEVICE=ens224
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes

18. 通过ifconfig命令结果找到ip地址.

在这里插入图片描述


19. 使用脚本判断 你主机所在网络内在线的主机IP有哪些? ping通则在线。


20. 使用while read line和/etc/passwd,计算用户id总和。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值