计算机网络实验
验证性实验
ipconfig
实作一
使用ipconfig/all查看自己计算机的网络配置
实作二
使用ipconfig/all查看旁边计算机的网络配置
问题一
你的计算机和旁边的计算机是否处于同一子网,为什么?
不在同一子网,子网掩码不同,IP地址与子网掩码相与后也不一样
ping
实作一
ping命令可以测试到某计算机或服务器的连通性,例如ping www.bilibili.com 命令,也可直接使用 IP 地址
实作二
使用ping/? 命令了解该命令的各种选项并实际使用
tracert
实作一
要了解到某计算机如哔哩哔哩中间经过了哪些节点(路由器)及其它状态,可使用tracert www.bilibili.com 命令,查看反馈的信息,了解节点的个数。
可通过网站 ip查询 查看这些节点位于何处,是哪个公司的,大致清楚本机到哔哩哔哩服务器之间的路径。
实作二
ping.pe这个网站可以探测从全球主要的 ISP 到某站点如棋歌教学网的线路状态,当然也包括各线路到该主机的路由情况。请使用浏览器访问 http://ping.pe/qige.io进行了解。
问题一
tracert 能告诉我们路径上的节点以及大致的延迟等信息,那么它背后的原理是什么?
首先,tracert送出一个TTL是1的IP 数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将TTL减1。此时,TTL变为0,所以该路由器会将此数据包丢掉,并送回一个ICMP time exceeded消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),tracert 收到这个消息后,便知道这个路由器存在于这个路径上,接着tracert 再送出另一个TTL是2 的数据包,发现第2 个路由器… tracert 每次将送出的数据包的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个数据包抵达目的地。
问题二
在以上两个实作中,如果你留意路径中的节点,你会发现无论是访问百度还是棋歌教学网,路径中的第一跳都是相同的,甚至你应该发现似乎前几个节点都是相同的,你的解释是什么?
访问其他子网需要先出自己子网的网关,所以前几跳一般都是相同的
问题三
在追踪过程中,你可能会看到路径中某些节点显示为 * 号,这是发生了什么?
tracert 有一个固定的时间等待响应(ICMP TTL到期消息)。如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMP TTL到期消息的响应。然后,Tracert给TTL记数器加1,继续进行。
ARP
实作一
运行arp -a命令查看当前的arp 缓存, 请留意缓存了些什么。
然后 ping一下你旁边的计算机 IP(注意,需保证该计算机的 IP 没有出现在 arp 缓存中,或者使用 arp -d * 先删除全部缓存后),再次查看缓存,你会发现一些改变,请作出解释。
实作二
请使用 arp /? 命令了解该命令的各种选项。
实作三
一般而言,arp 缓存里常常会有网关的缓存,并且是动态类型的。
假设当前网关的 IP 地址是 192.168.0.1,MAC 地址是 5c-d9-98-f1-89-64,请使用 arp -s 192.168.0.1 5c-d9-98-f1-89-64命令设置其为静态类型的
问题
在实作三中,为何缓存中常常有网关的信息?
因为计算机会频繁访问其他子网,访问其他子网时,会出网关,所以网关一般都会在缓存中
我们将网关或其它计算机的 arp 信息设置为静态有什么优缺点?
静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。配置静态ARP表项可以增加通信的安全性
DHCP
实作一
一般地,我们自动获取的网络配置信息包括:IP 地址、子网掩码、网关 IP 以及 DNS 服务器 IP 等。使用 ipconfig/release 命令释放自动获取的网络配置,并用 ipconfig/renew 命令重新获取,了解 DHCP 工作过程和原理。
问题
在Windows系统下,如果由于某种原因计算机不能获取 DHCP 服务器的配置数据,那么Windows将会根据某种算法自动配置为 169.254.x.x 这样的 IP 地址。显然,这样的 IP 以及相关的配置信息是不能让我们真正接入 Internet 的,为什么?既然不能接入 Internet,那么Winodws系统采用这样的方案有什么意义?
自动配置的IP地址和信息能短暂性的解决计算机不能获取 DHCP 服务器的配置数据的问题
netstat
实作一
Windows 系统将一些常用的端口与服务记录在 C:\WINDOWS\system32\drivers\etc\services 文件中,请查看该文件了解常用的端口号分配。
实作二
使用 netstat -an 命令,查看计算机当前的网络连接状况
DNS
实作一
Windows 系统将一些固定的/静态的 DNS 信息记录在 C:\WINDOWS\system32\drivers\etc\hosts 文件中,如我们常用的localhost
就对应 127.0.0.1 。请查看该文件看看有什么记录在该文件中。
实作二
解析过的 DNS 记录将会被缓存,以利于加快解析速度。请使用 ipconfig /displaydns 命令查看。我们也可以使用 ipconfig /flushdns 命令来清除所有的 DNS 缓存。
实作三
使用nslookup qige.io 命令,将使用默认的 DNS 服务器查询该域名。当然你也可以指定使用 CloudFlare(1.1.1.1)或 Google(8.8.8.8) 的全球 DNS 服务器来解析,
cache
实作一
打开 Chrome 或 Firefox 浏览器,访问 https://qige.io ,接下来敲 F12 键 或 Ctrl + Shift + I 组合键打开开发者工具,选择 Network 面板后刷新页面,你会在开发者工具底部看到加载该页面花费的时间。请进一步查看哪些文件被 cache了,哪些没有。
实作二
接下来仍在 Network 面板,选择 Disable cache 选项框,表明当前不使用 cache,页面数据全部来自于 Internet,刷新页面,再次在开发者工具底部查看加载该页面花费的时间。你可比对与有 cache 时的加载速度差异。
启用cache:0.322 S
不启用cache:2.51 S
Wireshark实验
数据链路层
实作一
使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。
问题
为什么Wireshark 展现给我们的帧中没有校验字段
帧格式中含有校验字段,Wireshark时,校验字段被过滤了
实作二
ping
你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?- 然后
ping qige.io
(或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
发出帧目的MAC: 22:ed:df:b7:b7:dc
返回帧源MAC: 22:ed:df:b7:b7:dc
是网关的MAC地址 - 再次
ping www.cqjtu.edu.cn
(或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?
发出帧目的MAC: 22:ed:df:b7:b7:dc
返回帧源MAC: 22:ed:df:b7:b7:dc
是网关的MAC地址
问题
通过以上的实验,你会发现:
访问本子网的计算机时,目的 MAC 就是该主机的
访问非本子网的计算机时,目的 MAC 是网关的
请问原因是什么?
访问本子网计算机时,不需要出网关,直接通过switch
访问其他子网计算机,需要出网关,所以首先MAC地址会变成网关的
实作三
-
为防止干扰,先使用
arp -d *
命令清空 arp 缓存
-
ping
你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。 -
再次使用
arp -d *
命令清空 arp 缓存
-
然后
ping qige.io
(或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
问题二
网络层
实作一:熟悉 IP 包结构
使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。
问题一
为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?
便于传输时的识别IP总长度,节省时间,当长度超过1500B时就会被返回链路层进行分段,从而使得效率提高。
实作二:IP 包的分段与重组
根据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。
缺省的,ping
命令只会向对方发送 32 个字节的数据。我们可以使用 ping 202.202.240.16 -l 2000
命令指定要发送的数据长度。此时使用 Wireshark 抓包(用 ip.addr == 202.202.240.16
进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等
问题二
分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办?
会转发至能支持该数据报的链路上
实作三:考察 TTL 事件
在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等。
在验证性实验部分我们使用了 tracert
命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。
请使用 tracert www.baidu.com
命令进行追踪,此时使用 Wireshark 抓包(用 icmp
过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。
问题三
在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?
50
传输层
实作一:熟悉 TCP 和 UDP 段结构
-
用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
-
用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
问题一
由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?
在一台机器上,一个进程对应一个端口。端口的作用就是用来唯一标识这个进程。源端口标识发起通信的那个进程,目的端口标识接受通信的那个进程。
实作二:分析 TCP 建立和释放连接
-
打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上
Follow TCP Stream
),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
-
请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。
-
请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
问题二
去掉
Follow TCP Stream
,即不跟踪一个 TCP 流,你可能会看到访问qige.io
时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?
应用层
实作一:了解 DNS 解析
-
先使用
ipconfig /flushdns
命令清除缓存,再使用nslookup qige.io
命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。
-
你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。
-
可了解一下 DNS 查询和应答的相关字段的含义
问题一
你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?
为了使服务器的负载得到平衡,网站设有好几个计算机,每一个计算机都运行同样的服务器软件。这些计算机的IP地址不一样,但它们的域名却是相同的。这样,第一个访问该网址的就得到第一个计算机的IP地址,而第二个访问者就得到第二个计算机的IP地址等等。这样可使每一个计算机的负荷不会太大。
实作二:了解 HTTP 的请求和应答
-
打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上
Follow TCP Stream
),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。
-
请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么命令,如:
GET, POST
。并仔细了解请求的头部有哪些字段及其意义。
-
请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:
200, 304, 404
等。并仔细了解应答的头部有哪些字段及其意义。
问题二
刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的
304
代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答304
应答而不是常见的200
应答?
第一次成功访问时已经返回200,游览器就会记录资源文件,同时缓存。浏览器第二次发送请求的时候,服务器发现网站的资源文件和缓存仍然存在,于是就回答了304,表示不传应答体了,缓存中有所需的东西,不一致返回200。
CPT实验
直接连接两台 PC 构建 LAN
将两台 PC 直接连接构成一个网络。注意:直接连接需使用交叉线。
进行两台 PC 的基本网络配置,只需要配置 IP 地址即可,然后相互 ping 通即成功。
用交换机构建 LAN
构建如下拓扑结构的局域网:
PC0 能否 ping 通 PC1、PC2、PC3 ?
可以ping通PC1,但是不能ping通PC2、PC3
PC3 能否 ping 通 PC0、PC1、PC2 ?为什么?
可以ping通PC2,但是不能ping通PC0、PC1
将 4 台 PC 的掩码都改为 255.255.0.0 ,它们相互能 ping 通吗?为什么?
可以ping通,因为当改变子网掩码时,ip地址与其取余运算,得到的ip地址在同一子网。
使用二层交换机连接的网络需要配置网关吗?为什么?
生成树协议(Spanning Tree Protocol)
交换机在目的地址未知或接收到广播帧时是要进行广播的。如果交换机之间存在回路/环路,那么就会产生广播循环风暴,从而严重影响网络性能。
而交换机中运行的 STP 协议能避免交换机之间发生广播循环风暴。
只使用交换机,构建如下拓扑: