马哥教育网络班22期+第八周课程练习

1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。
    网桥:工作在OSI模型的数据链路层,将两个局域网连起来,根据MAC地址来转发帧,可以看作是一个“低层的路由器”(路由器工作在OSI模型的网络层,根据网络地址如IP地址进行转发)。它可以有效地联接两个LAN,使本地通信限制在本网段内,并转发相应的信号至另一网段,网桥通常用于联接数量不多的、同一类型的网段。
    集线器:主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上,属于OSI的第一层物理层设备,其工作方式采用“广播”模式,因此很容易产生“广播风暴”,大部份集线器已被交换机取代。适用于小型局域网主机互联。
    二层交换机:工作于OSI模型的第二层,属于数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中,能够隔离冲突域和有效抑制“广播风暴”的产生。适用于中、小型局域网设备互联,或大型局域网接入层或汇聚层的设备接入。
    三层交换机:具有部分路由器功能的交换机,其目的是加快大型局域网内部的数据交换,能够做到一次路由,多次转发。三层交换技术就是二层交换技术+三层转发技术。传统交换技术是在OSI网络标准模型第二层——数据链路层进行操作的,而三层交换技术是在网络模型中的第三层实现了数据包的高速转发,既可实现网络路由功能,又可根据不同网络状况做到最优网络性能。适用于中、大型局域网汇聚层或局域网出口。
    路由器:其功能是决定最优路由和转发数据包。路由表中写入各种信息,由路由算法计算出到达目的地址的最佳路径,然后由相对简单直接的转发机制发送数据包。接受数据的下一台路由器依照相同的工作方式继续转发,依次类推,直到数据包到达目的路由器
其工作模式与二层交换机相似,但路由器工作在OSI模型的第三层——网络层,这个区别决定了路由和交换机在传递包时使用不同的控制信息,实现功能的方式就不同。适用于局域网间互联,局域网与城域网互联互通。

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

类别 IP地址范围
子网掩码 作用
A类 1.0.0.0-127.255.255.255 255.0.0.0(/8) 大型网络
B类 128.0.0.0-191.255.255.255 255.255.0.0(/16) 中型网络
C类 192.0.0.0-223.255.255.255 255.255.255.0(/24) 小型网络
D类 224.0.0.0-239.255.255.255 组播
E类 240.0.0.0-255.255.255.255 科研

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

OSI模型 TCP/IP模型 功能 涉及协议或物理设备
应用层(Application Layer) 应用层 访问网络服务的接口 Telnet、FTP、HTTP、SNMP、DNS等
表示层(Presentation Layer) 提供数据格式转换服务 URL加密、口令加密、图片编解码等
会话层(Session Layer) 建立端连接并提供访问验证和会话管理 服务器验证用户登录、断点续传等
传输层(Transport Layer) 传输层 提供应用进程之间的逻辑通信 TCP、UDP、SPX、进程、端口等
网络层(Network Layer) 网络层 为数据在结点之间传输创建逻辑链路,并且组转发数据 路由器、多层交换机、防火墙,IP、IPX、RIP、DSPF等
数据链路层(Data Link Layer) 网络接口层 在通信的实体间建立数据链路连接 网卡、网桥、二层交换机等
物理层(Physical Layer) 为数据端设备提供原始比特流的传输的通路 中继器、集线器、网线、HUB,RJ-45标准等

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

#编辑网卡配置文件,以下以CentOS 7为例:
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
#修改配置为手动指定ip地址,并设置ip地址、子网掩码、网关、DNS
BOOTPROTO="static"
IPADDR=192.168.0.86
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.1
#重启网络服务即可
[root@localhost ~]# systemctl restart network.service

5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。
    (1)使用命令行配置,立即生效

#设置ip地址、子网掩码、网关
1)ifcfg家族命令:
    ifconfig eth1 192.168.0.20 netmask 255.255.255.0 或 ifconfig eth1 192.168.0.20/24
    route add default gw 192.168.0.1
2)iproute2家族命令:
    ip addr add 192.168.0.100/24 dev eth1
    ip route add default via 192.168.0.1
