第三周作业

目录

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

16. 解析/etc/sysconfig/network-scripts/ifcfg-eth0配置格式。

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

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

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

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


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

从 hello.c 到 hello(或 a.out)文件, 必须历经 hello.i、 hello.s、 hello.o,最后才得到 hello(或a.out)文件,分别对应着预处理、编译、汇编和链接 4 个步骤


这 4 步大致的工作内容如下:  

  1. 预处理: 去掉注释、头文件包含、宏替换、条件编译选择等。预处理参考
  2. 编译,将预处理得到的源代码文件,进行“翻译转换”,产生出机器语言的目标程序,得到机器语言的汇编文件;
  3. 汇编,将汇编代码翻译成了机器码,但是还不可以运行;
  4. 链接,处理可重定位文件,把各种符号引用和符号定义转换成为可执行文件中的合适信息,通常是虚拟地址。


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

包管理器:rpm、dpkg

rmp:

#列出所有安装过的包
[root@localhost ~]# rpm -qa
libgcc-11.3.1-2.1.el9.x86_64
fonts-filesystem-2.0.5-7.el9.1.noarch
linux-firmware-whence-20220708-127.el9.noarch
crypto-policies-20220815-1.git0fbe86f.el9.noarch
#查询文件包括的文件列表
[root@localhost ~]# rpm -ql wget
/etc/wgetrc
/usr/bin/wget
/usr/lib/.build-id
/usr/lib/.build-id/0f
/usr/lib/.build-id/0f/fc49554f27a679cf9d82dbec3044f4132cdcec
/usr/share/doc/wget
/usr/share/doc/wget/AUTHORS
/usr/share/doc/wget/COPYING
/usr/share/doc/wget/MAILING-LIST
#查看包的版本
[root@localhost ~]# rpm -qi wget
Name        : wget
Version     : 1.21.1
Release     : 7.el9
Architecture: x86_64
Install Date: Tue 13 Dec 2022 11:37:39 AM CST
Group       : Unspecified
Size        : 3216536
License     : GPLv3+
Signature   : RSA/SHA256, Thu 26 May 2022 07:48:36 PM CST, Key ID 702d426d350d275d
Source RPM  : wget-1.21.1-7.el9.src.rpm
Build Date  : Thu 26 May 2022 07:05:35 PM CST
Build Host  : pb-079a3624-118e-4b4a-ba9b-3a78f694677e-b-x86-64
Packager    : Rocky Linux Build System (Peridot) <releng@rockylinux.org>
Vendor      : Rocky Enterprise Software Foundation
URL         : http://www.gnu.org/software/wget/
Summary     : A utility for retrieving files using the HTTP or FTP protocols
Description :
GNU Wget is a file retrieval utility which can use either the HTTP or
FTP protocols. Wget features include the ability to work in the
background while you are logged out, recursive retrieval of
directories, file name wildcard matching, remote file timestamp
storage and comparison, use of Rest with FTP servers and Range with
HTTP servers to retrieve files over slow or unstable connections,
support for Proxy servers, and configurability.
#查询磁盘上的文件来自于那个包
[root@localhost ~]# rpm -qf /etc/passwd
setup-2.13.7-7.el9.noarch
#只看配置文件
[root@localhost ~]# rpm -qc bash
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
#累出最近安装前十个的包
[root@localhost ~]# rpm -qa --last|head
words-3.0-39.el9.noarch                       Tue 13 Dec 2022 11:37:59 AM CST
rootfiles-8.1-31.el9.noarch                   Tue 13 Dec 2022 11:37:59 AM CST
NetworkManager-config-server-1.40.0-1.el9.noarch Tue 13 Dec 2022 11:37:59 AM CST
mailcap-2.1.49-5.el9.noarch                   Tue 13 Dec 2022 11:37:59 AM CST
gnome-user-docs-40.0-3.el9.noarch             Tue 13 Dec 2022 11:37:59 AM CST
smc-meera-fonts-7.0.3-5.el9.noarch            Tue 13 Dec 2022 11:37:52 AM CST
sil-nuosu-fonts-2.200-4.el9.noarch            Tue 13 Dec 2022 11:37:52 AM CST
sil-abyssinica-fonts-1.200-23.el9.noarch      Tue 13 Dec 2022 11:37:52 AM CST
pt-sans-fonts-20141121-23.el9.noarch          Tue 13 Dec 2022 11:37:52 AM CST
paktype-naskh-basic-fonts-5.0-6.el9.noarch    Tue 13 Dec 2022 11:37:52 AM CST

