1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。

答:

网桥:双端口的二层设备,可以隔离冲突域,一般用于划分LAN,或者链接LAN。


集线器:物理层设备,多端口,无法隔离冲突域,用于连接主机。


二层交换机:数据链路层设备,多端口,与网桥相比,交换机可学习MAC地址,根据MAC地址转发数据,可隔离冲突域,用于在路由设备与主机之间架设,接入层与汇聚层皆可使用。


三层交换机:相当于是带路由功能的二层交换机,工作在网络层,有更高的带宽,可做核心层使用,用于大中型网络的路由交换。


路由器:网络层设备,在各局域网,城域网之间传递数据,根据IP地址转发数据,可隔离广播域,用于核心层。

2、IP地址的分类有哪些?子网掩码的表示形式及其作用

答:IP地址分类有A类、B类、C类、D类、E类;

A类:IP范围0.0.0.1-127.255.255.255,子网掩码255.0.0.0。A类地址分配给规模特别大的网络使用,A类网络用第一组数字表示网络本身的地址,后面三组数字作为连接于网络上的主机的地址。分配给具有大量主机(直接个人用户)而局域网络个数较少的大型网络

B类:IP范围128.0.0.1-191.255.255.255,子网掩码255.255.0.0。B类地址分配给一般的中型网络。B类网络用第一、二组数字表示网络的地址,后面两组数字代表网络上的主机地址。

C类:IP范围192.0.0.1-223.255.255.255,子网掩码255.255.255.0。C类地址分配给小型网络,如一般的局域网,它可连接的主机数量是最少的,采用把所属的用户分为若干的网段进行管理。C类网络用前三组数字表示网络的地址,最后一组数字作为网络上的主机地址。

D类:D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1110。D类地址范围:224.0.0.1-239.255.255.254 。D类地址用于多点播送。D类地址称为广播地址,供特殊协议向选定的节点发送信息时用。

E类:保留地址。

3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。

答:OSI七层模型从低到高分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等;

数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输;

网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择;

传输层:定义了一些传输数据的协议和端口号,如www端口为80,ftp端口为20、21等;

会话层:通过传输层建立数据传输的通路;

表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取;

应用层:为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。

TCP/IP模型分为四层,从高到低为应用层、传输层、互联网络层、网络接口层;

应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等;


传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收;

 

互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP);

 

网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。

4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)

答:为Linux主机配置IP地址即可接入到TCP/IP网络,配置方式可用修改配置文件、ip命令等方式;

编辑/etc/sysconfig/network-scripts/ifcfg-eth0配置文件

wKiom1fzO-ySAP2tAAA7rUciO68166.jpg

5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。

答:配置linux主机方式有4种;修改配置文件、ip命令、ifcfg命令、图形化工具

① 修改配置文件:配置文件所在路径为/etc/sysconfig/network-scripts/ifcfg-eth0,直接vim编辑即可

wKioL1fzPkOAUYAIAAAu03Sv9fw139.jpg

② ip命令(ip命令可为网卡设置多个ip地址,也可用来配置本机ip地址)

设置多个IP:

wKiom1fzTtTgovz8AACFVw0KuzQ541.jpg

注:此方法添加的多个IP在centos6中重启网络服务后会失效,若要永久使用,需修改或添加配置文件

设置本机IP:

wKiom1fzTk-jhnMfAAD_gbAbzZY770.jpg

注:此方法设置的IP在centos6中重启网络服务后会失效,若要永久使用,需修改或添加配置文件

③ ifcfg命令

wKioL1fzU3_AxYOqAAFV1PbcQRY699.jpg

注:此方法设置的IP在centos6中重启网络服务后会失效,若要永久使用,需修改或添加配置文件

④ 图形化工具

使用命令system-config-network-tui来启用图形化工具,选择配置设备

wKiom1fzVG-yp_VFAAAaMklmp1Q090.jpg

可选择配置新设备或修改已有设备

wKioL1fzVL-TVdoRAAAxcei0POc457.jpg

本实验环境未配置dns,实际中需要配置

wKiom1fzVRDDJvWqAAA3miiitTY051.jpg

最后保存退出即可。

6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;

    在线的主机使用绿色显示;

    不在线的主使用红色显示;

答:脚本如下