#配置DNS服务器
编辑配置文件:/etc/resolv.conf
nameserver 192.168.0.1

    (2)修改网卡配置文件

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
#修改配置为手动指定ip地址,并设置ip地址、子网掩码、网关、DNS
BOOTPROTO="static"
IPADDR=192.168.0.86
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.1
#重启网络服务即可
[root@localhost ~]# systemctl restart network.service

    (3)使用图形化工具配置
        CentOS 6:system-config-network(setup)
        CentOS 7:nmtui
        注意:修改完成后需要重启网络服务

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

#!/bin/bash
for i in {1..254}; do
    if ping -W 1 -c 1 172.16.250.$i &> /dev/null; then
        echo -e "\033[32m 172.16.250.$i \033[0m"
    else
        echo -e "\033[31m 172.16.250.$i \033[0m"
    fi
done

7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值。
    ifcfg-IFACE配置文件参数:
        DEVICE:此配置文件对应的设备名称
        ONBOOT:在系统引导过程中,是否激活此接口
        UUID:此设备的唯一标识
        IPV6INIT:是否初始化IPV6
        BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp、bootp、static、none
        TYPE:接口类型,常见的有Ethernet,Bridge
        DNS1:第一DNS服务器指向
        DNS2:备用DNS服务器指向
        DOMAIN:DNS搜索域
        IPADDR:IP地址
        NETMASK:子网掩码;CentOS 7支持使用PREFIX以长度方式指明子网掩码
        GATEWAY:默认网关
        USERCTL:是否允许普通用户控制此设备
        PEERDNS:如果BOOTPROTO的值为"dhcp",是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的DNS服务器指向;默认为允许
        HWADDR:设备的MAC地址
        NM_CONTROLLED:是否使用NetworkManager服务来控制接口

8、如何给网络接口配置多个地址,有哪些方式?
    (1)使用命令行配置,立即生效

~]# ip addr add 192.168.20.190/24 dev eno16777736 或
#为指定网卡添加别名
~]# ip addr add 192.168.20.191/24 dev eth1 label eth1:0 或
~]# ifconfig eth0:0 192.168.20.192/24

    (2)添加网卡别名配置文件,需要重启网络服务

~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736:0
DEVICE="eno16777736:0"
BOOTPROTO="static"
IPADDR=192.168.0.22
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.1

