- 计算机网络实验教程
- 刘江 杨帆 魏亮 黄韬
- 5993字
- 2021-04-05 03:39:05
项目1 网络命令操作实验
项目介绍
网络命令是Linux开发中最基础的内容,通过它可以检查配置网络。熟练使用网络命令有助于开发者提高效率。本项目介绍了开发过程中常用到的网络命令,并按照难度分为简单网络命令和进阶网络命令两部分。简单网络命令部分主要介绍检测网络状况、查看网络配置的方法;进阶网络命令部分介绍网络配置、查看端口、抓包等操作命令。本项目通过对操作命令的详细介绍和相关实验操作,让读者进一步了解如何在Linux环境下操作网络。
任务一 简单网络命令
任务目的
1. 掌握简单网络命令的使用方法。
2. 学会使用简单网络命令获取网络信息,测试网络状况。
3. 掌握网络问题排查、诊断与分析的方法。
任务环境
简单网络命令实验的拓扑如图1-1所示。
图1-1 实验拓扑
实验环境镜像配置说明如表1-1所示。
表1-1 实验环境镜像配置说明
注:系统默认的账户为root/root@openlab、openlab/user@openlab。
任务内容
1. 学习每个简单网络命令的作用及参数的含义。
2. 使用命令查看网络配置、检测网络状态和跟踪路由等。
实验原理
1. ifconfig命令
ifconfig用于显示、设置、启动和停止网络设备。通过此命令能够显示出正在使用的计算机的IP地址、子网掩码和默认网关等。当网络环境发生改变时,可通过此命令对网络进行相应的配置。ifconfig命令的格式和参数解释如下。
(1)命令格式。
ifconfig [网络设备] [参数]
(2)命令参数如表1-2所示。
表1-2 ifconfig命令参数说明
2. ping命令
ping命令用于检查网络是否通畅和网络连接的速度。简单地说,网络上的机器都有唯一确定的IP地址,给目标IP地址发送一个数据包,就会返回一个同样大小的数据包,根据返回的数据包可以确定目标主机是否存在,初步判断网络是否通畅以及连接速度等信息。根据数据包返回时间和丢包率,可以大致判断网络是否稳定。ping返回的异常信息有“Request Timed Out”“Destination Host Unreachable”“Bad IP Address”和“Source Quench Received”。
(1)Request Timed Out表示对方主机可以到达但是连接超时,这种情况通常是对方拒绝接收发给它的数据包而造成的数据包丢失。原因可能是对方装有防火墙。
(2)Destination Host Unreachable表示对方主机不存在或者没有跟对方建立连接。
(3)Bad IP Address表示可能没有连接到DNS服务器,所以无法解析这个IP地址,也可能是IP地址不存在。
(4)Source Quench Received表示对方或中途的服务器繁忙无法回应。
说明:“Destination Host Unreachable”和“RequestTime Out”的区别:如果所经过路由器的路由表中有到达目标的路由,而目标因为其他原因不可到达,这时候会出现“Request Time Out”;如果路由表中没有到达目标的路由,则会出现“Destination Host Unreachable”。
ping命令的格式和参数解释如下。
(1)命令格式。
ping [参数] [主机名或IP地址]
(2)命令参数如表1-3所示。
表1-3 命令参数说明
3. traceroute命令
traceroute是用来显示源主机到目标主机之间所经过网关的命令。traceroute命令用IP生存时间(TTL)字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。首先,traceroute发送一个TTL是1的IP数据包到目的地址,当路径上的第一个路由器收到这个数据包时,TTL将会减1,此时TTL变为0,该路由器将此数据包丢弃,并返回一个ICMP time exceeded消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址)。traceroute收到这个消息后,便知道这个路由器在路径上,接着traceroute再发送一个TTL是2的数据包,继而发现第二个路由器。依此规律,traceroute每次将发送的数据包的TTL加1来发现下一个路由器,一直持续到某个数据包抵达目的地。当数据包到达目的地后,该主机不会返回ICMP time exceeded消息,此时traceroute通过UDP数据包向不常见端口(30000以上)发送数据包,会收到ICMP port unreachable消息,故可判断到达目的地。traceroute命令的格式和参数解释如下。
(1)命令格式。
traceroute[参数][主机]
(2)命令参数如表1-4所示。
表1-4 traceroute命令参数说明
4. route命令
route用于显示和操作IP路由表,它的主要作用是创建静态路由。在Linux系统中,设置路由通常是为了解决以下问题:Linux系统在一个局域网中,局域网中有一个网关,若要让机器访问Internet,就需要将网关的IP地址设置为Linux机器的默认路由。route命令的格式和参数解释如下。
(1)命令格式。
route [-f] [-p] [command] [destination] [mask netmask] [gateway] [metric] [if interface]
(2)命令参数如表1-5所示。
表1-5 route命令参数说明
说明:直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启后,该路由就失效了,可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。
实验步骤
1. ifconfig命令
步骤1 在应用菜单页面,单击终端图标,打开虚拟机终端界面,如图1-2所示。
图1-2 打开虚拟机终端界面
步骤2 执行su root命令,切换到root用户。
步骤3 执行ifconfig命令,查看网络设备信息,如下所示。
其中
• eth0表示第一块网卡。
• HWaddr表示网卡的物理地址,即MAC地址。
• inet addr表示网卡的IPv4地址。
• inet6 addr表示网卡的IPv6地址。
• Bcast表示网卡的广播地址。
• Mask表示子网掩码地址。
• UP表示网卡开启状态。
• RUNNING表示网卡的网线被接上。
• MULTICAST表示支持组播。
• MTU表示最大传输单元。
• RX packets、TX packets表示接收、发送数据包情况统计。
• RX bytes、TX bytes表示接收、发送数据字节数统计信息。
• lo表示主机的回环地址。
步骤4 执行如下命令,关闭网卡。
# ifconfig eth0 down
步骤5 执行ifconfig命令查看网络设备信息。如下所示,已无eth0网卡信息,表示eth0网卡已关闭。
步骤6 执行如下命令,开启网卡。
# ifconfig eth0 up
步骤7 执行ifconfig命令查看网络设备信息。如下所示,有eth0网卡信息,表示eth0网卡已启动。
步骤8 执行如下命令,配置IP地址等信息。
# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
其中,192.168.2.10表示IP地址,255.255.255.0表示子网掩码,192.168.2.255表示广播地址。
步骤9 执行ifconfig命令,查看配置后的网络信息,如下所示。
步骤10 执行reboot命令,重启服务器。
步骤11 执行ifconfig命令,查看配置后的网络信息,如下所示。
说明:机器重启后,配置的IP地址失效,若想将配置信息永久保存在计算机中,需要修改网卡的配置文件。
2. ping命令
步骤1 执行ping 127.0.0.1命令,ping回环地址,检查本地的TCP/IP是否设置完成,如下所示。
其中
• 64 bytes:表示本次传送的ICMP包的大小,此值为预设值。
• icmp_seq=x(x是大于1的整数):响应包的序列号,这个序列号在网络正常的情况下是连续的,如果出现不连续的情况,网络会出现丢包的情况。丢包可能是物理硬件造成的,但也可能是IP地址冲突造成的。
• ttl=64:表示IP数据包在计算机网络中存在的时间。
• time:表示服务器回应客户端的响应时间。
说明:执行Ctrl+C可停止发送数据包。
步骤2 执行ping 30.0.1.3命令,ping本机IP地址,检查本机的IP地址是否设置有误,如下所示。
说明:ping本机网关或本机IP地址,可以检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常。
步骤3 执行如下命令,通过域名ping公网上的站点,查看网络连通性,执行结果如下所示。
$ ping -c 5 www.sdnlab.com
其中,-c 5表示在发送5个数据包后停止。
说明:如果实验环境无法连接外网,则命令中的www.sdnlab.com替换为OneLab实验平台的地址。
3. traceroute命令
步骤1 执行su root命令,切换到root用户。
步骤2 执行apt-get install traceroute命令,安装traceroute工具。
说明:如果软件已经安装,将会提示“traceroute is already the newest version”的信息。
步骤3 执行traceroute www.sdnlab.com命令,追踪网络数据包的路由途径,执行结果如下所示。
说明:如果实验环境无法连接外网,则命令中的www.sdnlab.com替换为OneLab实验平台的地址。
其中
• 记录按序列号从1开始,每个记录就是一跳,每跳表示一个网关。
• 每行有3个时间,单位是ms,表示探测数据包向每个网关发送3个数据包,网关响应后返回的时间。如果用traceroute -q 4 www.sdnlab.com,表示向每个网关发送4个数据包。
步骤4 执行traceroute -m 10 www.sdnlab.com命令,设置路由追踪10条,即只发回通过10个网关的信息,如下所示。
步骤5 执行traceroute -w 3 www.sdnlab.com命令,把对外发送探测包的等待响应时间设置为3 s,如下所示。
4. route命令
步骤1 执行route命令,显示当前路由,执行结果如下所示。
其中
• Destination:表示目标网段或主机。
• Gateway:表示网关地址,“*”表示目标是本主机所属的网络,不需要路由。
• Genmask:表示网络掩码。
• Flags:表示标记。
常用标记如下:U表示路由是活动的;H表示目标是一个主机;G表示路由指向网关;R表示恢复动态路由产生的表项;D表示由路由的后台程序动态地安装;M表示由路由的后台程序修改;!表示拒绝路由。
• Metric:表示路由距离,到达指定网络所需的中转数(Linux内核中没有使用)。
• Ref:表示路由项引用次数(Linux内核中没有使用)。
• Use:表示此路由项被路由软件查找的次数。
• Iface:表示该路由表项对应的输出接口。
步骤2 执行如下命令添加网关。
# route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
步骤3 执行route命令,显示当前路由。如下所示,添加了一个224.0.0.0的路由,其中主机所在的网络地址为224.0.0.0,网络掩码为240.0.0.0,当前路由是启动状态,通过eth0转发数据包。
步骤4 执行如下命令删除路由。
# route del -net 224.0.0.0 netmask 240.0.0.0
步骤5 执行route命令,显示当前路由。
如下所示,224.0.0.0路由已被删除。
任务二 进阶网络命令
任务目的
1. 掌握进阶网络命令的基本功能。
2. 掌握使用网络命令进行网络设备配置和抓包的方法。
任务环境
进阶网络命令实验的拓扑如图1-3所示。
图1-3 实验拓扑
实验环境镜像配置说明如表1-6所示。
表1-6 实验环境镜像配置说明
注:系统默认的账户为root/root@openlab、openlab/user@openlab。
任务内容
1. 学习使用ip命令配置网络设备。
2. 学习使用netstat命令检验各端口的连接情况。
3. 学习使用tcpdump抓取数据包,并分析数据包内容。
实验原理
1. ip命令
ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新且功能强大的网络配置工具。它能够替代一些传统的网络管理工具,如ifconfig、route等,使用权限为超级用户,ip命令的格式和参数解释如下。
(1)命令格式。
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
(2)命令参数。
• OPTIONS是一些修改IP行为或者改变其输出的选项。所有的选项都是以-字符开头。目前ip命令支持如下选项,如表1-7所示。
表1-7 ip命令选项信息
• OBJECT是要管理或者获取信息的对象。目前ip命令认识的对象如表1-8所示。
表1-8 ip命令对象信息
• COMMAND设置针对指定对象执行的操作,它和对象的类型有关。目前ip命令支持的操作如表1-9所示。
表1-9 ip命令操作信息
• ARGUMENTS是命令的一些参数,它们依赖于对象和命令。目前ip命令支持两种类型的参数,如表1-10所示。
表1-10 ip命令参数信息
2. netstat命令
netstat是一个监控TCP/IP网络的命令,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。它用于显示与IP、TCP、UDP和ICMP相关的统计数据,一般用于检验本机各端口的网络连接情况。另外,它还能列出处于监听状态(即等待接入请求)的套接字。如果需要确认系统上的Web服务是否开启,可通过查看80端口监听状态的方法。netstat命令的格式和参数解释如下。
(1)命令格式。
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
(2)命令参数如表1-11所示。
表1-11 netstat命令参数解释
3. tcpdump命令
tcpdump是根据使用者的定义对网络上的数据包进行截获的包分析工具。tcpdump凭借强大的功能和灵活的截取策略,成为用于网络分析和问题排查的首选工具。tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤。
tcpdump命令的格式和参数解释如下。
(1)命令格式。
tcpdump [ -adeflnNOpqStvx ] [ -c 数量] [ -F 文件名] [ -i 网络接口] [ -r 文件名] [ -s snaplen ] [ -T 类型] [ -w文件名] [表达式]
(2)命令参数。
• tcpdump命令常用参数如表1-12所示。
表1-12 tcpdump命令参数解释
• tcpdump的过滤表达式
tcpdump的过滤表达式是一个正则表达式,tcpdump利用其作为过滤数据包的条件。如果一个数据包满足表达式的条件,则这个数据包将会被捕获;如果不指定表达式,则在网络上任何两台主机间的所有数据包都将被截获。tcpdump的过滤表达式中一般有如下3种类型的关键字。
类型关键字:包括host、net、port。
方向关键字:包括dst、src、dst or src、dst and src。
协议关键字:包括ether、fddi、tr、ip、ip6、arp、rarp、decnet、tcp和udp。
例如,tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'命令表示:抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200,端口是80的TCP数据。
实验步骤
1. ip命令
步骤1 在应用菜单页面,单击终端图标,打开终端。
步骤2 执行su root命令,切换到root用户。
步骤3 执行ip link list命令,查看网络设备的运行状态,如下所示。
其中
• lo表示主机的回环地址。
• eth0表示第一块网卡。
• UP表示网卡开启状态。
• MULTICAST表示支持组播。
• mtu表示最大传输单元。
• link/ether表示MAC地址。
步骤4 执行ip -s link list命令,查看更加详细的网络设备信息,如下所示。
其中
• RX packets、TX packets表示接收、发送数据包情况统计。
• RX bytes、TX bytes表示接收、发送数据字节数统计信息。
步骤5 执行ip addr list命令,查看IP信息,如下所示。
其中
• inet表示网卡的IPv4地址。
• inet6表示网卡的IPv6地址。
步骤6 开启或关闭网络设备。
• 执行ip link set eth0 down命令,关闭eth0网卡。
• 执行ip link list命令,查看网络设备状态,如下所示。网卡eth0的状态为down,表示关闭。
• 执行ip link set eth0 up命令,开启eth0网卡。
• 执行ip link list命令,查看网络设备状态,如下所示。网卡eth0的状态为UP,表示开启。
步骤7 执行route add default gw 30.0.1.1命令设置网关。
说明:使用ip命令关闭网卡后,默认路由也被删除,而使用ip命令启用网卡时,并不会配置路由,所以将无法ping通公网地址,故需要配置路由。
2. netstat命令
步骤1 执行netstat -a命令,查看所有端口信息,如下所示。
可以看出,netstat的输出结果分为两个部分。
• Active Internet connections,为TCP连接。其中
Proto:表示使用的通信协议。
Recv-Q和Send-Q:指接收队列和发送队列,这些数字一般都是0,如果不是,则表示软件包正在队列中堆积。
Local Address:本机提供服务的地址。
Foreign Address:连接远程主机的地址。
State:表示连接状态,LISTEN表示正在侦听端口,等待建立连接。
• Active UNIX domain sockets,为Unix域套接口。其中
Proto:表示使用的通信协议。
RefCnt:表示连接到本套接口上的进程号。
Type:显示套接口的类型。
State:显示套接口当前的状态。
Path:表示连接到套接口的其他进程使用的路径名。
步骤2 执行netstat -at命令,查看TCP连接的状态,如下所示。
步骤3 执行netstat -au命令,查看UDP连接的状态,如下所示。
步骤4 执行netstat -l命令,查看所有处于监听状态的Sockets,如下所示。
步骤5 执行netstat -ap | grep ssh命令,查看程序运行的端口,如下所示。
3. tcpdump命令
步骤1 执行tcpdump -i eth0命令进行抓包。
说明:tcpdump不带网卡时,tcpdump默认选择第一块网卡,也就是对eth0进行抓包;当带网卡时,是对具体的某块网卡进行抓包。
步骤2 单击终端图标,再打开一个终端,执行ping www.sdnlab.com进行网络请求。抓包信息如下。
说明:如果实验环境无法连接外网,则将命令中的www.sdnlab.com替换为OneLab实验平台的地址。
由上述信息可知,网络流量从30.0.1.3到123.57.17.239,30.0.1.3是本机IP,123.57.17.239是SDNLAB网站的IP地址。ICMP echo request表示是一个ICMP请求报文。
步骤3 执行“Ctrl+C”停止抓包。
步骤4 单击浏览器图标,打开虚拟机浏览器界面,如图1-4所示。
图1-4 打开虚拟机浏览器界面
步骤5 执行tcpdump -i eth0 tcp port 80命令,抓取端口为80的TCP的数据信息。抓包信息如下所示。
说明:port 80表示是80端口,即http端口。打开浏览器,便能产生80端口的数据流量。
步骤6 执行“Ctrl+C”停止抓包。
步骤7 执行tcpdump -i eth0 tcp命令,抓取TCP的数据信息,并访问网址www.sdnlab.com。抓包信息如下所示。
说明:如果实验环境无法连接外网,则将www.sdnlab.com替换为OneLab实验平台的地址。
步骤8 执行tcpdump -i eth0-w tcpdump_package.pcap命令。
该命令将tcupdump抓到的网络包保存到tcpdump_package.pcap文件中,命名规则为:文件名.pcap。
步骤9 执行tcpdump -r tcpdump_package.pcap命令。
该命令将保存在tcpdump_package.pcap中的抓包信息读取出来。
项目总结
本项目主要讲解了Linux Ubuntu系统上的网络命令操作,并根据难度分为简单网络命令和进阶网络命令两部分。其中,简单网络命令包括查看电脑网络配置的ifconfig命令,测试网络连接状况的ping命令,查看源主机到目标主机经过网关的traceroute命令,以及显示和操作路由表的route命令。进阶网络命令包括显示和控制主机路由等网络配置的ip命令,监控网络连接与端口的netstat命令,以及截获网络数据包帮助开发者分析网络异常的tcpdump命令。本项目让读者由浅入深学习网络命令操作,并复习相关网络知识。