#!/bin/bash
export ping=172.16.250.
for i in {1..254};do
 if 
  ping $ping$i -c 2 -w 2 &> /dev/null;   ##检测是否能Ping通,即测试在线状态
 then
  echo -e "\033[32m $ping$i \033[0m"        ##在线表示为绿色
 else  
  echo -e "\033[31m $ping$i \033[0m"        ##不在线表示为红色
 fi
done

结果如下:

wKioL1fzaQ6SwZWfAAAT4g1w5AU635.jpg

7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;

答:

DEVICE:此配置文件应用到的设备;

HWADDR:对应的设备的MAC地址;

BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp;

NM_CONTROLLED:NM是NetworkManager的简写;此网卡是否接受NM控制;CentOS6建议为“no”;

ONBOOT:在系统引导时是否激活此设备;

TYPE:接口类型;常见有的Ethernet, Bridge;

UUID:设备的惟一标识;

IPADDR:指明IP地址;

NETMASK:子网掩码;

GATEWAY: 默认网关;

DNS1:第一个DNS服务器指向;

DNS2:第二个DNS服务器指向;

USERCTL:普通用户是否可控制此设备;

PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中;

8、如何给网络接口配置多个地址,有哪些方式?

答:可使用ip命令、添加配置文件等方式

① ip命令

ip addr { add | del } IFADDR dev STRING

结果如下

wKioL1fzahuQ-XzMAADtjmoCeF4003.jpg

注:此种添加方式在重启网络服务后会失效

② 修改配置文件

首先将/etc/sysconfig/network-scripts/下的ifcfg-eth0文件复制一份,重命名为ifcfg-eth0:0,修改eth0:0

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0   ##复制并重命名网卡配置文件
[root@localhost network-scripts]# vi ifcfg-eth0:0              ##重新配置文件
##修改成如下格式
DEVICE=eth0:0                 ##设备名称
HWADDR=00:0C:29:55:40:1D
TYPE=Ethernet
UUID=6548ecf3-be87-412c-9906-b17d00a2addd
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.199.20         ##IP地址
NETMASK=255.255.255.0         ##掩码
[root@localhost network-scripts]# service network restart     ##重启网络服务生效
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Determining if ip address 192.168.199.230 is already in use for device eth0...
Determining if ip address 192.168.199.20 is already in use for device eth0...
                                                           [  OK  ]

9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。

答:

ifconfig命令:

ifconfig 显示所有网卡的IP地址

ifconfig eth1 显示指定的网卡IP地址,这里eth1

ifconfig eth1 down/up 关闭或启用指定的网卡,这里eth1

ifconfig eth1:1 ip_address/mask up/down 配置子接口的IP地址,并启用或关闭


IP命令

常用的IP子命令有 {link | addr | route }

ip link 

show {up|down} 查看状态属于是up或down的接口

set {up|down|arp on|arp off |mtu|mac_address|..}设置接口的二层属性

ip addr 

add {dev|local|broadcast|..} 添加IP地址。例如ip addr add dev eth1:2 local 192.168.1.102/24 

delete 删除接口的IP地址。ip addr delete dev eth1 192.168.1.103/24

show 查看接口的IP地址


ip route

ip route add 添加路由。例如ip route add 192.168.1.0/24 via 172.16.1.1 dev eth0 添加去往192.168.1.0/24的路由,下一跳是172.16.1.1;ip route add default 172.16.1.1 添加默认路由

delete 删除路由。例如ip route delete 192.168.1.0/24 

show 查看路由表

10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。

答:有rpm工具和yum;

