从Linux小白到大牛——与狼共舞的日子8

马哥教育网络班21期+第8周课程练习

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


  • 网桥是第2层的设备,它设计用来创建两个或多个LAN分段。其中,每一个分段都是一个独立的冲突域。网桥设计用来产生更大可用宽带。它的目的是过滤LAN的通信流,使得本地的通信流保留在本地,而让那些定向到LAN其他部分(分段)的通信流转发到那里去。每一台网络设备在NIC(网络接口卡)中都有一个惟一的MAC(介质访问控制)地址。网桥会记录它每一边的MAC地址,然后基于这张MAC地址表作出转发决策。

  • 集线器是物理层的共享设备,不能识别MAC地址和IP地址,局域网内数据包在HUB上是以广播的方式传播的,由每一台终端通过验证数据报头的MAC地址来确定是否接收。如果传输过程中发生碰撞,则需要重新发送数据!它的工作模式是半双工的,同一时刻只能有两个端口传送数据,所有端口共享带宽。

  • 交换机工作在数据链路层,交换机内部会形成一个端口和MAC地址的MAC表,通过数据报的MAC地址将数据发往指定的端口,因此交换机可用于划分数据链路层的的冲突域。交换机的工作模式有全双工,半双工和全双工/半双工自适应的工作模式。

  • 二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。

  • 三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。对于数据包转发等规律性的过程由硬件高速实现,而像路由信息更新、路由表维护、路由计算、路由确定等功能,由软件实现。三层交换技术就是二层交换技术+三层转发技术。 传统交换技术是在OSI网络标准模型第二层–数据链路层进行操作的,而三层交换技术是在网络模型中的第三层实现了数据包的高速转发,既可实现网络路由功能,又可根据不同网络状况做到最优网络性能。

  • 路由器工作在网络层,负责两个局域网之间按帧传输数据,路由器通过比对路由表将每一帧传到指定的目的地,路由器的工作模式是全双工的。

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


IP地址的主要分类:

A类:
   0 000 0000 - 0 111 1111: 1-127
   网络数:126, 127
   每个网络中的主机数:2^24-2
   默认子网掩码:255.0.0.0
   私网地址:10.0.0.0/8

B类:
   10 00 0000 - 10 11 1111:128-191
   网络数:2^14
   每个网络中的主机数:2^16-2
   默认子网掩码:255.255.0.0
   私网地址:172.16.0.0/16-172.31.0.0/16

C类:
   110 0 0000 - 110 1 1111: 192-223
   网络数:2^21
   每个网络中的主机数:2^8-2
   默认子网掩码:255.255.255.0
   私网地址:192.168.0.0/24-192.168.255.0/24

D类:组播
   1110 0000 - 1110 1111: 224-239

E类:
   240-255

子网掩码是一个32位地址,是与IP地址结合使用的一种技术。
它的表示形式有两个:
  (1)通常的表示方式,如:255.255.255.0
  (2)类似192.168.100.0/24,表示子网掩码是24位,子网掩码为:255.255.255.0,
     用二进制表示为:11111111 11111111 11111111 00000000
它的主要作用有两个:
  (1)用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
  (2)用于将一个大的IP网络划分为若干小的子网络。

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


从Linux小白到大牛——与狼共舞的日子8 从Linux小白到大牛——与狼共舞的日子8

  • 物理层

规定通信设备的机械的、电气的、功能的和过程的特性,用以建立、维护和拆除物理链路连接。在这一层,数据的单位称为比特(bit)。

  • 数据链路层

在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。数据链路层在不可靠的物理介质上提供可靠的传输。

  • 网络层

在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点,确保数据及时传送。

  • 传输层

为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所为透明的传输是指在通信过程中 传输层对上层屏蔽了通信传输系统的具体细节。

  • 会话层

在会话层及以上的高层次中,数据传送的单位不再另外命名,而是统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。

  • 表示层

主要解决拥护信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。

  • 应用层

为操作系统或网络应用程序提供访问网络服务的接口。

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


1.用ifconifg命令查看网卡的名称