dpkg:

dpkg 相当于rpm ,不支持包的依赖关系解决

查看来自哪个包: dpkg -S +包名

查看包里包含的文件 :dpkg -L +包名

查看包手否装上:kdpg -l


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

        程序包管理的功能就是将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作。

rpm:

-a:查询所有套件;

-b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;

-c:只列出组态配置文件,本参数需配合"-l"参数使用;

-d:只列出文本文件,本参数需配合"-l"参数使用;

-e<套件档>或--erase<套件档>:删除指定的套件;

-f<文件>+:查询拥有指定文件的套件;

-h或--hash:套件安装时列出标记;

-i:显示套件的相关信息;

-i<套件档>或--install<套件档>:安装指定的套件档;

-l:显示套件的文件列表;

-p<套件档>+:查询指定的RPM套件档;

-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;

-R:显示套件的关联性信息;

-s:显示文件状态,本参数需配合"-l"参数使用;

-U<套件档>或--upgrade<套件档>:升级指定的套件档;

-v:显示指令执行过程;

-vv:详细显示指令执行过程,便于排错。

yum:

yum list  #列出资源库中所有可以安装或更新的rpm包
yum info  #列出资源库中所有可以安装或更新的rpm包的信息
yum search perl  #搜索匹配特定字符的rpm包,在包名称、包描述等中搜索
yum install perl  #安装perl包
yum update  #更新所有的rpm包
yum clean packages  #清除暂存中rpm包文件

apt:

# apt-get -h

用法:apt-get [选项] 命令
    apt-get [选项] install|remove 软件包1 [软件包2 ...]
    apt-get [选项] source 软件包1 [软件包2 ...]

apt-get 可以从认证软件源下载软件包及相关信息,以便安装和升级软件包,
或者用于移除软件包。在这些过程中,软件包依赖会被妥善处理。

常用命令:
  update - 取回更新的软件包列表信息
  upgrade - 进行一次升级
  install - 安装新的软件包(注:软件包名称应当类似 libc6 而非 libc6.deb)
  reinstall - 重新安装软件包(注:软件包名称应当类似 libc6 而非 libc6.deb)
  remove - 卸载软件包
  purge - 卸载并清除软件包的配置
  autoremove - 卸载所有自动安装且不再使用的软件包
  dist-upgrade - 发行版升级,见 apt-get(8)
  dselect-upgrade - 根据 dselect 的选择来进行升级
  build-dep - 为源码包配置所需的编译依赖关系
  satisfy - 使系统满足依赖关系字符串
  clean - 删除所有已下载的包文件
  autoclean - 删除已下载的旧包文件
  check - 核对以确认系统的依赖关系的完整性
  source - 下载源码包文件
  download - 下载指定的二进制包到当前目录
  changelog - 下载指定软件包,并显示其变更日志(changelog)

选项:
 -h         帮助文件。
 -q         输出到日志 - 无进展指示  
 -qq         不输出信息,错误除外  
 -d         仅下载 - 不安装或解压归档文件  
 -s         不实际安装。模拟执行命令  
 -y         在需要确认的场景中回应 yes
 -f         尝试修正系统依赖损坏处  
 -m         如果归档无法定位,尝试继续  
 -u         同时显示更新软件包的列表  
 -b         获取源码包后编译  
 -V         显示详细的版本号  
 -c=?         阅读此配置文件  
 -o=?         设置自定的配置选项,如 -o dir::cache=/tmp


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

工作原理:yum/dnf是基于C/S架构

vim /etc/yum.repos.d/test.repo

