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

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

将多个网络连接起来,使之能够互访的设备叫网桥。

多端口网桥称为交换机

    二层交换机:数据链路层设备,多端口,与网桥相比,交换机可识别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网络,请描述详细的步骤。(手动指定的方式)


配置文件: /etc/sysconfig/network-scriptes/ifcfg-IFACE  (IP.MASK, GW, DNS 相关配置文件)

    /etc/sysconfig/network-scripts/ifcfg-IFACE:

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

HWADDR:对应设备的MAC地址

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

NM_CONTROLLED: NM为networkmanager的简写。此网卡是否接受NM控制 Centos6建议为no

ONBOOT:在系统引导时是否激活此设备: YES|NO

TYPE:接口类型。常见:Ethernet, Bridge

UUID:设备的唯一标示

IPADDR:指明Ip地址

NETMASK:子网掩码

GATEWAY:默认网关

DNS1:第一个DNS服务器指向

DNS2: 第二个DNS服务器指向

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

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



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



1)ifconfig命令

ifconfig 网卡设备 IP地址 netmask 子网掩码

该命令即时生效,但在重启后失效。


2)ip 命令

ip addr add 192.168.100.101/24 dev eth0

此处ip需跟后缀,表示子网掩码。24即为255.255.255.0


3)配置文件

vim /etc/sysconfig/network-scripts/ifcfg-eht0

配置详见第四题。


4)nmcli 命令

nmcli connection add type ethernet con-name NAME_OF_CONNECTION ifname interface-name ip4 IP_ADDRESS gw4 GW_ADDRESS



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

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

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


for i in {1..254};do
       ping -c 1 -w 1 172.16.250.$i &> /dev/null;     
   if [ $? -eq 0 ];then     
       echo -e "\033[32m $172.16.250.$i is online\033[0m"               
    else
       echo -e "\033[31m $172.16.250.$i is offline\033[0m"              
   fi
done


echo进行颜色输出的时候,要使用参数-e

格式:echo -e “\033[字背景颜色;字体颜色m”

一共有8种字体颜色可供选择,它们分别是30 (黑色)、31 (红色)、32 (绿色)、33 (×××)、34 (蓝色)、35 ( 紫红色)、36 (青色)和37 (白色)

对于底色也有8种颜色可供选择,只需要将字体颜色的3修改为4即可,例如40、41、42、43、44、45、46、47。


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



IP,MASK,GW,DNS相关配置文件:/etc/sysconfig/network-scripts/ifcfg-*

路由相关配置文件:/etc/sysconfig/network-scripts/route-* (该文件需要自己创建)


  /etc/sysconfig/network-scripts/ifcfg-*

    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分配的dns服务器指向信息直接覆盖/etc/resolv.conf


  /etc/sysconfig/network-scripts/route-*

  两种风格:

    1、TARGET via GW

      192.168.0.0/24 via 172.16.0.1

    2、每三行定义一条路由

      ADDRRESS#=TARGET

      NETMASK#=mask

      GATEWAY#=GW




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

1)ifconfig命令

    ifconfig IFACE_ALIAS IP

    如:ifconfig eth0:0 192.168.100.110

2)ip addr命令

    ip addr add IP dev IFACE

    如:ip addr add 192.168.100.110 dev eth0

3)配置文件 etc/sysconfig/network-scripts/ifcfg-网卡设备:n

    示例:

      vim /etc/sysconfig/network-scripts/ifcfg-eth0:0

      TYPE=Ethernet

      BOOTPROTO=none

      NAME=eth0:0

      DEVICE=eth0:0

      ONBOOT=yes

      IPADDR=192.168.100.110

      PREFIX=24

      GATEWAY=192.168.100.2

      DNS1=192.168.100.2

      

4)nmcli命令

    示例:nmcli connection modify eth0 +ipv4.addresses "192.168.100.110/24"


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


ifconfig命令:

ifconfig 显示所有网卡的IP地址

ifconfig eth0 显示指定的网卡IP地址

ifconfig eth0 down/up 关闭或启用指定的网卡

ifconfig eth0: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

ifconfig命令:

ifconfig 显示所有网卡的IP地址

ifconfig eth0 显示指定的网卡IP地址

ifconfig eth0 down/up 关闭或启用指定的网卡

ifconfig eth0: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

         add 添加路由。例如