[root@localhost ~]# ifconfig
eth0  Link encap:Ethernet  HWaddr 00:0C:29:4E:BB:E3  
  inet addr:192.168.82.56  Bcast:192.168.82.255  Mask:255.255.255.0
  inet6 addr: fe80::20c:29ff:fe4e:bbe3/64 Scope:Link
  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  RX packets:51915 errors:0 dropped:0 overruns:0 frame:0
  TX packets:34677 errors:0 dropped:0 overruns:0 carrier:0
  collisions:0 txqueuelen:1000 
  RX bytes:72165204 (68.8 MiB)  TX bytes:2462902 (2.3 MiB)

loLink encap:Local Loopback  
  inet addr:127.0.0.1  Mask:255.0.0.0
  inet6 addr: ::1/128 Scope:Host
  UP LOOPBACK RUNNING  MTU:16436  Metric:1
  RX packets:16 errors:0 dropped:0 overruns:0 frame:0
  TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
  collisions:0 txqueuelen:0 
  RX bytes:960 (960.0 b)  TX bytes:960 (960.0 b)

2.编辑对应的网卡的配置文件

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    HWADDR=00:0c:29:4e:bb:e3
    TYPE=Ethernet
    UUID=90cb3cf8-0779-4ca4-9ef1-c4260e416318
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=static
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    IPADDR=192.168.82.56
    NETMASK=255.255.255.0
    GATEWAY=192.168.81.1
    DNS1=202.106.0.20

3.重启网络服务

[root@localhost ~]# service network restart

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


1.命令行中修改
[root@localhost ~]# ifconfig eth0 192.168.82.56 netmask 255.255.255.0
[root@localhost ~]# route add default gw 192.168.82.1

2.图形化中修改
[root@localhost ~]# system-config-network-tui
[root@localhost ~]# setup

3.修改配置文件
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    HWADDR=00:0c:29:4e:bb:e3
    TYPE=Ethernet
    UUID=90cb3cf8-0779-4ca4-9ef1-c4260e416318
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=static
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    IPADDR=192.168.82.56
    NETMASK=255.255.255.0
    GATEWAY=192.168.81.1
    DNS1=202.106.0.20

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

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

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


[root@localhost ~]# cat ping1.sh 
#!/bin/bash
#
declare -i i=1
net=172.16.250
while [ $i -le 254 ];do
if ping -c 1 -w 1 $net.$i &> /dev/null;then
    echo -e "\E[1;32m$net.$i is up\E[0m"
else
    echo -e "\E[1;31m$net.$i is down\E[0m"
fi
let i++
done

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、如何给网络接口配置多个地址,有哪些方式?


1)使用ifconfig命令临时添加
[root@localhost ~]# ifconfig eth0:1 192.168.200.200 netmask 255.255.255.0

2)使用ifconfig命令临时添加
[root@localhost ~]# ip addr add 192.168.100.100/24 dev eth0 label eth0:0

3)创建配置文件方法
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:1

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


  • ifconfig命令

               ifconfig [interface]           查看网络接口信息
               ifconfig IFACE [up|down]       打开或关闭网络接口
               ifconfig IFACE IP/mask [up]    修改接口ip信息并启用
    
               示例:   
               [root@localhost ~]# ifconfig -a
               [root@localhost ~]# ifconfig eth0 down
  • route命令

                route -n                  查看路由信息
                route add  [-net|-host]  target [netmask Nm] [gw Gw] [[dev] If]
                                          添加路由信息
    
    
                示例:
                目标:192.168.200.200  网关:192.168.82.1
                [root@localhost ~]# route add -host 192.168.200.200 
                                    gw 192.168.82.1 dev eth0
    
                目标:192.168.200.0 网关:192.168.82.1
                [root@localhost ~]# route add -net 192.168.200.0 netmask 255.255.255.0 
                                    gw 192.168.82.1 dev eth0
                [root@localhost ~]# route add -net 192.168.200.0/24 
                                    gw 192.168.82.1 dev eth0
    
                默认路由,网关:192.168.82.1
                [root@localhost ~]# route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.82.1
                [root@localhost ~]# route add default gw 192.168.82.1
    
                route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If] 
                                         删除路由信息
    
    
                示例:   
                目标:192.168.200.200  网关:192.168.82.1
                [root@localhost ~]# route del -host 192.168.200.200
    
                目标:192.168.200.0 网关:192.168.82.1
                [root@localhost ~]# route del -net 192.168.200.0 netmask 255.255.255.0
  • netstat命令:

                显示网络连接:
                        -t: tcp协议相关
                        -u: udp协议相关
                        -w: raw socket相关
                        -l: 处于监听状态
                        -a: 所有状态
                        -n: 以数字显示IP和端口;
                        -e:扩展格式
                        -p: 显示相关进程及PID
                显示路由表:
                    netstat  {--route|-r} [--numeric|-n]
                        -r: 显示内核路由表
                        -n: 数字格式
    
                显示接口统计数据:
                    netstat  {--interfaces|-I|-i} [iface] [--all|-a] 
                             [--extend|-e] [--program|-p] [--numeric|-n] 
    
                示例:
                打印网络接口信息
                [root@localhost ~]# netstat -i

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