[BaseOS]
name=BaseOS
baseurl=file:///misc/cd/BaseOS
        https://mirror.tuna.tsinghua.edu.cn/centos/8/BaseOS/x86_64/os/
        https://mirrors.huaweicloud.com/centos/8/BaseOS/x86_64/os/
        https://mirrors.cloud.tencent.com/centos/8/BaseOS/x86_64/os/
        https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/
gpgcheck=0

[AppStream]
name=AppStream
baseurl=file:///misc/cd/AppStream
        https://mirror.tuna.tsinghua.edu.cn/centos/8/AppStream/x86_64/os/
        https://mirrors.huaweicloud.com/centos/8/AppStream/x86_64/os/
        https://mirrors.cloud.tencent.com/centos/8/AppStream/x86_64/os/
        https://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/
gpgcheck=0


[epel]
name=EPEL
baseurl=https://mirror.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$basearch
        https://mirrors.cloud.tencent.com/epel/$releasever/Everything/$basearch
        https://mirrors.huaweicloud.com/epel/$releasever/Everything/$basearch
        https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch
gpgcheck=0
enabled=1

[extras]
name=extras
baseurl=https://mirror.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/os
        https://mirrors.cloud.tencent.com/centos/$releasever/extras/$basearch/os
        https://mirrors.huaweicloud.com/centos/$releasever/extras/$basearch/os 
        https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/os	
gpgcheck=0
enabled=1

[PowerTools]
name=CentOS- - PowerTools - mirrors.aliyun.com
baseurl=https://mirror.tuna.tsinghua.edu.cn/centos/$releasever/PowerTools/$basearch/os/
        https://mirrors.cloud.tencent.com/centos/$releasever/PowerTools/$basearch/os/
        https://mirrors.huaweicloud.com/centos/$releasever/PowerTools/$basearch/os/
        https://mirrors.aliyun.com/centos/$releasever/PowerTools/$basearch/os/
gpgcheck=0
enabled=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official

yum -y install httpd

systemctl enable --now httpd

dnf reposync --repoid=epel --download-metadata -p /var/www/html

yum的配置过程

  1. yum -y install autofs
  2. systemctl enbale --now autofs
  3. mkdir /etc/yum.repos.d/backup
  4. mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
  5. cp base.repo /etc/yum/repos.d


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

rocky:

#关闭selinux
[root@Rocky ~]# sed -i '/^SELINUX=enforcing/c SELINUX=disabled' /etc/selinux/config
#关闭防火墙
[root@Rocky ~]# systemctl disable --now firewalld
#支持光盘,/misc/cd对应的就是光盘内容
[root@Rocky ~]# yum -y install autofs
[root@Rocky ~]# systemctl enable --now antofs
#修改ip地址名
[root@Rocky ~]# sed -ri '/GRUB_CMDLINE_LINUX=/s#(.*)"$#\1 net.ifnames=0"#' /etc/default/grub
[root@Rocky ~]# vim /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet ent.ifname=0"
[root@Rocky ~]# grub2-mkconfig -o /boot/grub2/grub.cfg ;reboot
#vi行数配置
[root@Rocky ~]# vim .vimrc
set nu
#修改hostname
[root@Rocky ~]# hostnamectl set-hostname rocky.XXX.org
[root@Rocky ~]# reboot
#配置yum源
[root@Rocky ~]# vim /etc/yum.repos.d/test.repo
[BaseOS]
name=BaseOS
baseurl=file:///misc/cd/BaseOS
        https://mirror.tuna.tsinghua.edu.cn/centos/8/BaseOS/x86_64/os/
        https://mirrors.huaweicloud.com/centos/8/BaseOS/x86_64/os/
        https://mirrors.cloud.tencent.com/centos/8/BaseOS/x86_64/os/
        https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/
gpgcheck=0

[AppStream]
name=AppStream
baseurl=file:///misc/cd/AppStream
        https://mirror.tuna.tsinghua.edu.cn/centos/8/AppStream/x86_64/os/
        https://mirrors.huaweicloud.com/centos/8/AppStream/x86_64/os/
        https://mirrors.cloud.tencent.com/centos/8/AppStream/x86_64/os/
        https://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/
gpgcheck=0


