Homework Week-8 网络及脚本编程

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

设备

功能

使用场景

网桥

用于连接不同网段,将相似的网络连接起来,隔离信息。

连接不同部门间的局域网;连接地理位置分散并且相距较远的局域网,可以增加工作的物理距离;采用由网桥连接的多个局域网调节负载;网桥可以设置在局域网的关键部位,防止单点失常而破坏整个系统等。

集线器

对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。发送的数据没有针对性,而是采用广播方式发送。

局域网中

二层交换机

工作于OSI模型的第二层,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。

三层交换机

OSI模型中第三层实现数据包的高速转发,既可实现网络路由功能,又可根据不同网络状态做到最优网络性能。

核心骨干网

路由器

连接不同的网络

局域网、广域网中

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

类别

IP地址范围

子网掩码

私有IP地址范围

A

0.0.0.0-127.255.255.255

255.0.0.0

10.0.0.0-10.255.255.255

B

128.0.0.0-191.255.255.255

255.255.0.0

172.16.0.0-172.31.255.255

C

192.0.0.0-223.255.255.255

255.255.255.0

192.168.0.0-192.168.255.255

IP地址与子网掩码按位进行“与”运算可以得出设备所在的网络地址

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

OSI模型七层

功能

物理设备

应用层 Application

网络服务与使用者应用程序间的一个接口

终端设备(PC、手机、平板等)

表示层 Presentation

数据表示、数据安全、数据压缩

终端设备(PC、手机、平板等)

会话层 Session

会话层连接到传输层的映射;会话连接的流量控制;数据传输;会话连接恢复与释放;会话连接管理、差错控制

终端设备(PC、手机、平板等)

传输层 Transport

用一个寻址机制来标识一个特定的应用程序(端口号)

终端设备(PC、手机、平板等)

网络层 Network

基于网络层地址(IP地址)进行不同网络系统间的路径选择

路由器

数据链路层 Data Link

在物理层上建立、撤销、标识逻辑链接和链路复用 以及差错校验等功能。通过使用接收系统的硬件地址或物理地址来寻址

网桥、交换机

物理层Physical

建立、维护和取消物理连接

光纤、同轴电缆、

双绞线、网卡、中继器

 

TCP/IP模型四层

功能

应用层

为用户提供所需要的各种服务,例如:FTPTelnetDNSSMTP

传输层

应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议TCP)和用户数据报协议UDP)

网际互联层

主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。注重重新赋予主机一个IP地址来完成对主机的寻址,它还负责数据包在多种网络中的路由。该层有三个主要协议:网际协议IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP

网络接入层

网络接入层与OSI参考模型中的物理层数据链路层相对应。它负责监视数据在主机和网络之间的交换

 

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

1编辑ifcfg-eno16777736文件如下:
# vim  /etc/sysconfig/network-scripts/ifcfg-eno16777736
DEVICE="eno16777736"
TYPE="Ethernet"
UUID="414bf4dd-3cbd-466a-b48b-da00c3f790aa"
ONBOOT=yes
BOOTPROTO=static
DNS1=114.114.114.114
IPADDR=192.168.1.103
NETMASK=255.255.255.0
GETWAY=192.168.1.1
NETWORK=192.168.1.0
BROADCAST=192.168.1.255

2保存文件并退出

3重启网络服务
#service network restart

4ping网关
#ping 192.168.1.1

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

1通过配置文件配置(/etc/sysconfig/network-scripts/ifcfg-eno16777736)

2Linux安装时进行配置

3通过图形化界面配置

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

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

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

#!/bin/bash
#Elephant
for i in {1..254} ; do
         ping -c 1 172.16.250.$i | grep "Unreachable" >> /dev/null
         if [ $? -eq 0 ] ; then
                 echo -e "\033[31m172.16.250.$i\033[0m"
         else
                 echo -e "\033[32m172.16.250.$i\033[0m"
         fi
done

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

网络接口配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE,IFACE:接口名称;

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

给接口配置多个地址:

ip addr之外,ifconfig或配置文件都可以;
(1) ifconfig  IFACE_LABEL  IPADDR/NETMASK
  IFACE_LABEL: eth0:0, eth0:1, ...
(2) 为别名添加配置文件;
  DEVICE=IFACE_LABEL
  BOOTPROTO:网上别名不支持动态获取地址;
    static, none

 

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

ifconfig命令
#ifconfig  激活状态  UP处于激活
#ifconfig eno1677736
#ifconfig -a 所有接口,含非激活状态
#ifconfig  eno16777736  192.168.1.103/24 up
#ifconfig  eno16777736  192.168.1.103  netmask  255.255.255.0
#ifconfig eth1  promisc  混杂模式
#ifconfig  eth1  -promisc

route命令
#route -n 数字格式显示路由信息
#route
#route  add  -net  10.0.0.0/8  gw  192.168.10.1  dev  eth1
#route  del  -net  10.0.0.0/8
#route  del  default  删除默认网关