rpm包安装
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -ivh paceage_file...
[install-options]
--test:测试安装,但不真正执行安装过程;(测试包的依赖关系等)
--nodeps:忽略依赖关系;
--replacepkgs:重新安装;
--nosignature:不检查来源合法性;
--nodigest:不检查包完整性;
--noscipts:不执行程序包脚本片段;
%pre:安装前脚本;  --nopre
%post:安装后脚本;  --nopost
%preun:卸载前脚本;   --nopreun
%postun:卸载后脚本;      --nopostun
rpm包升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
upgrade:安装有旧版程序包,则升级;如果不存在旧版本程序包,则安装;
freshen:安装有旧版程序包,则升级;如果不存在旧版程序包,则不执行升级操作;
rpm -Uvh package_file...
rpm -Fvh package_file...
--oldpackage:降级;
--force:强制升级;
注意:1、不要对内核进行升级操作;linux支持多内核版本并存,因此,直接安装新版本内核;
2、如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的配置文件重命名(filename.rpmnew)后保存;
rpm包查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:所有包;
-f:查询指定的文件由哪个程序包安装生成;
-g:查询指定包组的程序包;
-p /path/to/package_file:针对尚未安装的程序包文件做查询操作
查看安装后生成的文件等
--wahtprovidex capability:查询指定的capability由哪个包提供;
--whatrequires capability:查询指定的capability被哪个包所依赖;
[query-options]
--changelog:查询rpm包的changelog(bug修复等);
-c:查询程序包的配置文件;
--conflicts;
-d:查询程序包的帮助文档;
-i:information,查看安装的程序详细信息;
-l:查看指定的程序包安装后生成的所有文件列表;
--scripts:查看程序包的所有脚本;
-R:查询指定的程序包所依赖的capability;
--provides:列出指定程序包所提供的capability;
rpm包卸载:
rpm  {-e|--erase}  [--allmatches]  [--nodeps]  [--noscripts] [--notriggers]
[--repackage] [--test] PACKAGE_NAME ...
rpm包校验:
rpm {-V|--verify} [select-options] [verify-options]
包来源合法性验证及完整性验证:
完整性验证:SHA256
来源合法性验证:RSA
公钥加密:
对称加密:加密、解密使用同一密钥;
非对称加密:密钥是成对的
public key:公钥,公开所有人
secret key:私钥,不能公开
导入所需要公钥:
rpm --import  /path/from/GPG-PUBKEY-FILE
centos 7发行光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7
数据库重建
rpm {--initdb|--rebuilddb}
initdb:初始化
如果事先不存在数据库,则新建之;否则不执行任何操作;
rebuilddb:重建
无论当前是否存在,直接重新创建数据库;

yum管理程序包,在使用前需配置yum仓库文件
repolist [all|enabled|disabled] 列出所有可用仓库
显示程序包:
# yum list [all | glob_exp1] [glob_exp2] [...]
# yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
install package1 [package2] [...]
升级程序包:
update package1 [package2] [...]
downgrade package1 [package2] [...](降级安装)
检查可用升级包:
check-update
卸载程序包:
remove | erase package1 [package2] [...]  有依赖关系的也会一同卸载
查看程序包信息:
yum info [...]
查看指定的特性(可以是某个文件)是有哪个程序包提供的:相当于rmp -qf
provides | whatprovides feature1 [feature2] [...]
清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
生成本地缓存:
makecache
搜索:
search string1 [string2] [...]以指定关键字搜索程序包名及summary信息
重新安装:
reinstall package1 [package2] [...]
显示指定包所依赖关系包名:
deplist package1 [package2] [...]

11、如何使用发行版光盘作为yum repository,请描述该过程。

答:先将光盘挂载至本地,然后修改或新建yum仓库文件

[root@localhost~]# mkdir /mnt/dvd          ##新建文件夹作为挂载点使用
[root@localhost~]# mount /dev/sr0 /mnt/dvd     ##将光盘挂载至文件夹
[root@localhost~]# cd /etc/yum.repos.d/        ##进入yum仓库配置文件夹
[root@localhost~]#  cp rhel-source.repo rhel-source.repo.bak   ##备份原配置文件
[root@localhost~]#  vim dvd.repo                       ##配置新的yum仓库文件
[rhel-dvd]
name=dvd
baseurl=file:///mnt/dvd/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