[epel]
name=EPEL
baseurl=https://mirror.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$basearch
        https://mirrors.cloud.tencent.com/epel/$releasever/Everything/$basearch
        https://mirrors.huaweicloud.com/epel/$releasever/Everything/$basearch
        https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch
gpgcheck=0
enabled=1

[extras]
name=extras
baseurl=https://mirror.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/os
        https://mirrors.cloud.tencent.com/centos/$releasever/extras/$basearch/os
        https://mirrors.huaweicloud.com/centos/$releasever/extras/$basearch/os 
        https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/os	
gpgcheck=0
enabled=1

[PowerTools]
name=CentOS- - PowerTools - mirrors.aliyun.com
baseurl=https://mirror.tuna.tsinghua.edu.cn/centos/$releasever/PowerTools/$basearch/os/
        https://mirrors.cloud.tencent.com/centos/$releasever/PowerTools/$basearch/os/
        https://mirrors.huaweicloud.com/centos/$releasever/PowerTools/$basearch/os/
        https://mirrors.aliyun.com/centos/$releasever/PowerTools/$basearch/os/
gpgcheck=0
enabled=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
#网卡配置
[root@Rocky ~]# cd /etc/sysconfig/network-scripts
[root@Rocky ~]# vim ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=192.168.100.134
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.2
DNS2=180.76.76.76
[root@Rocky ~]# nmcli connection reload
[root@Rocky ~]# nmcli connection up eth0

Ubuntu:

#关闭selinux
root@Ubuntu:~# sed -i '/^SELINUX=enforcing/c SELINUX=disabled' /etc/selinux/config
#关闭防火墙
root@Ubuntu:~# systemctl disable --now firewalld
#Ubuntu开启root远程登录
1.sudo -i root
2.passwd root
3.sed -i '/PermitRootLogin/c PermitRootLogin yes' /etc/ssh/sshd_config
4.systemctl restart sshd
#安装ifconfig
root@Ubuntu:~# apt iinstall net-tools
#支持光盘,/misc/cd对应的就是光盘内容
root@Ubuntu:~# apt -y install autofs
root@Ubuntu:~# systemctl enable --now antofs
#修改主机名
root@Ubuntu:~# hostnamectl set-hostname ubuntu.XXX.org
root@Ubuntu:~# trboot
#修改网卡名称
root@Ubuntu:~# vi /etc/default/grub #在文件中修改成:GRUB_CMDLINE_LINUX="net.ifnames=0"
root@Ubuntu:~# grub-mkconfig -o /boot/grub/grub.cfg
#网卡配置
root@Ubuntu:/etc/netplan# vim eth1.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth1:
      addresses:
      - 192.168.100.11/24
      gateway4: 192.168.100.2
      nameservers:
        search: [baidu.com]
        addresses: [192.168.100.2, 180.76.76.76]
root@Ubuntu:/etc/netplan# netplan apply


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

CPUS=`grep -c  processor /proc/cpuinfo`
HTTPD_VERSION=2.4.52
INSTALL_DIR=/apps/httpd
COLOR="echo -e  \E[32;1m"
END="\E[0m"

. /etc/os-release


if [ $ID = 'rocky' -o $ID = "centos" ];then
    systemctl disable --now firewalld
    yum -y install gcc make apr-devel apr-util-devel openssl-devel pcre-devel redhat-rpm-config bzip2
elif  [ $ID = 'ubuntu' ];then
    atp update
    apt -y  install  libapr*  libpcre3* libssl-dev make
else
    $COLOR"不支持此系统"$END
    exit
fi


cd /usr/local/src
rpm -q wget || yum -y install wget
wget https://dlcdn.apache.org//httpd/httpd-${HTTPD_VERSION}.tar.bz2  || { $COLOR "下载失败,退出" $END;exit ; }


tar xf httpd-${HTTPD_VERSION}.tar.bz2

cd httpd-${HTTPD_VERSION}

./configure --prefix=${INSTALL_DIR} --enable-ssl  --disable-status

make -j $CPUS && make install

ln -s /apps/httpd/bin/apachectl  /usr/local/bin/