rpm软件包管理:

安装:-ivh, –nodeps, –replacepkgs
卸载:-e, –nodeps
升级:-Uvh, -Fvh, –nodeps, –oldpackage
查询:-q, -qa, -qf, -qi, -qd, -qc, -q –scripts, -q –changlog, -q –provides, -q –requires
校验:-V
导入GPG密钥:–import, -K, –nodigest, –nosignature
数据库重建:–initdb, –rebuilddb


yum软件包管理:

yum repolist [all|enabled|disabled]
显示程序包:
yum list [all | glob_exp1] [glob_exp2] […]
yum list {available|installed|updates} [glob_exp1] […]
安装程序包: 
yum install package1 [package2] […]
yum reinstall package1 [package2] […] (重新安装)
升级程序包:
yum update [package1] [package2] […]
yum downgrade package1 [package2] […] (降级)
检查可用升级:
yum check-update
卸载程序包:
yum remove | erase package1 [package2] […]
查看程序包information:
yum info […]
查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides | whatprovides feature1 [feature2] […]
清理本地缓存:
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
构建缓存:
yum makecache

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


1.创建挂载的文件夹
[root@localhost ~]# mkdir /mnt/cdrom
2.挂载光盘到需要挂载到的文件夹
[root@localhost ~]# mount /dev/cdrom  /mnt/cdrom/
3.创建yum仓库的配置文件
[root@localhost ~]# vim /etc/yum.repos.d/iso.repo
    [cdrom]
    name=cdrom
    baseurl=file:///mnt/cdrom
    enabled=1
    gpgcheck=0
4.清理yum缓存
[root@localhost ~]# yum clean all
5.重建yum缓存
[root@localhost ~]# yum makecache

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

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

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

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

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


[root@localhost ~]# cat KandS.sh 
#!/bin/bash
#
declare -i Kcount=0
declare -i Scount=0
for i in `ls /etc/rc.d/rc3.d/ | grep ^K `;do
    echo $i stop
    let Kcount++
done
for i in `ls /etc/rc.d/rc3.d/ | grep ^S `;do
    echo $i start
    let Scount++
done
echo K:$Kcount
echo S:$Scount

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

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

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


[root@localhost ~]# cat countID.sh 
#!/bin/bash
#
declare -i idcount=1
if [ $# -le 0 ];then
    echo "Usage:$0:User1 User2 ...."
    exit 1
fi
for i in $*;do
    id $i &>/dev/null && let idcount+=$[`id -u $i`] || echo "No user:$i"
done
echo idcount:$[$idcount-1]


注:这题中root的id为0,let idcount+=$[`id -u $i`]后直接执行echo "No user:$i",
    所以只好让idcount先为1,最后算出id的和之后再减去1。

14、写一个脚本

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

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

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


[root@localhost ~]# cat filetype.sh 
#!/bin/bash
#
declare -i dcount=0
declare -i tycount=0
declare -i a=0
declare -i b=0
declare -i c=0
declare -i d=0
declare -i e=0
declare -i f=0
declare -i g=0
declare -i h=0
if [ $# -le 0 ];then
    echo "Usage:$0 dir1 dir2 ..."
    exit 1
fi
for i in $*;do
    [[ ! -d $i ]] && echo "$i not DIR,Usage:$0 dir1 dir2 ..." && continue
    for j in `ls $i`;do
        filetype=`ls -ld $i/$j | cut -c1`
        case $filetype in
        d) echo $i/$j is dir;let dcount++;let a=1 ;;
        l) echo $i/$j is link;  let b=1 ;;
        s) echo $i/$j is socket;let c=1 ;;
        b) echo $i/$j is banary;let d=1 ;;
        c) echo $i/$j is char;  let e=1 ;;
        p) echo $i/$j is pipe;  let f=1 ;;
        -) echo $i/$j is file;  let g=1 ;;
        *) echo $i/$j is other; let h=1 ;;          
        esac        
    done