9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。
    ifconfig命令:接口及地址查看和管理
        ifconfig -a:显示所有接口,包括inactive(非激活)状态的接口
        ifconfig IFACE IP/MASK [up|down] 设置IP地址
            ~]# ifconfig eth1 192.168.100.20/24
        ifconfig IFACE_LABEL IP/MASK  设置网卡别名地址
            ~]# ifconfig eth1:1 192.168.101.20/24

    route命令:路由查看及管理
        route -n:查看路由信息
        route add [-net|-host] target [netmask Nm] [gw GW] [[dev] If] 添加路由条目
            ~]# route add -net 10.0.0.1/8 gw 192.168.10.1 dev eth1
            ~]# route add default gw 192.168.10.1
        route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If] 删除路由表
            ~]# route del -net 10.0.0.0/8 gw 192.168.10.1
            ~]# route del default

    netstat命令:Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
        显示路由表:netstat -rn
                -r:routing,显示内核路由表
                -n:数字格式
        显示网络连接:
            语法格式:netstat [–tcp|-t] [–udp|-u] [–udplite|-U] [–sctp|-S] [–raw|-w] [–listening|-l] [–all|-a] [–numeric|-n] [–extend|-e[–extend|-e]] [–program|-p]
                -t:TCP协议的相关连接,连接均有其状态,此处仅显示ESTABLISHED(已建立的)连接状态;FSM(Finite State Machine)
                -u:UDP协议的相关连接
                -w:raw socket(裸套接字)相关的连接
                -l:处于监听(LISTEN)状态的连接
                -a:所有状态的连接
                -n:以数字格式显示IP和Port
                -e:扩展格式
                -p:显示相关的进程及PID(只有root用户才能显示,普通用户显示为-)
        常用组合:
                    -tan,-uan,-tnl,-unl,-tunlp

    ifup/ifdown命令:
        语法格式:ifup/ifdown IFACE 启用/禁用指定接口
            注意:此命令通过配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE来识别接口并完成配置

    ip命令:show / manipulate routing, devices, policy routing and tunnels
        语法格式:ip [ OPTIONS ] OBJECT { COMMAND | help }
                OBJECT := { link | addr | route | netns }
                   注意: OBJECT可简写,各OBJECT的子命令也可简写
        ip OBJECT:
                ip link:network device configuration
                    ip link set – change device attributes
                        dev NAME (default):指明要管理的设备,dev关键字可省略
                        dev up/down:启用/禁用指定网卡
                        multicast on/multicast off:启用或禁用多播功能
                        name NAME:重命名接口
                        mtu NUMBER:设置MTU的大小,默认为1500
                        netns PID:ns为namespace,用于将接口移动到指定的网络名称空间
                            ~]# ip link set eth1 netns mynetns
                    ip link show – display device attributes
                    ip link help – 显示简要使用帮助
                ip netns – manage network namespaces
                    ip netns list:列出所有的netns
                    ip netns add NAME:创建指定名称的netns
                    ip netns del NAME:删除指定名称的netns
                    ip netns exec NAME COMMAND:在指定的netns中运行命令
                        ~]# ip netns exec mynetns ip link show
                ip-address – protocol address management
                    ip address add – add new protocol address
                        ip addr add IPADDR dev IFACE
                            ~]# ip addr add 192.168.10.100/24 dev eth1
                                [label NAME] 为额外添加的地址指明接口别名
                                    ~]# ip addr add 192.168.0.32/24 dev eno16777736 label eno16777736:0
                                [broadcast ADDRESS] 广播地址;会根据IP和NETMASK自动计算得到
                                [scope SCOPE_VALUE]
                                    global:全局可用
                                    link:接口可用
                                    host:仅本机可用
                    ip address delete – delete protocol address
                        ip addr del IPADDR dev IFACE
                    ip address show – look at protocol addresses
                        ip addr show/list [IFACE] 显示指定接口的地址
                    ip address flush – flush protocol addresses 清空ip地址
                        ip addr flush dev IFACE
                ip route – routing table management
                ip route change – change route
                ip route replace – change or add new one
                    ip route add – add new route
                        ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
                            ~]# ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1 src 10.0.20.100
                            ~]# ip route add default via 192.168.0.1 添加默认路由
                    ip route delete – delete route
                        ip route del TYPE PREFIX
                            ~]# ip route delete 192.168.1.0/24
                    ip route show – list routes
                        ip route show TYPE PREFIX
                    ip route flush – flush routing tables 清空路由表
                        ip route flush TYPE PREFIX
                    ip route get – get a single route
                        ip route get TYPE PREFIX
                            ~]# ip route get 192.168.0.0/24

    ss命令:another utility to investigate sockets
            语法格式:ss [options] [ FILTER ]
                选项:
                    -t:tcp协议的相关连接
                    -u:udp协议的相关连接
                    -w:raw socket相关的连接
                    -l:监听状态的连接
                    -a:所有状态的连接
                    -n:数字格式
                    -p:相关的程序及其PID
                    -e:扩展格式信息
                    -m:内存用量
                    -o:计时器信息
                FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
                TCP的常见状态:
                    TCP FSM:
                        LISTEN:监听
                        ESTABLISHED:已建立的连接
                        FIN_WAIT_1:
                        FIN_WAIT_2:
                        SYN_SENT:
                        SYN_RECV:
                        CLOSED:
                    ~]# ss state time-wait
                EXPRESSION:
                    dport(目标端口)=
                    sport(原端口)=
                        示例:'( dport = :ssh or sport = :ssh )'
                            ~]# ss -tan '( dport = :22 or sport = :22 )'
                            ~]# ss -tan state ESTABLISHED

    nmcli命令:command‐line tool for controlling NetworkManager
        语法格式:nmcli [ OPTIONS ] OBJECT { COMMAND | help }
            device – show and manage network interfaces
                COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }
            connection – start, stop, and manage network connections
                COMMAND := { show | up | down | add | edit | modify | delete | reload | load }
                modify [ id | uuid | path ] <ID> [+|-]<setting>.<property> <value>
                如何修改IP地址等属性:
                    nmcli conn modify IFACE [+|-]setting.property value
                        ipv4.address
                        ipv4.gateway
                        ipv4.dns1
                        ipv4.method
                                manual

