首页 > 代码库 > 第八周

第八周

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

网桥:网桥也叫桥接器,是连接两个局域网的一种存储/转发设备,它能将一个大的LAN分割为多个网段,或将两个以上的LAN互联为一个逻辑LAN,使LAN上的所有用户都可访问服务器。
集线器:集线器主要工作在物理层,其主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。
二层交换机:二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。
三层交换机:三层交换机是具有部分路由器功能的交换机,既可实现网络路由功能,又可根据不同网络状况做到最优网络性能,能够做到一次路由,多次转发。
路由器:路由器是一种计算机网络设备,主要用于连接两个以上各别网络的设备,其工作在OSI模型的第三层——即网络层,它能将数据通过打包一个个网络传送至目的地(选择数据的传输路径),这个过程称为路由。

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

IP地址分为A、B、C、D、E五类,其中A、B、C是基本类,D类用于组播,E类用于科学实验保留使用。
A类地址的IP地址范围:1.0.0.0--127.255.255.255,最大主机数:16777214,最大网络数:126(2^7-2),私有地址范围:10.0.0.0--10.255.255.255,默认子网掩码:255.0.0.0
B类地址的IP地址范围:128.0.0.0--191.255.255.255,最大主机数:65534,最大网络数:16384(2^14),私有地址范围:172.16.0.0--172.31.255.255,默认子网掩码:255.255.0.0
C类地址的IP地址范围:192.0.0.0--223.255.255.255,最大主机数:254,最大网络数:2097152(2^21),私有地址范围:192.168.0.0--192.168.255.255,默认子网掩码:255.255.255.0
D类:组播 224.0.0.1-239.255.255.254
E类:240.0.0.1-255.255.255.254
子网掩的作用:将某个IP地址划分成网络地址和主机地址两部分,用于判断所给的IP地址是否属于同一网段,结合IP地址进行“与”计算可计算出对应主机的网络地址。

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

OSI七层模型:
    物理层: 将数据转换为可通过物理介质传送的电子信号;涉及到的物理设备主要有:集线器、网线、光纤、同轴电缆等;
    数据链路层: 决定访问网络介质的方式,在此层将数据分帧,并处理流控制,指定拓扑结构并提供硬件寻址;涉及到的物理设备主要有:网卡、网桥、二层交换机;
    网络层: 使用权数据路由经过大型网络;涉及到的物理设备主要有:路由器、三层交换机等; 
    传输层: 提供终端到终端的可靠连接;
    会话层: 允许用户使用简单易记的名称建立连接;
    表示层: 协商数据交换格式;
    应用层: 用户的应用程序和网络之间的接口。
TCP/IP模型:
    应用层:对应于OSI参考模型的高层,为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等. 
    传输层:对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP).
    网际互联层:对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。注重重新赋予主机一个IP地址来完成对主机的寻址,它还负责数据包在多种网络中的路由。该层有四个主要协议:网际协议(IP)、地址解析协议(ARP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)。
    网络接入层:对应于OSI参考模型中的物理层和数据链路层,它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。

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