apachectl start && $COLOR"安装成功!"$END
$COLOR"请访问:http://`hostname -I`"$END


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

  1. 物理层 Physical:主要是在物理媒体上实现比特流的透明传输,物理层传输的单位是比特
    透明传播:不管所传数据是怎样的比特组合,都应能在链路上传送。主要协议:Rj45、802.3
  2. 数据连接层 Data Link:把网络层的传下来的数据报组装成帧。链路层的传输单位是帧。主要协议:SDLC、HDLC、PPP、STP
  3. 网络层 Network:路由选择【路由:路径的选择,选择最佳的路径】、流量控制、差错控制、拥塞控制。主要协议:IP、IPX、ICMP、IGMP、ARP、RARP、OSPF
  4. 传输层 Transport:实现终端和终端的通讯,可靠传输和不可靠传输、差错控制、流量控制、复用分用。主要协议:TCP、UDP
  5. 会话层 session:建立、管理、终止会话;使用校验点可使会话在通讯失效时从校验点/同步点继续恢复通讯。实现数据同步。主要协议:ADSP、ASP
  6. 表示层 Presentation:数据格式的变换(翻译)、数据加密解密、数据的压缩和恢复。主要协议:JPEG、ASCII
  7. 应用层 Application:应用层是用户与网络的界面,即所有能与用户交互并且产生网络流量的程序。件传输(FTP),电子邮件(SMTP),万维网(HTTP)


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

root@Ubuntu:~# cat /proc/sys/net/ipv4/ip_local_port_range
32768   60999
root@Ubuntu:~# echo 20000 60000 > /proc/sys/net/ipv4/ip_local_port_range
root@Ubuntu:~# cat /proc/sys/net/ipv4/ip_local_port_range
20000    60000


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

三次握手:

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)。

 4次挥手:

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. 总结主机到主机的包传递过程。

        两主机要通信时,要把应用数据封装成IP包,然后再交给下一层数据链路层继续封装成帧,之后根据MAC地址把数据从一台主机发送出去,传送到另一台主机。
如图,当n0和n1通信时,假如n0知道n1的IP地址(IP地址一般由由用户手动输入或者应用程序填充,或者通过DNS域名解析协议得知)却不知道它的MAC地址。通信步骤如下:

  • n0发送一个ARP广播请求(源IP是n0,目的IP是n1,源MAC是n0,目标MAC为FFFF:FFFF:FFFF)给同一广播域中的所有成员
  • 交换机sw0从自己的1接口收到该广播包,然后读取该帧的源MAC地址和目的MAC地址,由于sw0刚启动时,它的MAC表是空的,所以它会把n0的MAC地址和与之对应的接口1放到一张表里,这张表就是MAC地址表。然后交换机从其它接口广播该帧。
  • 其它主机收到该帧后,因为是广播帧,所以主机都可以拆掉二层的封装,查看目标IP地址是不是自己。目标IP不是自己的,丢弃此包。目标IP是自己的,首先把源主机的IP地址和MAC地址映射关系存入自己的ARP映射表中,然后构建ARP响应数据包,此时,二层的源MAC为被解析设备的MAC,目的为ARP解析发起者的MAC。这个响应不再以广播形式发送,而是直接发给主机A。
  • sw0收到应答包,又会检查源MAC、目标MAC,把n1的MAC和自身的接口2放进MAC地址表中。再查看自己的MAC地址表,发现存在目标MAC与自己的1接口对应,那它就会直接把这个应答包从接口1发送出去。
  • 主机n0收到应答包,发现目标MAC地址是自己,就会处理这个包。并把n1的MAC与IP放进自己的ARP缓存表中。这时,主机n0知道了n1的MAC地址了,就可以进行二层封装发送数据了。


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

A:1-126.X.X.X 高8位是网络ID 0开头表示未知地址 127开头表示回环地址

        0XXXXXXX 0-127

        126个A类网络

        10.0.0.0最多的主机数=2^24-2=16777214

        子网掩码:255.0.0.0