10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。
    rpm命令:
        安装:
            rpm {-i|–install} [install-options] PACKAGE_FILE …
                rpm -ivh PACKAGE_FILE …
                GENERAL OPTIONS 通用选项:
                    -v:verbose,详细信息
                    -vv:更详细的输出
                [install-options]
                    -h:hash marks输出进度条;每个#表示2%的进度
                    –test:测试安装不会真正安装,检查并报告依赖关系及冲突消息等
                    –nodeps:忽略依赖关系(不建议使用)
                    –replacepkgs:重新安装
                    –nosignature:不检查包签名信息
                    –nodigest:不检查包完整性信息
        升级:
            rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
            rpm {-F|–freshen} [install-options] PACKAGE_FILE …
                -U:升级或安装
                -F:升级(必须有老版本作为依赖)
                rpm -Uvh PACKAGE_FILE …
                rpm -Fvh PACKAGE_FILE …
                    –oldpackage:降级安装
                    –force:强制升级
        卸载:
            rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts][–test] PACKAGE_NAME …
                –allmatches:卸载所有匹配指定名称的程序包的各版本
                –nodeps:忽略依赖关系
                –test:测试卸载,dry run模式

    yum命令:
        安装程序包:
            install package1 [package2] […]
            reinstall package1 [package2] […] 重新安装
        升级程序包:
            update [package1] [package2] […]
            downgrade package1 [package2] […] 降级程序包
        卸载程序包:
            remove | erase package1 [package2] […]

11、如何使用发行版光盘作为yum repository,请描述该过程。
    (1)挂载光盘至本地某目录
        ~]# mount -r /dev/cdrom /media
    (2)创建yum仓库配置文件
        ~]# vim /etc/yum.repos.d/cdrom.repo
            [cdrom]
            name=centos7 cdrom
            baseurl=file:///media
            enabled=1
            gpgcheck=0