netstat命令
#netstat  -rn
#route  -n 以上两命令相似
#netstat  -t
#netstat  -tn
#netstat  -u
#netstat  -un
#netstat  -unl
#netstat  -tunl
#netstat  -tunlp
#netstat  -tan   TCP的所有状态连接
#netstat  -uan
#netstat  -tne  e扩展格式
#netstat  -tnl
#netstat  -I eth0
#netstat  -i

hostname
#hostnamectl  status
#hostnamectl  set-hostname  magedu.com

DNS
#cat /etc/hosts
#vim  /etc/hosts
添加一行
172.16.10.6  www.magedu.com   www  magedu
#ping  www.magedu.com
#ping www
#ping magedu
#dig  -t  A  www.magedu.com    #dig测试不检查hosts,ping命令先检查hosts    主机->IP
#dig  -x  101.200.188.233   IP->FQDN

——————

iproute 2家族:ipss命令

#rpm -qi  iproute
#uname  -r  显示内核版本
#rpm  -ql  iproute

 

ip命令
#ip  link  show   与ifconfig相似  二层设备相关属性
#ip  link  list
#ip  link  set  eth1  down
#ip  link  show
#ip  link  set  eth1  up
#ip  link  show
#ip  link  set  eth1  multicast  on
#ip  link  show
#ip  link  set  eth1  multicast  off
#ip  link  show
#ip  link  set  eth1  down
#ip  link  set  eth1  name  eno12
#ip  link  set  eth1  down
#ip  link  show
#ip  link  set  eth1  up

 

centos
#ip  netns  add  mynet网络名称空间
#ip  link  show
#ip  link  set  eno136777736  netns  mynet
#ip  link  show
#ip  netns  exec  mynet  ip  link  show  在空间中执行命令
#ip  netns  del  mynet 
 
#ip ad  show
#ip  ad  li
#ip  address  add  192.168.10.100/24  dev  eth1
#ifconfig  eth1  0  删地址
#ip  address  add  192.168.10.100/24  dev  eth1
#ip  addr  show  eth1
#ifconfig  eth1
#ip  address  add  192.168.10.101/24  dev  eth1
#ifconfig  eth1
#ip  addr  add  10.1.1.10/8  dev  eth1  #label  eth1:0加别名
#ip  addr  show  eth1
#ifconfig  eth1  加别名后可显示多ip
#ip  addr  list  eth1
#ip  addr  del  10.0.10.100/8  dev  eth1
#ip  addr  flush  dev  eth1
#ip  addr  show  eth1

 

ip  route  
#ip  route  list
#ip  addr add 10.0.10.100/8  dev  eth1
#ip  addr  add 10.0.20.100/8  dev  eth1
#ip  addr  list  eth1
#ip  route  add  192.168.0.0/24  via 10.0.0.1  dev  eht1
#ip  route  list
#ip  route add  192.168.1.0/24  via  10.0.0.1  dev eth1  src  10.0.20.100
#ip  route  list
#ip  route  add  default  via  172.16.0.1  dev  eth0
#ip  route  delete  192.168.1.0/24
#ip  route  show  src  172.16.100.6
#ip  route  get  192.168.0.0/24
#ip  route flush  10/8

ss命令
#ss  -tnl
#ss  -tan
#ss  -tan  state  ESTABLISHED
#ss  -tan  `(dport=:22 or sport=:22)·

network 命令
#chkconfig  --list
 
C6
#service  network  restart  修改配置文件后,重启设备
 
C7
#systemctl
 
#ip  route add  10.0.0.0/8  via  192.168.10.1  立即生效
#ip  route  list
 
#vim  route-eno33554984
10.0.0.0 via  192.168.10.1
#systemctl  restart  network.service
#ip  route  list
#vim  rote-en
ADDRESS0=20.0.0.0
NETMASK=255.0.0.0
GETWAY=192.168.10.2

nmcli(centos7)
 
#nmcli  device  status
#nmcli  device  connect  eno33554984
#nmcli  device  disconnect  eno33554984
#nmcli  conn  show
#nmcli  conn  modify  eno33554984  t  ipv4.address 192.168.30.100
#nmcli  conn  down  eno33594984
#nmcli  conn  up  eno33594984  配置生效

 

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

rpm命令:rpm  [OPTIONS]  [PACKAGE_FILE]
安装:-i, --install
升级:-U, --update, -F, --freshen
卸载:-e, --erase
查询:-q, --query
校验:-V, --verify
数据库维护:--builddb, --initdb

 

安装:
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可以自带脚本;
四类:--noscripts
preinstall:安装过程开始之前运行的脚本,%pre , --nopre
postinstall:安装过程完成之后运行的脚本,%post , --nopost
preuninstall:卸载过程真正开始执行之前运行的脚本,%preun, --nopreun 
postuninstall:卸载过程完成之后运行的脚本,%postun , --nopostun

 

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

如何使用光盘当作本地yum仓库:
        (1) 挂载光盘至某目录,例如/media/cdrom
          # mount -r -t iso9660 /dev/cdrom /media/cdrom
        (2) 创建配置文件
        [CentOS7]
        name=
        baseurl=
        gpgcheck=
        enabled=
yum的命令行选项:
--nogpgcheck:禁止进行gpg check;
-y: 自动回答为“yes”;
-q:静默模式;
--disablerepo=repoidglob:临时禁用此处指定的repo;
--enablerepo=repoidglob:临时启用此处指定的repo;
--noplugins:禁用所有插件;
例,centos7使用本地光盘yum仓库
#cd  /etc/yum.repos.d/
#vim  local.repo
[base]
name=CentOS 7 Release ...
baseurl=file:\\\media/cdrom
enabled=1
gpgcheck=0
#yum repolist

 

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

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

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

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

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

#!/bin/bash
#Elephant
ls -l /etc/rc.d/rc3.d | awk ' { if (substr($9,1,1)=="K")
                        {printf $9" stop \n";statek[$NF]++;} 
                    else if (substr($9,1,1)=="S") 
                           {printf $9" start \n";states[$NF]++;}
                    }
                END {printf "S total " length(states)"\n";
                         printf "K total " length(statek)"\n";} '

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

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

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

#!/bin/bash
#Elephant
if [ $# -eq 0 ];then
         echo "At least one user"
         exit 2
else
         declare -i sumid=0
         for user in $@;do
                   userid=$(grep "^$1\>" /etc/passwd | cut -f 3 -d:)
                   sumid=$sumid+$userid
                   shift
         done
         echo "user(s) total id is $sumid"
fi

14、写一个脚本  

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

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

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

#!/bin/bash
#Elephant
if [ $# -eq 0 ] ;then
         echo "At least one dir"
         exit 2
else
         for dir in $@ ; do
               e=""
               export e
               declare -i  countfiles=0
               export countfile
               declare -i countdirs=0
               export countdirs
               ls -l $dir | awk '{if(substr($1,1,1)=="-")
                       {
                        a="'$dir'";
                        b="/";
                        d=$9;
                        c=(a""b);
                        e=(c""d);
                        ENVIRON["e"]=e;
                        system("cat "e"");
                        ENVIRON["countfiles"]++;
                        printf "=============>"ENVIRON["e"] " is NO."ENVIRON["countfiles"]" file in ""'$dir'""\n---------------------------------------------\n";
                        }
                    else
                        if(substr($1,1,1)=="d")
                        {a="'$dir'";
                         b="/";
                         d=$9;
                         c=(a""b)
                         e=(c""d)
                        ENVIRON["e"]=e;
                        ENVIRON["countdirs"]++;
                        system("ls -l "e"");
                        printf "==============>"ENVIRON["e"]" is NO."ENVIRON["countdirs"]" dir in ""'$dir'""\n---------------------------------------------\n";
}'
        done
fi

 

15、写一个脚本

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

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

#!/bin/bash
#Elephant
if ! [ $# -eq "1" ];then
         echo "We only need one user"
         exit 2
else
         declare -i userid
         userid=$(grep "^$1\>" /etc/passwd | cut -f3 -d:)
         if [ $userid -ge 500 ];then
                   echo "$1 is a common user"
         fi
fi

16、写一个脚本  

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

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

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

#!/bin/bash
#Elephant
declare -i tt=0
for i in {1..10};do
         id user$i &> /dev/null
         if  [ $? -eq 0 ] ; then
                   echo "user$i exits "
         else
                   useradd user$i
                   let tt++
                   echo "user$i" | passwd --stdin user$i             
         fi
done
echo "We created $tt user(s)"

 

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

#!/bin/bash
#Elephant
for i in {20..100} ; do
         ping -c 1 172.16.250.$i | grep "Unreachable" >> /dev/null
         if ![ $? -eq 0 ] ; then
                   echo "172.16.250.$i"
         fi
done

 

18、打印九九乘法表;

#!/bin/bash
#Elephant
 
for i in {1..9};do
         j=1
         while [ $j -le $i ];do
                   printf "$i*$j=$[$i*$j] \t"
                   let j++
         done
         printf "\n"
done
运行结果:
1*1=1     
2*1=2      2*2=4     
3*1=3      3*2=6   3*3=9     
4*1=4      4*2=8   4*3=12   4*4=16  
5*1=5      5*2=10   5*3=15   5*4=20   5*5=25  
6*1=6      6*2=12   6*3=18   6*4=24   6*5=30   6*6=36  
7*1=7      7*2=14   7*3=21   7*4=28   7*5=35   7*6=42   7*7=49  
8*1=8      8*2=16   8*3=24   8*4=32   8*5=40   8*6=48   8*7=56   8*8=64  
9*1=9      9*2=18   9*3=27   9*4=36   9*5=45   9*6=54   9*7=63   9*8=72   9*9=81

 

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

评论列表(2条)

  • luoweiro
    luoweiro 2016-10-11 23:35

    对于TCP/IP的相关知识希望能有对建连和断开有全面的认知,整个过程还是要很熟练的,加油。

    • N22_Elephant
      N22_Elephant 2016-10-12 10:00

      @luoweiro嗯嗯,看到那块视频了,有了深入理解