首页 > 代码库 > 第八周作业
第八周作业
1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。
集线器,又称HUB,是一个多端口的转发器,起作用仅仅是对收到的信号的放大和转发,并不提供任何的其他功能。通过集线器连接的终端,都处于同一冲突域中,一旦两台终端使同时通过同一介质传输数据,会发生冲突。
网桥,二层交换机。这两个设备都是工作在数据链路层的设备。网桥就是只有2个端口的二层交换机。二层交换机,相对于集线器而言,每个端口都是一个独立的冲突域。因为不同端口之间收发数据,不会受到影响。
三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部的数据交换。相对二层交换机来说,通过VLAN技术的应用,将一个大的网络划分成多个不同的网络,各个不同VLAN间的通信都要经过三层交换机的路由功能来完成转发,三层交换机非常适用于大型局域网内的数据路由与交换,它既可以工作在协议第三层替代或部分完成传统路由器的功能,同时又具有几乎第二层交换的速度,且价格相对便宜些。
路由器
路由器工作在OSI体系结构中的网络层,在多个不同的网络上之间交换和路由数据数据包。路由器具有判断网络地址和选择IP路径的功能,能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,属于网络层的设备。路由器可以隔离冲突域和广播域。处于不同网络中的广播会被隔离,无法传至另一个网络中。
2、IP地址的分类有哪些?子网掩码的表示形式及其作用
类别 | 最大网络数 | IP地址范围 | 最大主机数 | 私有IP地址范围 |
A | 126(2^7-2) | 0.0.0.0-127.255.255.255 | 16777214 | 10.0.0.0-10.255.255.255 |
B | 16384(2^14) | 128.0.0.0-191.255.255.255 | 65534 | 172.16.0.0-172.31.255.255 |
C | 2097152(2^21) | 192.0.0.0-223.255.255.255 | 254 | 192.168.0.0-192.168.255.255 |
子网掩码是一个32位地址,是用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。
OSI七层参考模型:
(1)物理层
物理层是OSI参考模型的最低层,传送数据单位为比特流,物理链路可能是铜线、卫星、微波或其他的通讯媒介。定义了数据传输的机械、电气、功能和规程特性。
物理设备:集线器。
(2)数据链路层
数据链路层是为网络层提供服务的,传送的数据单元为数据帧。数据帧中包含MAC地址、控制码、数据及校验码等信息。该层的主要作用是通过校验、确认和反馈重发等手段,将不可靠的物理链路转换成对网络层来说无差错的数据链路。
此外,数据链路层还要协调收发双方的数据传输速率,即进行流量控制,以防止接收方因来不及处理发送方来的高速数据而导致缓冲器溢出及线路阻塞。
物理设备:网关,二层交换机
(3)网络层
网络层是为传输层提供服务的,传送的协议数据单元称为数据包或分组。该层的主要作用是通过路径选择算法将数据包送到目的地。另外,为避免通信子网中出现过多的数据包而造成网络阻塞,需要对流入的数据包数量进行控制。当数据包要跨越多个通信子网才能到达目的地时,还要解决网际互连的问题。
物理设备:路由器,三层交换机
(4)传输层
传输层传送的数据单元称为报文。传输层的作用是提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。
(5)会话层
会话层主要功能是管理和协调不同主机上各种进程之间的通信,即负责建立、管理和终止应用程序之间的会话。
(6)表示层
主要提供数据的压缩和加解密。
(7)应用层
应用层是OSI参考模型的最高层,是用户与网络的接口。该层通过应用程序来完成网络用户的应用需求,如文件传输、收发电子邮件等。
TCP/IP模型
1. 应用层
应用层对应于OSI参考模型的高层,为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等.
2. 传输层
传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP).
TCP协议提供的是一种可靠的、通过“三次握手”来连接的数据传输服务;而UDP协议提供的则是不保证可靠的(并不是不可靠)、无连接的数据传输服务.
3. 网际互联层
网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。注重重新赋予主机一个IP地址来完成对主机的寻址,它还负责数据包在多种网络中的路由。该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)。
IP协议是网际互联层最重要的协议,它提供的是一个可靠、无连接的数据报传递服务。
4. 网络接入层(即主机-网络层)
网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议(ARP)工作在此层,即OSI参考模型的数据链路层。
4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)
步骤1:编辑网卡配置文件,对于centos6来说,在/etc/sysconfig/network-scripts/ifcfg-eth0(centos6与centos7下网卡的命令方式有很区别)
步骤2:修改主要的配置信息,包括地址配置协议,IP地址,子网掩码,DNS服务器,网关等
步骤3:重启network服务
步骤4:通过ifconfig 网卡名称 查看网卡是否配置成功。ping对应网关,互联网ip,域名.验证网络是否联通。
5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。
方法1:
ifconfig #该方法即将被淘汰!
ifconfig dev IPaddress
例子: ifconfig eth0 192.168.230.116
方法2:
ip addr
ip addr add IPaddress dev 设备名 [设备标签]
例子: ip addr addr 192.168.230.116/26 dev eth0 #子网掩码不可省略!
方法3:
直接编辑网卡对应的配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0
方法4:
通过setup图形化界面编辑网络配置信息
6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;
在线的主机使用绿色显示;
不在线的主使用红色显示;
#!/bin/bash ip_addr=192.168.230. for i in {1..254};do ping $ip_addr$i -c 1 -w 1 &>/dev/null && echo -e "\033[;32m host $ip_addr$i online! \033[0m "|| echo -e "\033[;31m host $ip_addr$i offline! \033[0m" #\033[;32m与\033[0m 必须成对出现,且头部或者尾部之间不能有任何空白格! done
echo的颜色控制
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值; 网卡配置文件 ,对centos6来说,在/etc/sysconfig/network-scripts-ifcfg-eth0
CentOS 6.5下编辑网卡配置文件
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #网卡设备的名称
TYPE=Ethernet #网卡的类型
ONBOOT=yes #是否开机启动激活该网卡
NM_CONTROLLED=yes #该网卡是否接受network manager的控制,建议为no.
BOOTPROTO=none #网卡启动使用的地址配置协议,可以为none,static,dhcp
HWADDR=00:0c:29:42:ff:92 #网卡的mac地址
IPADDR=192.168.230.116 #网卡的ip地址
NETMASK=255.255.255.192 #网卡的子网掩码
GATEWAY=192.168.230.65 #网卡的网关
DNS1=202.101.224.69 #网卡的DNS地址
USERCTL=no #是否允许普通用户控制网卡
PEERDNS=yes #ONBOOT为dhcp的情况下,dhcp分配的dns服务器信息覆盖/etc/resolve.conf文件
CentOS 7.2下编辑网卡配置文件
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE="Ethernet" #网卡类型
BOOTPROTO="none" #网卡启动使用的地址配置协议,可以为none,static,dhcp
DEFROUTE="yes" #是否启用默认路由
UUID="d623db07-b48b-4a06-a117-e0128039d2f1" #网卡唯一标识符
DEVICE="eno16777736" #网卡设备名称
ONBOOT="yes" #开机是否激活网卡
IPADDR="192.168.230.117" #网卡IP地址
PREFIX="26" #网卡子网掩码
GATEWAY="192.168.230.65" #网卡的网关地址
DNS1="192.168.229.201" #网卡的DNS地址
8、如何给网络接口配置多个地址,有哪些方式?
方法1:ifconfig
例子: ifconfig eth0 add 192.168.230.116
方法2: ip addr
例子: ip addr 192.168.230.116/26 dev eth0
9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。
ping
ping 发送icmp数据包到指定主机
-c 指定发送包的次数
-i 指定发送包的间隔(秒)
-s 指定发送包的大小(字节)
-w 指明超时时间
例子:
ping -c 3 -i 5 -s 640 #向百度每隔5秒发送大小为648字节(含8字节head数据)的数据包,共发送3次
netstat 打印网络连接,路由表,接口统计,虚拟连接,多路广播
用法:-ntup 或者–ano
-n 用数字化的地址取代主机,端口或者使用者信息
-t tcp协议
-u udp协议
-l listening 监听端口
-p program 显示进程号和进程对象
-r --route 显示路由表
-I 显示接口统计数据
ss 性能上优于netstat
用法: ss [option ]….[filter]
-t tcp
-u udp
-r 裸套接字
-x unix sock相关
-a 所有
-n 数字格式
-l listening
-m 内存容量
-p 显示进程使用的套接字
fliter := [ state TCP-STATE ][EXPRESSION]
例子: ss –tan state established
‘(dport = :22 or sport= :22 )’
ss -lntp ‘( sport = :3306 )‘
10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。
方法1:通过rpm来实现
RPM安装
rpm {-i|–install}[install-options] PACKAGE_FILE
install-option包括
–test:测试安装,但不真正执行安装过程;dry run模式;
–nodeps:忽略依赖关系;
–replacepkgs: 重新安装;
–nosignature: 不检查来源合法性;
–nodigest:不检查包完整性;
–noscipts:不执行程序包脚本片断;
%pre: 安装前脚本; –nopre
%post: 安装后脚本; –nopost
%preun: 卸载前脚本; –nopreun
%postun: 卸载后脚本;–nopostun
-ivh --install--verbose—hash
-U 升级软件包(如软件包未安装,则安装)
-F 升级软件包(如软件包未安装,则不执行任何操作)
-V 软件包验证
RPM升级:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
一般我们会使用 rpm –Uvh rpm_file的命令进行安装
–upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;
–freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;
–oldpackage:降级;
–force: 强行升级;
RPM查询:
rpm {-q|–query} [select-options] [query-options]
-qa 查询已经安装的软件包
-qf 查询可执行的命令来源于哪个软件包 rpm –qf /bin/ls
-q--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供,功能同-qf
-q --whatrequiresCAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
-qi 查询软件包的详细信息
-qc 查询软件包的配置文件信息
-qd 查询软件包的帮助文档
-ql 查询软件包创建的所有文件
RPM卸载:
rpm {-e|–erase}[–allmatches] [–nodeps] [–noscripts]
[–notriggers] [–test] PACKAGE_NAME …
rpm -e zsh-4.3.10-7.el6.x86_64 可以只填zsh完成卸载,但是安装时必须填写完整的软件包的名字。
方法2:通过yum来实现
yum install httpd 安装软件包
yum remove httpd 卸载软件,保留配置文件和数据文件
yum erase httpd 卸载软件及所有数据
yum repolist 查看系统从什么仓库获取软件包
11、如何使用发行版光盘作为yum repository,请描述该过程。
[root@localhost ~]# cd /etc/yum.repos.d/ #进入yum仓库目录 [root@localhost yum.repos.d]# ll 总用量 16 -rw-r--r--. 1 root root 1926 11月 27 2013 CentOS-Base.repo -rw-r--r--. 1 root root 638 11月 27 2013 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 630 11月 27 2013 CentOS-Media.repo -rw-r--r--. 1 root root 3664 11月 27 2013 CentOS-Vault.repo [root@localhost yum.repos.d]# cp CentOS-Base.repo{,.bak} #备份原文件 [root@localhost yum.repos.d]# vim CentOS-Base.local.repo [local_repos] name=This is a local repo baseurl=file:///mnt enabled=1 gpgcheck=0 [root@localhost yum.repos.d]# yum repolist #检查配置的本地yum源 Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile local_repos | 4.0 kB 00:00 ... repo id repo name status local_repos This is a local repo 6,367 repolist: 6,367
12、写一个脚本,完成以下功能
(1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;
(2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;
(3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;
(4) 分别统计S开头和K开头的文件各有多少;
#!/bin/bash declare -i start_sum=0 declare -i stop_sum=0 for file in `ls /etc/rc.d/rc3.d/`;do if [[ $file = K* ]];then echo "$file stop" let stop_sum++ elif [[ $file = S* ]];then echo "$file start" let start_sum++ fi done echo "The sum of S_prog is $start_sum" echo "The sum of K_prog is $stop_sum"
13、写一个脚本,完成以下功
(1) 脚本能接受用户名作为参数;
(2) 计算此些用户的ID之和;
#!/bin/bash declare -i id_sum=0 for username in $@;do id $username &>/dev/null if [ $? -eq 0 ];then user_id=`grep "^$username" /etc/passwd|awk -F: ‘{print $3}‘` id_sum+=$user_id else echo "User $username does not exist!" fi done echo "The sum of all user_id is $id_sum"
14、写一个脚本
(1) 传递一些目录给此脚本;
(2) 逐个显示每个目录的所有一级文件或子目录的内容类型;
(3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;
#!/bin/bash declare -i dir_sum=0 #统计文件夹数量 declare -i type_sum=0 #统计文件类型数量 declare -A type_array #记录文件类型的关联数组 for dir in $@;do if [ -d $dir ];then for file in `find $dir -maxdepth 1`;do echo "The type is of $file is $file_type" #依次打印每个文件的文件类型 file_type=`file $file|cut -d: -f2` #取出每个文件的类型字段 let type_array[‘$file_type‘]++ #因类型字段中可能包含‘`等符号,因此此处需要用‘‘弱引用符 if [ -d $file ];then let dir_sum++ #如判断为文件夹,则计数 fi done type_sum=${#type_array[@]} echo "--------------------------------------------------------------------------------" echo "The sum of directory is $dir_sum" echo "The sum of file type in $dir is $type_sum" echo -e "Type LIST\n==================================================================" echo ${!type_array[*]} #输出关联数组的所有索引,即输出所有的文件类型,此处未研究出如何换行输出所有类型!望老师指点 else echo "$dir is not a directory!" fi done
15、写一个脚本
通过命令行传递一个参数给脚本,参数为用户名
如果用户的id号大于等于500,则显示此用户为普通用户;
#!/bin/bash for username in $@;do id $username &>/dev/null if [ $? -eq 0 ];then if [ `grep ^$username /etc/passwd|cut -d: -f3` -gt 500 ];then echo "$username is regular user" else echo "$username is system user" fi else echo "$username does not exist!" fi done
16、写一个脚本
(1) 添加10用户user1-user10;密码同用户名;
(2) 用户不存在时才添加;存在时则跳过;
(3) 最后显示本次共添加了多少用户;
#!/bin/bash declare -i user_sum=0 for i in {1..10};do id user$i &>/dev/null || let user_sum++i || useradd user$i && echo user$i|passwd --stdin user$i done echo "This shell add user $user_sum at all"
17、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;
#!/bin/bash ip=172.16.250. for i in {20..100};do ping -c 1 -w 1 $ip$i &> /dev/null if [ $? -eq 0 ];then echo "$ip$i online" else echo "$ip$i offline" fi done
18、打印九九乘法表;
#!/bin/bash for i in {1..9};do for j in `seq 1 $i` ;do echo -e -n "${j}X${i}=$[$i*$j]\t" done echo done
第八周作业