ip route add 192.168.1.0/24 via 172.16.1.1 dev eth0

所有目的地址是192.168.1.0/24的数据包,其下一跳地址(gateway)为172.16.1.1,并且从本机eth0 接口发送出去。

        delete 删除路由

        show 查看路由表


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


1. rpm

rpm -i 安装指定rpm程序包

rpm -e 卸载指定程序

rpm –test 测试安装

rpm –nodeps 忽略依赖关系

rpm –replacepkgs 重新安装

rpm –nosignature:不检查来源的合法性

rpm –upgrage 安装有旧程序包,则升级,如果不存在旧版程序包,则安装

rpm –freshen:安装有旧程序包时,则升级,如果不存,则不执行升级操作

rpm -q{l | c } 显示指定程序是否安装\安装生成的文件\配置文件


2. yum

yum install 安装指定程序

yum remove 卸载指定程序

yum update 升级指定程序 

yum groupinstall 安装组程序包

yum groupupdate 升级组程序 

yum groupremove 卸载组程序

yum info 查看指定程序的信息





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


mount /dev/cdrom /mnt   #挂载光盘至特定目录

vim /etc/yum.repos.d/centos.repos 创建或修改该目录下以.repos为后缀的文件


[cdrm]

name=cdrm 名称

baseurl=file:///mnt/ 路径

cost=1 成本 

gpgcheck=0 不检查

enabled=1 开启




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

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

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

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

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

declare -i numk=0
declare -i nums=0
for i in `ls /etc/rc.d/rc3.d | grep "^K"`;do          
  echo "$i stop"                                       
  let numk++                                            
done
for i in `ls /etc/rc.d/rc3.d | grep "^S"`;do           
  echo "$i start"                                     
  let nums++                                            
done
  echo "$numk files stopped \n" 
  echo "$nums files started \n"

for i in `ls /etc/rc.d/rc3.d | grep "^K"`: 将所有rc3.d目录下的文件通过筛选出K开头的文件,然后循环处理。``为反引号

declare -i 声明变量为整数


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

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

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

declare -i sum=0
if [ $# -le 0 ];then   #$#表示所传参数个数, le:小于等于                     
  echo "Please input at least one user name"  
  exit 1
fi
for i in $@;do        #$@表示所有参数                        
  if id $i &> /dev/null;then                   
    let sum+=$(id -u $i)    #id -u $i: 显示$i的用户id                  
    echo "$i : does not exist!"            
  fi
done



14、写一个脚本

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

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

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

if [ $# -lt 1 ];then
	echo "please input at lease one directory"
	exit1
fi

declare -i f=0
declare -i d=0
ls -l $*
for i in $*;do               
for n in $(ls $i);do        
if [ -f $i/$n ] ;then           
let f+=1                       
elif [ -d $i/$n ]; then                 
let d+=1                       
fi
done
done
echo "$f files, $d directories."



15、写一个脚本

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

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


if [ $# -eq 0 ];then
    echo "Please input user name "
    exit 1
fi
if id $1 &> /dev/null;then
    if [ $(id -u $1) -ge 1000 ];then  #$(id -u $1) 表示执行id -u $1操作后的结果 
        echo "$1 is general user"
    elif [ $(id -u $1) -eq 0 ];then
        echo "$1 is root user"
    else
        echo "$1 is system user"
    fi
else
    echo "$1 not exist"
fi



16、写一个脚本

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

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

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

declare -i i=1
declare -i sum=0
 
if [ $UID -ne 0 ];then   # $UID -ne 0 检测执行用户是否为root
    echo "Only root user can create users"
    exit 1
fi
 
while [ $i -le 10 ];do
    if id user$i &> /dev/null;then
        echo "user$i exists"
    else
        useradd user$i && echo "user$i" | passwd --stdin user$i &> /dev/null
        suc_add_user=(${suc_add_user[*]} user$i)
        let sum++
    fi
    let i++
done
 
echo "$sum users added"



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


for i in {1..254}; do
ping -c 1 -w 1 172.16.250.$i &> /dev/null
if [ $? -eq 0 ]; then
echo "172.16.250.$i is online !"
fi
done



18、打印九九乘法表;

for ((i=1;i<=9;i++));do
    for((j=1;j<=i;j++));do
        echo -e -n "$j*$i=$(($i*$j))\t"
    done
    echo "\n"
done