done
echo Dir count:$dcount
echo Filetype:$[$a+$b+$c+$d+$e+$f+$g+$h]

15、写一个脚本

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

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


[root@localhost ~]# cat user500.sh 
#!/bin/bash
#
[[ $# -le 0 ]] && echo "Usage:$0 Username1" && exit 1
id $1&>/dev/null && [ $[`id -u $1`] -ge 500 ] 
[ $? -eq 0 ] && echo $1 is common user. || echo $1 is sysuser or no user.

16、写一个脚本

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

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

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


[root@localhost ~]# cat useradd1.sh 
#!/bin/bash
#
declare -i usercount=0
for i in {1..10};do
    ! id user$i &>/dev/null && useradd user$i && echo user$i | passwd --stdin user$i &>/dev/null 
    [ $? -eq 0 ]&& let usercount=$usercount+1 && echo "user$i add." || echo "user$i exists."
done
echo Add user count:$usercount

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


[root@localhost ~]# cat ping2.sh 
#!/bin/bash
#
declare -i i=20
net=172.16.250
while [ $i -le 100 ];do
    if ping -c 1 -w 1 $net.$i &> /dev/null;then
        echo "$net.$i is up"
    fi
    let i++
done

18、打印九九乘法表;


[root@localhost ~]# cat 991.sh 
#!/bin/bash
for i in {1..9};do
    for j in $(seq 1 $i);do
        echo -n -e "$j*$i=$[$i*$j]\t "
    done
    echo
done

原创文章,作者:N21_孤狼,如若转载,请注明出处:http://www.178linux.com/57266

(0)
上一篇 2016-11-14 08:28
下一篇 2016-11-14 08:29

相关推荐

  • class13 shell编程(五)软件包管理(三)

    一、shell编程(五) 位置变量补充 shift (踢掉参数) shift                #! /bin/bashecho "1st arg …

    Linux干货 2016-08-24
  • sed命令的用法和vim编辑器的使用

    一、文本处理工具sed sed [option]….'script] [input-file]… 简介: sed是一种流编辑器,他一次处理一行的内容,处理时把当前处理的行存储在临时缓冲区中,这个缓冲区被称为模式空间,接着用sed命令处理,处理完成后把模式空间的内容送往屏幕,接着处理下一行,知道文件末尾,而文件的内容…

    Linux干货 2016-08-15
  • N28-第三周博客作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。
    2、取出最后登录到当前系统的用户的相关信息。
    3、取出当前系统上被用户当作其默认shell的最多的那个shell。
    4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
    5、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。
    6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。
    7、显示/var目录下一级子目录或文件的总个数。
    8、取出/etc/group文件中第三个字段数值最小的10个组的名字。
    9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
    10、请总结描述用户和组管理类命令的使用方法并完成以下练习:
    (1)、创建组distro,其GID为2016;
    (2)、创建用户mandriva, 其ID号为1005;基本组为distro;
    (3)、创建用户mageia,其ID号为1100,家目录为/home/linux;
    (4)、给用户mageia添加密码,密码为mageedu;
    (5)、删除mandriva,但保留其家目录;
    (6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
    (7)、修改slackware的默认shell为/bin/tcsh;
    (8)、为用户slackware新增附加组admins;

    Linux干货 2017-12-19
  • 107-tomcat

    一.编程语言基础  1.1 编程语言: 硬件级:微码编程,汇编语言 系统级:C,C++,…

    2016-12-02
  • heartbeat实现高可用集群(1)

    环境 node1 192.168.1.35 node2 192.168.1.36 fip 192.168.1.80 daemon httpd nfs 192.168.1.15 配置HA集群的前提 1.节点时间必须同步,使用ntp协议实现 2.节点间需要通过主机互相通信,必须解析主机名至IP地址 a.建议名称解析功能能使用hosts文件实现 b.通信中使用的名…

    Linux干货 2017-11-03
  • 任务计划

                          Linux任务计划 一、任务计划     (1)未来的某一个时间点执行一次某任务:at、batch     (2)周期性运行某…

    2017-05-14

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-16 15:44

    写的很好,希望你这从Linux小白到大牛——与狼共舞的日子可以继续下去,期待你后面的作业