[root@server ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 #配置网卡文件
TYPE=Ethernet
BOOTPROTO=static #明确说明使用指定静态IP
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=4be35a08-3685-4e79-ac08-50b9d83af198
DEVICE=eno16777736
ONBOOT=yes #明确开机自启动
IPADDR= 192.168.1.102 #配置IP
NETMASK=255.255.255.0 #配置子网掩码
GATEWAY=192.168.1.0 #配置网关
DNS1=114.114.114.114 #配置DNS
DNS2=223.5.5.5
[root@server ~]# systemctl restart network.service #重启网卡(这里是Centos7,如果Centos6则使用 service network restart)
[root@server ~]# ifconfig -a #查看配置信息是否生效
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.102  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:feb9:fdca  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b9:fd:ca  txqueuelen 1000  (Ethernet)
        RX packets 4625263  bytes 6610253968 (6.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 429411  bytes 31567513 (30.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 112  bytes 11924 (11.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 112  bytes 11924 (11.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

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

①直接修改配置文件
  /etc/sysconfig/network-scripts/ifcfg-eno16777736 #永久生效
②使用ifconfig命令
  eg:ifconfig eno16777736 192.168.1.102 network 255.255.255.0 #重启失效
③使用ip命令 
  eg:ip addr add 192.168.1.102/24 dev eno16777736 #重启失效
④配置路由信息
  eg:route add -net 192.168.1.107 netmask 255.255.255.0 dev eno16777736 #重启失效

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

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

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

[root@server ~]# vim g #因为我的虚拟机和本地环境配置的都是192.168.1段的,故以此为例
[root@server ~]# cat g
#!/bin/bash
ipaddr="192.168.1."
for i in {1..254}
do
   ping -c 1 $ipaddr$i &> /dev/null;
   if [ $? -eq 0 ]
   then
       echo -e "\e[1;32m$ipaddr$i\e[0m"
   else
       echo -e "\e[1;41m$ipaddr$i\e[0m"
   fi
done
[root@server ~]# chmod 740 g
[root@server ~]# ./g #如下图

技术分享

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

TYPE:接口类型;常见有的Ethernet, Bridge;
BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp;
NAME:设备名
UUID:设备的惟一标识;
HWADDR:对应的设备的MAC地址;
DEVICE:此配置文件应用到的设备名
ONBOOT:系统引导时是否激活此设备,可以理解为是否开机自启动,选项为yes|no
IPADDR:IPv4地址
NETMASK:子网掩码
GATEWAY:网关
DNS1:DNS服务器1的IP
DNS2:DNS服务器2的IP

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

①复制配置文件方式:
/etc/sysconfig/network-script/ifcfg-eno16777736:0 #永久生效
/etc/sysconfig/network-script/ifcfg-eno16777736:1
②使用ifconfig命令:
ifconfig eno16777736:0 192.168.1.102 network 255.255.255.0 #重启失效
ifconfig eno16777736:1 192.168.1.103 network 255.255.255.0
③使用ip命令:
ip  addr  add  192.168.1.102/24 dev  eno16777736 label eno16777736:0 #重启失效
ip  addr  add  192.168.1.103/24 dev  eno16777736 label eno16777736:1

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

①ifconfig命令
  ifconfig -a|-s|interface 显示所有网卡信息|显示接口信息|显示某个接口的信息
eg:ifconfig eth0 192.168.1.111/24 up #更改某网卡的IP并激活网卡
    ifconfig eth0 192.168.1.112 netmask 255.255.255.0 #更改某网卡的ip及子网掩码
    ifconfig interface down/up  #关闭/开启某接口
    另外,ifdown/ifup interface #关闭/开启某接口(通过调用脚本方式)
②route命令
  route -n 查看当前路由条目
  添加路由信息:route add [-net | -host] target [netmask n/m] [gw gateway] [dev interface]
  eg: route add -host 192.168.1.3 gw 173.15.0.3 dev eth0 #添加主机路由
  
  删除路由:route del [-net|-host] target [gw GW][netmask n/m] [dev interface]
  eg: route del -host 192.168.1.3 dev eth0
③netstat 显示网路连接 
  格式:netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
  选项:       -t: tcp协议相关连接,连接均有其状态;FSM(Finate state Machine) 
              -u: udp协议相关
              -w: raw socket相关 裸套接字 
              -l: 处于监听状态
              -a: 所有状态
              -n: 以数字显示IP和端口;
              -e:扩展格式 
              -p: 显示相关进程及PID 
              -r: 显示路由信息
 eg:
[root@server ~]# netstat -rn #显示路由信息
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eno16777736
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eno16777736
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eno16777736 
[root@server ~]#  netstat -tunlp #显示当前出于监听状态的端口的路由信息
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1522/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2637/master
tcp6       0      0 :::22                   :::*                    LISTEN      1522/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      2637/master
udp        0      0 0.0.0.0:44494           0.0.0.0:*                           8814/dhclient
udp        0      0 0.0.0.0:68              0.0.0.0:*                           8814/dhclient
udp6       0      0 :::57992                :::*                                8814/dhclient

④ip命令
格式:ip [iptions] object{command|help},其中object的可选项为link|addr|route
ip link set dev interface ip/down #激活或禁用指定接口
ip link show [dev interface] #显示所有接口[指定接口名]
ip addr的格式:ip addr { add | del } ip地址 dev 设备名 [label 别名]  [scope {global|link|host}]
   eg:[root@server ~]# ip addr add 192.168.1.109 dev eno16777736
ip addr show #查看所有接口的IP
ip route add:
   添加路由:ip route add TARGET via GW dev IFACE src SOURCE_IP
   添加网关:ip route add defalt via GW dev IFACE
   删除路由:ip route del TARGET
   查看路由表:ip route show
   清空路由表:ip route flush
⑤ss命令
格式:ss [options]...[ FILTER ]
选项:
     -t: tcp协议相关连接
     -u: udp协议相关连接
     -w:裸套接字相关
     -l: 处于监听状态连接
     -a: 所有状态
     -x:Unix socket相关
     -n: 以数字显示IP和端口;
     -e:扩展格式
     -p: 显示相关进程及PID     
     -m:内存用量
     -o:计时器信息

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

rpm options packageName
选项: 
      -f 指定的文件由哪些程序包生成 
      -i 安装
      -q 查询
      -l 显示软件包中的文件列表
      -e 卸载
      -v 验证信息
      -h 显示安装进度
      -U 有旧的程序就升级,没有就安装
      -F 有旧的程序就升级,没有就不安装        
yum管理器
eg:
      yum list 显示可用程序包
      yum repolist 查看有哪些可用的repo
      yum install packageName 安装程序包
      yum update packageName 升级程序包
      yum remove packageName 卸载程序包
      yum info packageName 查看程序包

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

[root@server ~]# mkdir /mnt/iso
[root@server ~]# mount -t iso9660 -o loop /iso/CentOS-6.8-x86_64-bin-DVD1.iso /mnt/iso/
mount: /dev/loop0 is write-protected, mounting read-only
[root@server Packages]# df
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  18307072 4076064  14231008  23% /
devtmpfs                   490216       0    490216   0% /dev
tmpfs                      500664       0    500664   0% /dev/shm
tmpfs                      500664    6824    493840   2% /run
tmpfs                      500664       0    500664   0% /sys/fs/cgroup
/dev/sda1                  508588  127116    381472  25% /boot
tmpfs                      100136       0    100136   0% /run/user/0
/dev/loop0                2168646 2168646         0 100% /mnt/iso
[root@server ~]# echo "/iso/CentOS-6.8-x86_64-bin-DVD1.iso /mnt/iso iso9660 defaults,ro,loop 0 0" >> /etc/fstab
[root@server ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sat Sep 24 17:53:46 2016
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=03ddd4c7-3f99-4fb2-bad9-cad515314dda /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/iso/CentOS-6.8-x86_64-bin-DVD1.iso /mnt/iso iso9660 defaults,ro,loop 0 0
[root@server ~]# mount -a
[root@server ~]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# ll
total 0
[root@server yum.repos.d]# vim iso.repo
[root@server yum.repos.d]# cat iso.repo
[isoBeta]
name=isoBeta
baseurl=file:///mnt/iso
gpgcheck=1
enabled=1
gpgkey=file:///mnt/iso/RPM-GPG-KEY-CentOS-6
[root@server ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: isoBeta
Cleaning up everything
[root@server ~]# yum makecache
Loaded plugins: fastestmirror
isoBeta                                                                                     | 4.0 kB  00:00:00
(1/4): isoBeta/group_gz                                                                     | 226 kB  00:00:00
(2/4): isoBeta/filelists_db                                                                 | 6.3 MB  00:00:00
(3/4): isoBeta/primary_db                                                                   | 4.7 MB  00:00:00
(4/4): isoBeta/other_db                                                                     | 2.8 MB  00:00:00
Determining fastest mirrors
Metadata Cache Created
[root@server ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                                               repo name                                              status
isoBeta                                               isoBeta                                                6,696
repolist: 6,696
[root@server ~]#

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

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

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

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

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

[root@server rc3.d]# vim a
[root@server rc3.d]# cat a
#!/bin/bash
declare -i Ksum
declare -i Ssum
for i in $(ls /etc/rc.d/rc3.d/ | grep -E "^K")
do
  echo "$i stop"
  let Ksum+=1
done

for i in $(ls /etc/rc.d/rc3.d/ | grep -E "^S")
do
  echo "$i start"
  let Ssum+=1
done

echo "S开头的文件有个$Ssum;K开头的文件有多少$Ksum个"
[root@server rc3.d]# chmod 740 a
[root@server rc3.d]# ./a
K1.txt stop
K2.txt stop
K3.txt stop
K4.txt stop
K50netconsole stop
K5.txt stop
K6.txt stop
K7.txt stop
K8.txt stop
K9.txt stop
S10network start
S11 start
S12 start
S13 start
S14 start
S15 start
S16 start
S17 start
S18 start
S19 start
S1.pdf start
S20 start
S2.pdf start
S3.pdf start
S4.pdf start
S5.pdf start
S6.pdf start
S7.pdf start
S8.pdf start
S9.pdf start
S开头的文件有个20;K开头的文件有多少10个

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

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

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

[root@server ~]# vim b
[root@server ~]# cat b
#!/bin/bash
declare -i sum
for i in $@
do
  let sum+=$(id -u $i)
done
echo $sum
[root@server ~]# chmod 740 b
[root@server ~]# ./b root tss sshd lp ftp
151

14、写一个脚本

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

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

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


15、写一个脚本

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

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

[root@server ~]# vim c
[root@server ~]# cat c
#!/bin/bash
if [[ $(id -u $@) -ge 500 ]]
then
   echo "此用户为普通用户"
else
   echo "此用户为管理员"
fi
[root@server ~]# chmod 740 c
[root@server ~]# ./c beta
此用户为普通用户
[root@server ~]# ./c root
此用户为管理员

16、写一个脚本

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

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

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

[root@server ~]# vim a
[root@server ~]# cat a
#!/bin/bash
declare -i sum=0
for i in {1..10}
do
  useradd "user$i"
  if [ $? -eq 0 ]
  then
       echo "user$i" | passwd --stdin "user$i"
       let sum+=1
  else
      continue
  fi
done
 echo "一共添加了 $sum 个新用户"
[root@server ~]# chmod 740 a
[root@server ~]# ./a
Changing password for user user1.
passwd: all authentication tokens updated successfully.
Changing password for user user2.
passwd: all authentication tokens updated successfully.
Changing password for user user3.
passwd: all authentication tokens updated successfully.
Changing password for user user4.
passwd: all authentication tokens updated successfully.
Changing password for user user5.
passwd: all authentication tokens updated successfully.
Changing password for user user6.
passwd: all authentication tokens updated successfully.
Changing password for user user7.
passwd: all authentication tokens updated successfully.
Changing password for user user8.
passwd: all authentication tokens updated successfully.
Changing password for user user9.
passwd: all authentication tokens updated successfully.
Changing password for user user10.
passwd: all authentication tokens updated successfully.
一共添加了 10 个新用户

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

[root@server ~]# vim h #因为我的虚拟机和本地环境配置的都是192.168.1段的,故以此为例
[root@server ~]# cat h
#!/bin/bash
ipaddr="192.168.1."
for i in {20..100}
do
   ping -c 1 $ipaddr$i &> /dev/null
   if [[ $? -eq 0 ]]
   then
     echo "$ipaddr$i is UP"
   fi
done
[root@server ~]# chmod 740 h
192.168.1.100 is UP

18、打印九九乘法表;

[root@server ~]# vim d
[root@server ~]# cat d
#!/bin/bash
for((i=1;i<=9;i++))
   do
     for((j=1;j<=$i;j++))
        do
            echo -e -n "$j*$i=$[$i*$j]\t"
        done
   echo""
   done

[root@server ~]# chmod 740 d
[root@server ~]# ./d
1*1=1
1*2=2   2*2=4
1*3=3   2*3=6   3*3=9
1*4=4   2*4=8   3*4=12  4*4=16
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

本文出自 “果麦” 博客,转载请与作者联系!

第八周