B: 128-191.X.X.X 高16位是网络ID

        10XXXXXX.XXXXXXXX.

        网络数=2^可变的网络ID位数=2^14=16384

        主机数=2^16-2=65534

        子网掩码:255.255.0.0

C:192-223.X.X.X 高24位是网络ID

        网络数=2^21=2097152

        主机数=2^8-2=254

        子网掩码:255.255.255.0

D:224-239.X.X.X

E:240-255.X.X.X


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

公式:

        网络数=2^可变的网络ID位数

        主机数=2^主机ID的位数-2

        网络ID=IP与子网掩码netmask

        划分子网:网络ID向主机借位,如果借N位,则划分2^N个子网

00000000 0
10000000 128
11000000 192
11100000 224
11110000 240
11111000 248
11111100 252
11111110 254
11111111 255

主机数=2^(32-18)-2=16382

子网掩码:

        11111111.11111111.11 000000.000000

        255.255.192.0


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

A:      子网掩码:11111111.11111111.00000000.00000000

            二进制:00001010.00000000.00000001.00000001

        与的结果:00001010.00000000.00000000.00000000

B:     子网掩码:11111111.11111111.11111111.00000000

            二进制:00001010.00000000.00000010.00000010

        与的结果:00001010.00000000.00000010.00000000

A和B在不同的网段,但是A包含了B,所有他们可以通信


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

划分子网:网络ID向主机借位,如果借N位,则划分2^N个子网

32=2^5

10.0.0.0/13

子网掩码:

        11111111.11111000.00000000.000000000

        255.248.0.0

主机数=2^主机ID的位数-2

主机数=2^(32-13)-2=524286


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

主机名
工具hostname
centos7以上版本设置主机名 hostnamectl set-hostname 主机名 主机名放在新文件里面/etc/hostname
centos6改配置文件vim /etc/sysconfig/network hostname+主机名 配合生效

IP/netmask
工具ifconfig
#ifconfig eth0 10.0.0.68 netmask 255.255.0.0 添加ip及子网掩码
#ifconfig eth0 0.0.0.0 清除eth0上面的IP地址
启用和禁用网卡
ifconfig eth0 down
ifconfig eth0 up
对一个网卡设置多个IP地址
ifconfig eth0:1 172.16.0.8/24
ifconfig eth0:1 down

工具IP
ip [ OPTIONS ] OBJECT { COMMAND | help }
命令说明
OBJECT := { link | addr | route }
ip link - network device configuration
set dev IFACE,可设置属性:up and down:激活或禁用指定接口,相当于 ifup/ifdown
show [dev IFACE] [up]::指定接口 ,up 仅显示处于激活状态的接口
man帮助:ip(8), ip-address(8), ip-link(8), ip-route(8)
#禁用网卡
ip link set eth1 down
#网卡改名
ip link set eth1 name wangnet
#启用网卡
ip link set wangnet up
#网卡别名
ip addr add 172.16.100.100/16 dev eth0 label eth0:0
ip addr del 172.16.100.100/16 dev eth0 label eth0:0
#清除网络地址
ip addr flush dev eth0

网络配置方式
静态指定:
ifconfig, route, netstat
ip: object {link, addr, route}, ss, tc
system-config-network-tui,setup
配置文件
动态分配:
DHCP: Dynamic Host Configuration Protoco

centos6修改网卡名配置文件vim /etc/udev/rules.d/70-persistent-net.rules
不重启的情况下使用新网卡名需要先禁用网卡,然后改名,在启用网卡例 ip link set eth0 down,ip link set eth0 name abc,ip link set abc up,ip a a 192.168.3.145 ,设置地址就可以上网了

centos7,8改网卡名修改配置文件vim /etc/default/grub GRUB_CMDLINE_LINUX=后面添加net.ifnames=0

保存后在执行grub2-mkconfig -o /boot/grub2/grub.cfg命令,reboot生效


ubuntu修改网卡名vim /etc/default/grub GRUB_CMDLINE_LINUX=后面添加net.ifnames=0
保存后在执行grub-mkconfig -o /boot/grub/grub.cfg命令 ,REBOOT生效