12、写一个脚本,完成以下功能

  (1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;

  (2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;

  (3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;

  (4) 分别统计S开头和K开头的文件各有多少;

答:脚本如下

#!/bin/bash
export K=0
export S=0
for i in $(ls /etc/rc.d/rc3.d/ | grep -o "^K.*");do    ##定义循环次数为所有K开头的文件数
  echo "$i stop"                                           ##附加字符串
  let K+=1                                                  ##统计数量
done
for a in $(ls /etc/rc.d/rc3.d/ | grep -o "^S.*");do    ##定义循环次数为所有S开头的文件数
  echo "$a start"                                          ##附加字符串
  let S+=1                                                  ##统计数量
done
echo "K开头的文件有$K 个;S开头的文件有$S 个。"

结果如下

wKiom1fze97DdHQoAACWJfuh1_E445.jpg

13、写一个脚本,完成以下功能

  (1) 脚本能接受用户名作为参数;

  (2) 计算此些用户的ID之和;

答:脚本如下

#!/bin/bash
export sum=0
for i in $*;do                    ##循环次数为给出的用户名
if $(id $i &> /dev/null);then    ##判断用户名是否存在  
echo "$i=$(id -u $i)"             ##得到UID数
let sum+=$(id -u $i)              ##记录UID数以用来求和 
else
echo "$i 用户名不存在"             ##若用户名不存在则退出计算并告知用户名不存在
exit 1
fi
done
echo "输入用户名的UID和为$sum"

结果如下

wKioL1fzg_DRPt6jAAAsyuL6UZo633.jpg

14、写一个脚本

  (1) 传递一些目录给此脚本;

  (2) 逐个显示每个目录的所有一级文件或子目录的内容类型;

  (3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;

答:脚本如下

#!/bin/bash
export f=0
export d=0
ls -l $*
for i in $*;do                ##循环次数为给定的目录数
for n in $(ls $i);do         ##以单个给定的目录下的文件夹为循环次数 
if
[ -f $i/$n ] ;then           ##判断文件类型
let f+=1                        ##统计此类型文件数量
else
[ -d $i/$n ]                  ##判断文件类型
let d+=1                        ##统计此类型文件数量
fi
done
done
echo "文件有$f 个,文件夹有$d 个."

结果如下

wKiom1fzsSCgKX1_AAFXi7pmrqI307.jpg

15、写一个脚本

 通过命令行传递一个参数给脚本,参数为用户名

 如果用户的id号大于等于500,则显示此用户为普通用户;

答:脚本如下

#!/bin/bash
for i in $*;do
if 
[ $(id -u $i) -ge 500 &> /dev/null ];then
echo "$i 是普通用户"
else
echo "$i 是系统用户"
fi
done

结果如下

wKiom1fztCDCT1mbAAAfRKcDkwA717.jpg

16、写一个脚本

  (1) 添加10用户user1-user10;密码同用户名;

  (2) 用户不存在时才添加;存在时则跳过;

  (3) 最后显示本次共添加了多少用户;

答:脚本如下

#!/bin/bash
export i=0
for n in $*;do
if [ $(echo "$n" | wc -c) -le 3 ];then
echo "用户名不得低于2个字符串"
exit 1
elif
id $n >> /dev/null;then
echo "用户名$n 已存在"
else
useradd $n
echo "$n" | passwd --stdin $n >> /dev/null
echo "用户$n 已添加,密码同用户名,请及时修改!"
let i+=1
fi
done
echo "本次添加$i 个用户"

结果如下

wKioL1fz4AzgCIsjAABiZSIgZrQ937.jpg

17、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;

#!/bin/bash
export ping=172.16.250.
#for i in {1..254};do
for i in {20..100};do
 if 
  ping $ping$i -c 2 -w 2 &> /dev/null;
 then
  #echo -e "\033[32m $ping$i \033[0m"
  echo "$ping$i is on line"
 #else
  #echo -e "\033[31m $ping$i \033[0m"
 fi
done

为方便体现结果,在本机配置以下IP

[root@csd ~]# ip addr add 172.16.250.22/16 dev eth0
[root@csd ~]# ip addr add 172.16.250.23/16 dev eth0
[root@csd ~]# ip addr add 172.16.250.25/16 dev eth0
[root@csd ~]# ip addr add 172.16.250.24/16 dev eth0
[root@csd ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:96:37:a7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.199.239/24 brd 192.168.199.255 scope global eth0
    inet 172.16.250.22/16 scope global eth0
    inet 172.16.250.23/16 scope global secondary eth0
    inet 172.16.250.25/16 scope global secondary eth0
    inet 172.16.250.24/16 scope global secondary eth0
    inet6 fe80::20c:29ff:fe96:37a7/64 scope link 
       valid_lft forever preferred_lft forever

结果如下

wKiom1fz4ZLDxpcYAAAcMEZ1Xfc859.jpg

18、打印九九乘法表;

答:代码如下

#!/bin/bash
export h=0
for i in {1..9};do

for n in {1..9};do
if [ $n -lt 9 ];then         ##控制输出,当x*y中y不小于9时,输出结果并换到下一行
let h=$i*$n
echo -en "$i*$n=$h\t"        ##控制输出,echo本身默认最后会输出一个换行,“-en”禁用最后的换行。“\t”为输出TAB
else
let h=$i*$n
echo "$i*$n=$h"
fi
done
done

结果如下

wKioL1fz5dKjyyrGAABx6pClLEQ504.jpg