12、写一个脚本,完成以下功能
   (1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;
   (2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;
   (3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;
   (4) 分别统计S开头和K开头的文件各有多少;

#!/bin/bash
declare -i K_files=0
declare -i S_files=0
for i in $(ls /etc/rc.d/rc3.d | grep "^K");do
    echo "$i"stop
    let K_files++
done
for j in $(ls /etc/rc.d/rc3.d | grep "^S");do
    echo "$j"start
    let S_files++
done
echo "K开头的文件有$K_files个"
echo "S开头的文件有$S_files个"

13、写一个脚本,完成以下功能
   (1) 脚本能接受用户名作为参数;
   (2) 计算此些用户的ID之和;

#!/bin/bash
declare -i id_sum=0
for i in $*;do
    if id $i &> /dev/null;then
        id_sum=$[$id_sum+$(id -u $i)]
    else
        echo "user $i is not existed!"
        exit 1
    fi
done
echo "这些用户ID之和为:$id_sum"

14、写一个脚本
   (1) 传递一些目录给此脚本;
   (2) 逐个显示每个目录的所有一级文件或子目录的内容类型;
   (3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;

#!/bin/bash
declare -i dir_counts=0
declare -i file_counts=0
for i in $*;do
    echo "$i: "
    for filename in $i/*; do
        if [ -f $filename ];then
            echo "$filename common file"
        elif [ -d $filename ];then
            echo "$filename directory file"
            dir_counts+=1
            continue
        elif [ -b $filename ];then
            echo "$filename block device file"
        elif [ -c $filename ];then
            echo "$filename character device file"
        elif [ -L $filename ];then
            echo "$filename symbolic link file"
        elif [ -p $filename ];then
            echo "$filename pipe file"
        elif [ -S $filename ];then
            echo "$filename socket file"
        else
            echo "$filename unknow"
        fi
        file_counts+=1
    done
done
echo "一共有$dir_counts个目录"
echo "一共有$file_counts个文件"

15、写一个脚本
  通过命令行传递一个参数给脚本,参数为用户名;
  如果用户的id号大于等于500,则显示此用户为普通用户;

#!/bin/bash
if id $1 &> /dev/null;then
    if [ $(id -u $1) -gt 500 ];then
        echo "$1 is common user!"
    fi
else
    echo "user $1 is not existed!"
fi

16、写一个脚本
   (1) 添加10用户user1-user10;密码同用户名;
   (2) 用户不存在时才添加;存在时则跳过;
   (3) 最后显示本次共添加了多少用户;

#!/bin/bash
declare -i addsum=0
for i in $(seq 1 10);do
    if id user$i &> /dev/null;then
        echo "user$i is existed!"
    else
        adduser user$i
        echo "user$i" | passwd --stdin $i &> /dev/null
        addsum+=1
    fi
done
echo "本次共添加了$addsum个用户"

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

#!/bin/bash
for i in $(seq 20 100); do
    if ping -W 1 -c 1 172.16.250.$i &> /dev/null; then
        echo 172.16.250.$i
    fi
done

18、打印九九乘法表。

#!/bin/bash
echo "-------------for-------------"
for i in `seq 1 9`;do
    for j in `seq 1 $i`;do
        list_01=$[ $i * $j ]
        echo -n "$i*$j=$list_01 "
    done
    echo " "
done

echo "-------------while-------------"
declare -i m=1
while [ $m -ge 1 -a $m -le 9 ];do
    declare -i n=1
    while [ $n -ge 1 -a $n -le $m ];do
        list_02=$[ $m * $n ]
        echo -n "$m*$n=$list_02 "
        let n++
    done
    let m++
    echo  " "
done

echo "-------------until-------------"
declare -i x=1
until [ $x -lt 1 -o $x -gt 9 ];do
    declare -i y=1
    until [ $y -lt 1 -o $y -gt $x ];do
        list_03=$[ $x * $y ]
        echo -n "$x*$y=$list_03 "
        let y++
    done
    let x++
    echo  " "
done

原创文章,作者:萝卜,如若转载,请注明出处:http://www.178linux.com/57505

(0)
萝卜萝卜
上一篇 2016-11-17
下一篇 2016-11-18

相关推荐

  • 2016/08/21:shell遗留select,包管理器rpm,yum

    select:搭配case更好的显示选项     这个命令用来创建菜单,按数字排列,并等待用户输入,输入对应数字,执行相应操作,更清楚明了     普通版:select var in list        &…

    Linux干货 2016-08-24
  • mysql-proxy 读写分离

    1. 简介     mysql-proxy 是官方为此的一个测试,项目, 可以完成读写分离。但是项目目前还不是很成熟,这里仅作测试。  2. mysql-proxy安装部署 # wget http://downloads.mysql.com/archives/get/file/mysql-…

    Linux干货 2015-12-21
  • grep正则表达式

    grep:这是一个搜索命令,搜文本并且将文本行显示出来 (1)grep -i 表示搜索的时候忽略大小写 (2)grep –colour 表示搜索关键字带颜色 例如:grep –colour ‘root’ /etc/passwd 显示为在etc的passwd里的 root 选项有颜色 *为了方便我们可以定义个别名,让他搜索的时候默认显示为带颜色 alias…

    Linux干货 2017-07-29
  • 通过Nginx来安装一个Discuz

    这次由于时间有限,所以我就没有用编译安装来启动LMP,只有Nginx 是编译安装的 因为是在centos7上面安装的Nginx所以我们这里由于能力有限,暂时不能将其加入开机启动,日后我会进行改进,将其加入开机启动。这里我们给出Nginxd的编译选项及环境   yum groupinstall "Development&…

    Linux干货 2016-10-30
  • 马哥教育网络班21期-第三周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who|cut -d" " -f1|uniq -c|awk '{print $2}' 2、取出最后登录到当前系统的用户的相关信息。 last |awk 'NR==1{print $0}' last |sed -n &…

    Linux干货 2016-07-29
  • 用户及权限管理 (Blog 1)

    用户、权限相关概念及用户管理类命令

    2017-11-06

评论列表(1条)

  • luoweiro
    luoweiro 2016-11-29 22:15

    整体非常棒,尤其是后面脚本部分,另外对于网络方面,希望能对tcp/ip和osi有对比总结,并借助抓包工具做一分析,这部分在lvs内容中还是需要掌握的。