ubuntu配置自动获取IP
网卡配置文件采用YAML格式,必须以 /etc/netplan/XXX.yaml 文件命名方式存放
可以每个网卡对应一个单独的配置文件,也可以将所有网卡都放在一个配置文件里
范例:
cat /etc/netplan/01-netcfg.yaml
#This file describes the network interfaces available on your system
#For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
修改网卡配置文件后需执行命令生效:netplan apply

ubuntu配置静态IP
范例:
vim /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses: [192.168.8.10/24,10.0.0.10/8] #或者用下面两行,两种格式不能混用
- 192.168.8.10/24
- 10.0.0.10/8
gateway4: 10.0.0.2
nameservers:
search: [magedu.com, magedu.org]
addresses: [180.76.76.76, 8.8.8.8, 1.1.1.1]
查看ip和gateway
ip addr
route -n
查看DNS
resolvectl status #Ubuntu 20.04新命令

IP地址修改(centos) 先进入cd /etc/sysconfig/network-scripts/目录下创建配置文件
DEVICE=eth0
NAME=eth0
BOOTPROTO=dhcp
保存后nmcli connection reload 加载配置文件
在执行nmcli connection up eth0 (此方法为自动获取地址)
以下配置为自动获取地址
DEVICE=eth0
NAME=eth0
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=192.168.3.134
PREFIX=24
GATEWAY=192.168.3.1
DNS1=180.76.76.76
DNS2=114.114.114.114
DNS3=192.168.3.1
保存后nmcli connection reload 加载配置文件
在执行nmcli connection up eth0 (此为手动配置)

特centos7执行一条命令就可以systemctl restart network
ip a 验证地址,
路由:默认网关
路由表主要构成:
Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,
优先级最低
Genmask:目标网络对应的netmask
Iface: 到达对应网络,应该从当前主机哪个网卡发送出来
Gateway: 到达非直连的网络,将数据发送到临近(下一个)路由器的临近本主机的接口的IP地址,如果
是直连网络,gateway是0.0.0.0
Metric: 开销cost,值越小,路由记录的优先级最高

工具route
route -n 查看路由表


添加路由:route add
route add [-net|-host|default] target [netmask Nm] [gw GW] [[dev] If]
删除路由:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]

DNS服务器
cat /etc/resolv.conf 查看dns
主DNS服务器
次DNS服务器
第三个DNS服务器


16. 解析/etc/sysconfig/network-scripts/ifcfg-eth0配置格式。

DEVICE=eth0#网卡设备名称

ONBOOT=yes#启动时是否激活 yes | no

BOOTPROTO=static#协议类型 dhcp bootp none

IPADDR=192.168.1.90#网络IP地址

NETMASK=255.255.255.0#网络子网地址

GATEWAY=192.168.1.1#网关地址

BROADCAST=192.168.1.255#广播地址

HWADDR=00:0C:29:FE:1A:09#网卡MAC地址

TYPE=Ethernet#网卡类型为以太网


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

vim /etc/sysconfig/network-scripte/ficfg-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-scripte/ficfg-eth0
[root@localhost network-scripts]# cat ifcfg-eth0
NAME=eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes

vim /etc/sysconfig/network-scripte/ficfg-eth1
[root@localhost network-scripts]# cat ifcfg-eth1
NAME=eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes

#查看当前使用的是那个网卡
[root@localhost ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v5.14.0-162.6.1.el9_1.x86_64

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0

Slave Interface: eth1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:b4:0a:5b
Slave queue ID: 0


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


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

#!/bin/bash
 
NET=10.0.0
cat /dev/null >  hosts.txt
for i in {1..254};do
    if ping -c1 -W1 $NET.$i &> /dev/null ;then
        echo $NET.$i is up | tee -a hosts.txt
    fi
done


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

cat /etc/passwd > firstsum.txt (创建文件)
 
编辑脚本firstsum.sh
#!/bin/bash
 
sum=0
while read first ;do
line=echo $first| cut -d ":" -f 3
let sum+=line
done < firstsum.txt
echo $sum
 
命令计算
cat /etc/passwd |cut -d “:” -f3 |paste -s -d+|bc

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值