计算机网络实验
0、实验准备
-
cmder_mini下载配置。
-
抓包协议分析软件wireshark
-
CPT(Cisco Packet Tracer)网络模拟软件
-
实验环境:Chrome 浏览器
1、验证性实验:
1. ipconfig
实作一
使用 ipconfig/all
查看自己计算机的网络配置,尽可能明白每行的意思,特别注意 IP
地址、子网掩码 Subnet Mask
、网关 Gateway
。
-
运行cmder,双击运行。
-
输入ipconfig/all,并回车,查看自己计算机的网络配置
-
物理地址:
我们也常称物理地址为MAC地址;MAC地址具有唯一性(IP地址不具备唯一性)。
MAC地址的长度为48位(6个字节),本台计算机的MAC地址为:
28:CD:C4:4C:AC:03
。 -
DHCP已启用:
DHCP:动态主机配置协议。获取服务器分配的IP地址,以及子网掩码。
-
**IPv6地址:**本电脑的IPv6地址为:
fe80::640b::f8a8::c8fa::71f%18
(IPv6的出现主要是为了解决网络地址资源匮乏问题) -
**IPv4地址:**本电脑的IPv4地址为:
192.168.0.105
,属于C类网络。 -
子网掩码:
掩码的意思就是掩盖掉主机号,剩余的就是网络号。
子网掩码为:
255.255.255.0
;所以网络号为24位,该计算机的网络配置可写作:192.168.0.105/24 -
默认网关:
能连接两个不同的网络,实现网络的互连。
-
DNS服务器:
DNS能实现域名和IP地址相互映射,让人们更方便的访问互联网。
实作二
使用 ipconfig/all
查看旁边计算机的网络配置,看看有什么异同。
异:MAC地址不同;DHCP服务启动状态不同;IP地址不同;默认网关不同;DNS服务器数量不同
同:子网掩码相同;
问题:
你的计算机和旁边的计算机是否处于同一子网,为什么?
旁边的计算机与本台电脑没有处于同一子网中。因为通过子网掩码,可得到两者的网络号分别为:192.168.137.0
和 192.168.0.0
2. ping
实作一
要测试到某计算机如 重庆交通大学 Web 服务器的连通性,可以使用 ping www.cqjtu.edu.cn
命令,也可直接使用 IP 地址。
请掌握使用该命令后屏幕显示的反馈回来信息的意思,如:TTL、时间等。
- 输入命令
ping www.cqjtu.edu.cn
,回车。
输入其ip地址,效果一样。 ping 218.70.34.236
。
-
我们对反馈回来的信息做进一步的分析,理解。
TTL:
Time To Live,生命期,防止数据包长期滞留在子网当中。转发IP数据包时,路由器至少将TTL减一,当值为0时,路由器会将这个数据包丢弃。
实验中TTL = 51,表明该数据包还可以跳 51 跳,说明这次ping到交大中途跳了64 - 51 = 13跳;
这也说明,传输过程中TTL的值会发生改变。
时间:
数据往返需要的时间,单位为毫秒;实验中说明本次ping操作到交大再返回大致需要14毫秒。一般可根据反应时间来判断网络连通情况,网络延迟的情况。
数据包:
用于本次网络响应测试的数据包个数为4。
实作二
使用 ping/?
命令了解该命令的各种选项并实际使用。
- 输出命令
ping/?
并回车:
-
ping -t:
一直发送数据包并显示返回结果,直达主动输入暂停或停止指令。
ping -t 218.70.34.236
。停止:Ctrl+C
暂停:Ctrl+Break
-
ping -a:
将地址解析为主机名:
ping -a www.baidu.com
。
-
ping -n count:
规定发送的回显请求数目(一般情况下只发送4个数据包)
ping -n 10 www.cqjtu.edu.cn
。
-
ping -l size
发送缓冲区大小:发送size指定大小的到目标主机的数据包(ICMP指定数据长度)。
ping -l 65 218.70.34.236
。
-
ping -f
在数据包中设置不分段标记(仅适用于IPv4)一般和 -l 结合使用。
ping -f -l 800 218.70.34.236
。
-
ping -i TTL
设置数据包的生存时间(生命期)
ping -i 255 218.70.34.236
。注意:设置的TTL值需要在1~255这个范围内:
-
ping -v TOS
服务类型(Type Of Service),该设置已被弃用,目前路由器都都忽略该字段,在数据包传输中,对该要求不做处理,TOS缺省为0。
-
ping -r count
记录计数跃点的路由器(仅适用于IPv4),参数count:显示中间过程中经过count个路由器,但最多只能跟踪到9个路由。
由前面的实验可知,ping
218.70.34.236
(www.cqjtu.edu.cn)会经历6跳,加上最终目的,一共7个节点:我们显示一个数据包即可:ping -r 7 -n 1218.70.34.236
可清楚的看到数据包的整个路由过程。
- ping -s count
计数跃点的时间戳(仅适用于IPv4):但此参数不记录数据包返回所经过的路由,最多只记录4个,即count的范围为1~4:
TroubleShooting
假设你不能
ping
通某计算机或 IP,但你确定该计算机和你之间的网络是连通的,那么可能的原因是什么?该如何处理能保证ping
通?
例如,我们访问推特官网:
结果显示访问失败。这是因为对外网有访问限制。
访问百度由近及远的连通性测试
- 访问自己
-
访问旁边的的计算机
-
检测网关通信
- 访问百度的其中一个IP
访问成功!!
TroubleShooting
ping
百度的 IP 即ping 14.215.177.39
没问题,但ping
百度的域名即ping www.baidu.com
不行,那么可能的原因是什么?如何进行验证和解决?
可能的原因:没有配置DNS地址或者DNS地址错误导致,使得域名无法转换成相应的IP
验证和解决:可使用ipconfig/all
命令查看DNS服务器是否存在;可在相关配置文件中配置DNS服务器的域名。
3. tracert
实作一
要了解到某计算机如 www.baidu.com 中间经过了哪些节点(路由器)及其它状态,可使用 tracert www.baidu.com
命令,查看反馈的信息,了解节点的个数。
这里到达目的地址一共经过了16个节点。
前3个IP地址都属于内网IP;第 1 个IP地址为默认网关;第 2 个IP地址为DNS服务器,负责解析www.baidu.com为具体域名;通过查询,第4个IP地址属于四川省资阳市中国移动;5个IP地址属于四川省成都市中国移动;第6、8、9个数据都超时;第 7 个数据位于北京的中国移动;第10、11个数据也位于北京移动;第16个数据也位于北京移动。
综上得出,百度的服务器位于北京,期间通过中国移动的网络经过四川资阳、四川成都,最终到达北京;上述节点中请求超时应该是访问该结点的时间过长所导致。
实作二
ISP,全称为Internet Service Provider,即因特网服务提供商,即指提供互联网服务的公司。中国移动也是ISP。
问题一
tracert
能告诉我们路径上的节点以及大致的延迟等信息,那么它背后的原理是什么?本问题可结合第二部分的 Wireshark 实验进行验证。
背后的原理,就是利用了TTL(存活时间)。
每当数据包经过一个路由器时,其TTL就会减1,当TTL为0时,数据包会被丢弃,并向源地址返回一个ICMP超时通知,这里面包含数据包的源地址,以及当前路由器的IP地址(即告诉发送者,我丢了,我在哪里弄丢的)。
这样每次发送的数据包的TTL增加1,数据包就能多走一个路由器,这样一直重复下去,当走到了目的地址时,也就获得了其之前的所有结点的信息。
问题二
在以上两个实作中,如果你留意路径中的节点,你会发现无论是访问百度还是棋歌教学网,路径中的第一跳都是相同的,甚至你应该发现似乎前几个节点都是相同的,你的解释是什么?
第一跳或者前几跳都相同,说明都经过了这几个节点,或者说如果数据要出去,这几个节点是“必经之路”。
实验结果表明,前几个数据都是属于内网IP。第 1 个IP地址为默认网关,是数据从当前网络送出去的“出口”;第 2 个IP地址为DNS服务器,负责解析www.baidu.com为具体域名;
问题三
在追踪过程中,你可能会看到路径中某些节点显示为 * 号,这是发生了什么?
*号表示等待数据返回的时间过长,可能的原因:1、数据在返回的过程中意外丢失;2、路由器设置了不返回ICMP超时通知,即对TTL值过期的数据包丢弃后不采取任何措施。
4. ARP
实作一
运行
arp -a
命令查看当前的 arp 缓存, 请留意缓存了些什么。然后
ping
一下你旁边的计算机 IP(注意,需保证该计算机的 IP 没有出现在 arp 缓存中,或者使用arp -d *
先删除全部缓存),再次查看缓存,你会发现一些改变,请作出解释。
可以发现,arp缓存了接口地址、IP地址、物理地址(MAC地址),以及为每个地址标明了类型,是属于静态还是动态。
清除缓存后重新加载查看arp缓存
ping一下旁边的计算机后重新加载arp缓存
改变:arp缓存中多了旁边计算机的IP与MAC地址的映射信息。
解释:在ping旁边的计算机时,由于之前的arp缓存信息被删除掉了,找不到旁边电脑的MAC地址,便会采取广播的方式询问目标IP地址是谁,它的MAC地址的多少,等到获取相关数据之后,又会记录在arp缓存信息中。
实作二
请使用
arp /?
命令了解该命令的各种选项。
ARP指令最常用的三个:删除(-d),查看(-a),添加(-s);前两个已经使用过,在实作三中学习第三个。
实作三
一般而言,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
命令设置其为静态类型的。
TroubleShooting
你可能会在实作三的操作中得到 “ARP 项添加失败: 请求的操作需要提升” 这样的信息,表示命令没能执行成功,你该如何解决?
查阅资料可得,确实可能存在这样的问题,多位于Win7系统中。
解决方案:
-
使用管理员身份运行;
-
如果仍然失败就需要使用
netsh
命令,具体如下:-
进入管理员模式,输入
netsh i i show in
,找到当前网卡对应的Idx,这里为18 -
运行
netsh -c i i add neighbors "Idx" "IP地址" "MAC地址"
,这里为
netsh -c i i add neighbors 18 192.168.0.1 5c-d9-98-f1-89-64
- 除此之外,在Win7上也不能完全通过arp -d删除绑定,需要使用netsh -c i i delete neighbors idx
-
问题
在实作三中,为何缓存中常常有网关的信息?
缓存中的信息通常为曾经的访问记录,访问其他地址时,需要经过网关,所以会有网关的缓存信息。
我们将网关或其它计算机的 arp 信息设置为静态有什么优缺点?
优点:1. 有效防止局域网中ARP欺骗,因为静态ARP不会被动态ARP信息所覆盖;2. 静态ARP不会出现因表中的信息长期不用,而被删除的“老化”现象;3. 由于手工指定和维护,所以网络更加稳定;
缺点:不能像动态ARP那样通过ARP报文去学习,如果出现错误的ARP信息且网络范围较大,修改起来较为麻烦。
ARP欺骗
参考来源:维基百科
攻击者发送假的ARP数据包到网络上,尤其是送到网关上。其目的是要让送至特定的IP地址的流量被错误送到攻击者所取代的地方。
即,攻击者通过ARP协议的漏洞,把自己的地址伪装成其他主机或者网关,来获取本不属于自己的数据;
攻击者获得这些数据后,可以送给真正的接收方,也可以篡改后送给接收方,也可以直接丢弃等等。
5. DHCP
实作一
一般地,我们自动获取的网络配置信息包括:IP 地址、子网掩码、网关 IP 以及 DNS 服务器 IP 等。使用
ipconfig/release
命令释放自动获取的网络配置,并用ipconfig/renew
命令重新获取,了解 DHCP 工作过程和原理。
-
ipconfig/release
释放自动获取的网络配置 -
使用
ipconfig/renew
重新获取 -
DHCP 工作过程和原理
大致进行4个步骤:
**DHCP Discovery(广播):**因为不知道服务器的位置,DHCP客户端会以广播的形式向服务器发送DHCP Discovery 报文,请求IP地址。
**DHCP Offer(单播):**服务器收到 Discovery 报文后,会在IP地址池中捞一个合适的IP,加上租约、网关等,构造一个DHCP Offer 报文,并向客户端响应提供的IP地址。
**DHCP Request(广播):**DHCP客户端可能会收到很多Offer报文,所以这个需要客户端在很多的报文中选择一个并响应它,所以客户端以广播的形式发送 DHCP Request 报文,并向服务器确认我要使用这个IP地址。
**DHCP ACK(单播) :**服务器收到这个Request报文后,并以单播的形式向客户端发送 DHCP ACK 报文,并查找有没有相应的租约信息(DHCP服务器给客户端分配到的地址,就会有一个默认的租期为一天,也就是说过了这个租期之后DHCP服务器就会把这个地址收回,客户端就无法使用这个ip进行上网了。),如果有就发送ACK报文回应客户端,可以用分配的IP地址。
参考文章:DHCP的工作原理和实验解析
TroubleShooting
如果你没能成功的释放,请思考有哪些可能的原因并着手进行解决?
可能是网卡问题,没有安装网卡或没有网卡驱动。
问题
在Windows系统下,如果由于某种原因计算机不能获取 DHCP 服务器的配置数据,那么Windows将会根据某种算法自动配置为 169.254.x.x 这样的 IP 地址。显然,这样的 IP 以及相关的配置信息是不能让我们真正接入 Internet 的,为什么?既然不能接入 Internet,那么Winodws系统采用这样的方案有什么意义?
不能接入Internet的原因:
168.254.x.x 是IP地址中明确标识出的特殊IP地址。所表示的意义也与题目对应:当DHCP服务器发生故障或响应时间太长而超出系统规定的一个时间,windows系统会为你分配这样一个地址。
这个IP地址的分配意味着计算机与网关处于不同的网段当中,无法与网关通信,导致无法接入Internet。
方案的意义:169.254.x.x是一个B类地址,可以在169.254.x.x内的子网范围进行通信,即局域网内的电脑就可以通过这个IP来相互通讯,不需要另外指定IP地址。
秘籍
经常的,在一个固定地方的网络配置我都喜欢采用 静态/手动配置,而不是动态 DHCP 来进行。你能想到是什么原因吗?
手动配置得到的地址不会自动发生变化,即使设备重启也不会发生改变,不变的IP地址方便其他设备的连接;
同时,如果网络中有文件服务器,想使用网络打印机或者想要远程访问程序,拥有静态IP也是非常理想的。
6. netstat
实作一
Windows 系统将一些常用的端口与服务记录在
C:\WINDOWS\system32\drivers\etc\services
文件中,请查看该文件了解常用的端口号分配。
FTP文件传输协议端口:21/TCP
SSH 远程登录协议端口:22/TCP
SMTP 简单邮箱传输协议端口:25/TCP
HTTP协议端口:80/TCP
实作二
使用
netstat -an
命令,查看计算机当前的网络连接状况。更多的netstat
命令选项,netstat命令用法详解一 和 netstat命令用法详解二。
netstat -an
当前网络连接状况
netstat -s
显示所有端口的统计信息(来自netstat命令用法详解二)
其他的netstat操作 netstat /?
7. DNS
实作一
Windows 系统将一些固定的/静态的 DNS 信息记录在
C:\WINDOWS\system32\drivers\etc\hosts
文件中,如我们常用的localhost
就对应127.0.0.1
。请查看该文件看看有什么记录在该文件中。
有localhost本机IP地址127.0.0.1;可以手动的方式自己添加一些IP地址
实作二
解析过的 DNS 记录将会被缓存,以利于加快解析速度。请使用
ipconfig /displaydns
命令查看。我们也可以使用ipconfig /flushdns
命令来清除所有的 DNS 缓存。
ipconfig /displaydns
命令查看缓存:
过长…不予全部展示。
ipconfig /flushdns
清除缓存
清楚后数据缓存变少。
实作三
使用
nslookup qige.io
命令,将使用默认的 DNS 服务器查询该域名。当然你也可以指定使用CloudFlare
(1.1.1.1
)或8.8.8.8
) 的全球 DNS 服务器来解析,如:nslookup qige.io 8.8.8.8,当然,由于你懂的原因,这不一定会得到正确的答案。
-
nslookup qige.io
命令: -
使用指定DNS服务器CloudFlare来解析:
nslookup qige.io 1.1.1.1
-
使用指定DNS服务器Google来解析:
nslookup qige.io 8.8.8.8
貌似访问到了。
TroubleShooting
上面秘籍中我们提到了使用插件或自己修改
hosts
文件来屏蔽广告,思考一下这种方式为何能过滤广告?如果某些广告拦截失效,那么是什么原因?你应该怎样进行分析从而能够成功屏蔽它?
hosts文件是实现链接与IP地址的一一对应,访问相应的链接,转到相关的IP地址;
网页上的广告其实也就是一个个请求访问链接,如果我们能让它们发出请求后得不到想要的资源,也就屏蔽了广告;
hosts文件的优先级是高于DNS服务器的,在这里面添加相关的链接和对应IP地址,可以改变链接原来指向的IP地址;
**综上,过滤广告办法为:**在hosts文件中添加需要屏蔽的广告的链接,并同时匹配一个对应的IP地址(通常为本机地址),这样,就更改了广告链接原本指向的IP地址,从而使得该链接的访问失效。
如果广告拦截失效,一种可能的原因就是该广告是嵌入在网页之中的,随着网页资源的获取而获取。如果想要解决,仍然从请求链接下手,具体解决办法为:查看该网页源码,找到对应的广告的请求链接,复制下来,重复上述操作,实现屏蔽。
DNS欺骗
DNS欺骗:
-
当主机向某一个DNS服务器发送解析请求时,攻击者冒充被请求方,向请求方返回一个被篡改了的应答,从而请求方访问了被篡改后的IP地址。
-
防御措施:配置时应注意:
(1)使用最新版本的DNS服务器软件,及时安装补丁
(2)关闭DNS服务器的递归功能
(3)限制区域传输范围
(4)限制动态更新
(5)采用分层的DNS体系结构
参考文章:DNS欺骗及防御技术
8. cache
实作一
打开 Chrome 或 Firefox 浏览器,访问 https://qige.io ,接下来敲 F12
键 或 Ctrl + Shift + I
组合键打开开发者工具,选择 Network
面板后刷新页面,你会在开发者工具底部看到加载该页面花费的时间。请进一步查看哪些文件被 cache了,哪些没有。
页面完成加载需要时间:911毫秒;
图中所示文件即为cache的文件。
实作二
接下来仍在 Network
面板,选择 Disable cache
选项框,表明当前不使用 cache,页面数据全部来自于 Internet,刷新页面,再次在开发者工具底部查看加载该页面花费的时间。你可比对与有 cache 时的加载速度差异。
可以清楚地看到,停用缓存之后,完成时间变成了18.51秒,是原来的几十倍!!!
由此也可以得出:浏览器使用缓存机制能极大的加快页面的访问速度,提高效率。
2、Wireshark实验
本部分按照数据链路层、网络层、传输层以及应用层进行分类,共有 10 个实验。
数据链路层
实作一 熟悉 Ethernet 帧结构
使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。
我们尝试访问百度www.baidu.com
分析Ethernet帧结构:
目的MAC:74:05:a5:5c:a2:73
;源MAC:28:cd:c4:4c:ac:03
;类型为IPv4;字段如上图所示
问题
你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因。
在被Wireshark抓包前,帧会经过物理层,进行FCS校验;如果校验成功,帧尾会被丢弃,就没有了上面所说的校验字段;如果校验失败,帧会被丢弃,Wireshark也抓不到这个帧。
实作二 了解子网内/外通信时的 MAC 地址
ping
你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
发出帧的目的MAC地址:58:8f:cf:33:9a:da
返回帧的源MAC地址:58:8f:cf:33:9a:da
这两个MAC地址相同,就是ping的我旁边的计算机(处于同一子网)的MAC地址。
- 然后
ping qige.io
(或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
发出帧的目的MAC地址:74:05:a5:5c:a2:73
返回帧的源MAC地址:74:05:a5:5c:a2:73
这个MAC地址是网关的
- 再次
ping www.cqjtu.edu.cn
(或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?
发出帧的目的MAC地址:74:05:a5:5c:a2:73
返回帧的源MAC地址:74:05:a5:5c:a2:73
没错,这个MAC地址也是网关的。
问题
通过以上的实验,你会发现:
- 访问本子网的计算机时,目的 MAC 就是该主机的
- 访问非本子网的计算机时,目的 MAC 是网关的
请问原因是什么?
如果在同一个子网内,两台计算机之间的信息可以直接到达;但如果与子网外面通信,无论是接受信息还是发送信息,都需要经过网关,这时候信息的来源与发送地址,就是网关的MAC地址了。
实作三 掌握 ARP 解析过程
- 为防止干扰,先使用
arp -d *
命令清空 arp 缓存
ping
你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。
ARP的请求方式为广播;
请求内容为:Who has 192.168.0.100? Tell 192.168.0.105, 这也就是广播的内容,此时正在子网内全局询问地址为192.168.0.100 的计算机是谁?请回复192.168.0.105(本台计算机的地址)
该请求目的的MAC地址为:ff:ff:ff:ff:ff:ff
(广播地址)
在请求回应中,源MAC地址:58:8f:cf:33:9a:da
(处于同一子网下旁边计算机的MAC地址)
目的MAC地址:28:cd:c4:4c:ac:03
(本机的MAC地址)
- 再次使用
arp -d *
命令清空 arp 缓存
- 然后
ping qige.io
(或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
这次ARP请求仍为广播请求;
回应的源MAC地址:74:05:a5:5c:a2:73
; 网关在回应。
问题
通过以上的实验,你应该会发现,
- ARP 请求都是使用广播方式发送的
- 如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP, 那么 ARP 解析将得到网关的 MAC。
请问为什么?
- 因为在清除了arp缓存的情况下,需要通过广播的方式向该局域网内的所有计算机发送请求,才能找到对应目标IP地址的主机。
- 如果访问的ip地址是本子网的,发送和接受信息可以直接达到;而如果是非本子网的,则需要通过网关将请求送出去,待请求被目标接收到后,会将信息返回,信息从网关返回到源计算机,ARP解析就得到了网关的MAC地址。
网络层
实作一 熟悉 IP 包结构
使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。
随机抓取了一个IP包:
版本为4;头部长度为20字节;总长度52字节;TTL为111;协议类型为TCP
问题
为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?
IP包包含头部和数据两部分;
头部长度字段表明该数据包头部的长度,当计算机接收端接收到数据时,可以根据头部长度计算出报头在何处结束,从何处开始读取的才是数据部分;
总长度字段用于记录包的总长度,如果包的数据超过1500字节,就会在发送方的数据链路层分层。
实作二 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 中,如果路由器遇到了一个大数据包该怎么办?
路由器会直接丢弃,并通知发送端重新发送小一些的数据包。
IPv6中,为了减少中间转发设备的处理压力,中间转发设备不对IPv6报文进行分片,报文的分片将在源节点进行。
当中间转发设备的接口收到一个报文后,如果发现报文长度比转发接口的MTU(最大传输单元)值大,则会将其丢弃;同时将转发接口的MTU值通过ICMPv6报文的,将“包太大”的消息发给源端主机。
之后发送端将数据分段,发送长度较小的IP数据包。
实作三 考察 TTL 事件
在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等。
在验证性实验部分我们使用了
tracert
命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。请使用
tracert www.baidu.com
命令进行追踪,此时使用 Wireshark 抓包(用icmp
过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。
TTL初始化时的数量依次增加:
每经过一个路由器,TTL的值就会减1,当TTL的值为0时,就返回报错,并携带该结点的地址信息;利用这个特性,每次发出TTL的初始值加1,就可以得到路由路径。
问题
在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?
大于50且形式为2的n次方的数中,离50最近的值为64,所以这个包从源点到我之间有:64-50-1 = 13跳
传输层
实作一 熟悉 TCP 和 UDP 段结构
- 用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
源端口:192.168.0.105
;目的端口:184.25.122.170
;
序列号:682
;确认号:600
;
各个标志位:URG紧急位:0;ACK确认位:1;PSH推位:0;RST复位位:0;SYN同步位:0;FIN结束位:0。
- 用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
源端口:8000
;目的端口:57548
;
长度:751
;
问题
由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?
源端口就是本机程序发送数据的端口,目的端口就是对方主机用那个端口接受。端口号用来标识终端的应用程序进程,从而实现应用程序进程之间的通信。
实作二 分析 TCP 建立和释放连接
- 打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上
Follow TCP Stream
),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
抓包:
- 请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。
捕获到三次握手时传递的数据包:
第一次握手:63929向443发送请求,序列号Seq为0,长度Len为0,SYN同步位;
第二次握手:443回复63929,确认号ACK为1,SYN为同步位;
第三次握手:63929发送第二次请求(ACK确认号为1),连接成功。
- 请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
捕获到四次挥手时释放连接的包:
63929到443传送数据的过程中,结束位FIN置1,表明该过程用于释放连接。
第一次挥手:63929向443发出FIN信号请求断开;
第二次挥手:443向63929发出一个FIN信号,一个ACK信号;
第三次挥手:63219回应一个ACK信号,然后断开连接。
问题一
去掉
Follow TCP Stream
,即不跟踪一个 TCP 流,你可能会看到访问qige.io
时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?
建立多个连接可以加快资源的访问速度。
问题二
我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?
如果第2次挥手的ACK和第3次挥手的FIN之间如果没有数据需要传输的话,是可以合并为一个包(FIN+ACK)来传输的,也就是压缩成三次挥手。
应用层
应用层的协议非常的多,我们只对 DNS 和 HTTP 进行相关的分析。
实作一 了解 DNS 解析
- 先使用
ipconfig /flushdns
命令清除缓存,再使用nslookup qige.io
命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。
- 你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。
53号端口返回了结果
- 可了解一下 DNS 查询和应答的相关字段的含义
DNS查询和应答的报文格式如下:
-
16位标识字段用于标记一对DNS查询和应答,以此区分一个DNS应答是哪个DNS查询的回应
-
16位标志字段用于协商具体的通信方式和反馈通信状态。
-
DNS报文头部的16位标志字段的细节如图:
-
查询问题的格式
-
资源记录格式
参考文章:DNS查询和应答报文详解
问题
你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?
因为每天站点被访问的次数非常多,为了降低服务器的负担,网站就设有多台计算机,它们都运行着一样的服务器程序,虽然各个计算机IP不同,却都对应着相同的域名。在这样的布局下,前前后后来访问该网址的就会得到其中某台计算机的IP地址,且每次获得的IP可能都不一样。这样就造成了发出的DNS请求不止一个。
实作二 了解 HTTP 的请求和应答
- 打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上
Follow TCP Stream
),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。- 请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么命令,如:
GET, POST
。并仔细了解请求的头部有哪些字段及其意义
抓包,http过滤
使用的是GET请求。
请求头部的字段及意义:
字段 | 意义 |
---|---|
host | 客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号 |
User-Agent | 浏览器表明自己的身份(是哪种浏览器) |
Accept | 告诉WEB服务器自己接受什么介质类型 |
Accept-Language | 浏览器申明自己接收的语言语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等 |
Accept-Encoding | 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 (gzip,deflate) |
Content-Encoding | WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。 |
Cookie | Cookie 这个头信息把之前发送到浏览器的 cookies 返回到服务器。 |
Referer | 浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL |
Proxy-Authenticate | 代理服务器响应浏览器,要求其提供代理身份验证信息 |
Range | 浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。 |
If-Unmodified-Since | 如果请求的对象在该头部指定的时间之后没修改过,才执行 |
Content-Type | 服务器告诉浏览器自己响应的对象的类型。 |
- 请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:
200, 304, 404
等。并仔细了解应答的头部有哪些字段及其意义。
应答代码是200
,但感觉这个不像是应答字段…
应答头部常见字段:
字段 | 意义 |
---|---|
Date | 通用字段,表示HTTP报文创建时间 |
Server | 响应字段,告诉客户端当前正在提供Web服务的软件名称和版本号 |
Content-Type | 文本类型字段,表示文本类型和编码格式 |
Satatus | 状况字段,OK表示已完成 |
问题
刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的
304
代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答304
应答而不是常见的200
应答?
这是因为如果访问的资源没有变,我们就可以使用浏览器的缓存。
而如何判断资源是否发生了变化就需要服务器的回应:如果服务器回应一个“304 Not Modified“,就表示可以继续使用缓存数据;如果返回状态码为200,就说明缓存数据无效了,应该更新,服务器会发送最新资源数据。使用304会节约流量开销,同时还能提高用户体验。
3、Cisco Packet Tracer 实验
CPT 软件使用简介
请使用上面的参考链接 1
,了解和熟悉 CPT 软件的使用。
查看数据包在仿真模式下的传递过程:
直接连接两台 PC 构建 LAN
ping测试:
ping成功,连接成功。
用交换机构建 LAN
网络路线及配置:
问题:
- PC0 能否
ping
通 PC1、PC2、PC3 ?
PC0能ping通P1,但不能ping通PC2和PC3
- PC3 能否
ping
通 PC0、PC1、PC2 ?为什么?
PC3不能ping通PC0和PC1,但可以ping通PC2
原因:PC3和PC2处于同一子网,而PC0和PC1所处的并不在PC3所处的子网中,没有网关请求只能在子网内收发。
- 将 4 台 PC 的掩码都改为
255.255.0.0
,它们相互能ping
通吗?为什么?
能。因为这样它们的网络号都一样了,都为192.168.0.0
处于同一子网下,就能ping通。
- 使用二层交换机连接的网络需要配置网关吗?为什么?
需要。网关可以让这两个网络联通起来,两个网络间可以相互建立传送连接,主机可以建立跨网络的传输。
试一试
集线器 Hub 是工作在物理层的多接口设备,它与交换机的区别是什么?请在 CPT 软件中用 Hub 构建网络进行实际验证。
集线器工作在物理层,属于1层设备,每发送一个数据,所有的端口均可以收到,采用了广播的方式,因此网络性能受到很大的限制。
交换机工作在数据链路层,属于2层设备,通过学习之后,每个端口形成一张MAC地址转发表,根据数据包的MAC地址转发数据,而不是广播形式。
交换机接口地址列表
在PC0没有pingPC1之前,MAC表为空:
在PC0上进行了ping操作之后,MAC表上多了数据:
MAC表为空时,当交换机收到帧却不知道怎么转发,于是采用广播的形式,当收到某一端口的回复之后,便知道了该帧的MAC地址并记录到MAC表中。
生成树协议(Spanning Tree Protocol)
使用交换机构建拓扑:
这种状态会造成广播帧循环传送即形成广播风暴,严重影响网络性能:
经过一段时间,随着 STP 协议成功构建了生成树后,Switch3 和 Switch5 的接口当前物理上是连接的,但逻辑上是不通的,处于Blocking状态(桔色)如下图所示:
在网络运行期间,假设某个时候 Switch4 与 Switch5 之间的物理连接出现问题(将 Switch4 与 Switch5 的连线剪掉),则该生成树将自动发生变化。Switch5 下方先前 Blocking 的那个接口现在活动了(绿色),但上方那个接口仍处于 Blocking 状态(桔色)。如下图所示:
路由器配置初步
我们模拟重庆交通大学和重庆大学两个学校的连接,构建如下拓扑:
说明一
- 左边路由器是交通大学的,其下使用交换机连接交通大学的网络,分配网络号
192.168.1.0/24
,该路由器接口也是交通大学网络的网关,分配 IP 为192.168.1.1
- 右边路由器是重庆大学的,其下使用交换机连接重庆大学的网络,分配网络号
192.168.3.0/24
,该路由器接口也是重庆大学网络的网关,分配 IP 为192.168.3.1
- 两个路由器之间使用广域网接口相连,也是一个子网,分配网络号
192.168.2.0/24
说明二
现实中,交通大学和重庆大学的连接是远程的。该连接要么通过路由器的光纤接口,要么通过广域网接口即所谓的
serial
口(如拓扑图所示)进行,一般不会通过双绞线连接(为什么?)。
因为双绞线的有效传播距离小,通常为100米左右,而重大与交大之间的距离大于100m。
下面我们以通过路由器的广域网口连接为例来进行相关配置。请注意:我们选用的路由器默认没有广域网模块(名称为
WIC-1T
等),需要关闭路由器后添加,然后再开机启动。
说明三
在模拟的广域网连接中需注意 DCE 和 DTE 端(连线时线路上有提示,带一个时钟标志的是 DCE 端。有关 DCE 和 DTE 的概念请查阅相关资料。),在 DCE 端需配置时钟频率
64000
说明四
路由器有多种命令行配置模式,每种模式对应不同的提示符及相应的权限。
请留意在正确的模式下输入配置相关的命令。
- User mode:用户模式
- Privileged mode:特权模式
- Global configuration mode:全局配置模式
- Interface mode:接口配置模式
- Subinterface mode:子接口配置模式
说明五
在现实中,对新的路由器,显然不能远程进行配置,我们必须在现场通过笔记本的串口与路由器的 console 接口连接并进行初次的配置(注意设置比特率为9600)后,才能通过网络远程进行配置。这也是上图左上画出笔记本连接的用意。
说明六
在路由器的
CLI
界面中,可看到路由器刚启动成功后,因为无任何配置,将会提示是否进行对话配置(Would you like to enter the initial configuration dialog?),因其步骤繁多,请选择 NO重庆交通大学的配置可以如下:
Router>en // 从普通模式进入特权模式 Router#conf t // 进入全局配置模式 Router(config)#interface FastEthernet0/0 Router(config-if)#ip address 192.168.1.1 255.255.255.0 Router(config-if)#no shutdown Router(config-if)#exit Router(config)#line vty 0 4 //可支持0-4共5个终端同时登录 Router(config-line)#password dswybs // 远程登录密码 Router(config-line)#login Router(config-line)#exit Router(config)#enable password dswybs // 特权模式密码 Router(config)#^Z // 退出
拓扑图中路由器各接口配置数据如下:
接口名 IP 子网掩码 交通大学 Router0 以太网口 192.168.1.1 255.255.255.0 交通大学 Router0 广域网口 192.168.2.1 255.255.255.0 重庆大学 Router1 以太网口 192.168.3.1 255.255.255.0 重庆大学 Router1 广域网口 192.168.2.2 255.255.255.0 拓扑图中各 PC 配置数据如下:
节点名 IP 子网掩码 网关 交通大学 PC0 192.168.1.2 255.255.255.0 192.168.1.1 交通大学 PC1 192.168.1.3 255.255.255.0 192.168.1.1 重庆大学 PC2 192.168.3.2 255.255.255.0 192.168.3.1 重庆大学 PC3 192.168.3.3 255.255.255.0 192.168.3.1 交通大学路由器基本配置如下:
以太网口:
Router>enable // 从普通模式进入特权模式 Router#configure terminal // 进入全局配置模式 Router(config)#interface f0/0 // 进入配置以太网口模式 Router(config-if)#ip address 192.168.1.1 255.255.255.0 // 配置该接口的 IP Router(config-if)#no shutdown // 激活接口 Router(config-if)#^z // 直接退到特权模式 Router#
广域网口:
Router>en // 从普通模式进入特权模式 Router#conf t // 进入全局配置模式 Router(config)#int s0/0 // 进入配置广域网口模式 Router(config-if)#ip address 192.168.2.1 255.255.255.0 //配置该接口的 IP Router(config-if)#clock rate 64000 // 其为 DCE 端,配置时钟频率 Router(config-if)#no shutdown // 激活接口 Router(config-if)#^z // 直接退到特权模式 Router#
重庆大学路由器基本配置如下:
以太网口:
Router>en // 从普通模式进入特权模式 Router#conf t // 进入全局配置模式 Router(config)#int f0/0 // 进入配置以太网口模式 Router(config-if)#ip address 192.168.3.1 255.255.255.0 // 配置该接口的 IP Router(config-if)#no shutdown // 激活接口 Router(config-if)#^z // 直接退到特权模式 Router#
广域网口:
Router>en // 从普通模式进入特权模式 Router#conf t // 进入全局配置模式 Router(config)#int s0/0 // 进入配置广域网口模式 Router(config-if)#ip address 192.168.2.2 255.255.255.0 //配置该接口的 IP Router(config-if)#no shutdown // 激活接口 Router(config-if)#^z // 直接退到特权模式 Router#
至此,路由器基本的配置完成。请按照上面 PC 配置表继续配置各个 PC 。
路由器配置:
交大路由器:
重大路由器:
PC的配置:
ping测试:
问题:
现在交通大学内的各 PC 及网关相互能 ping 通,重庆大学也类似。但不能从交大的 PC ping 通重大的 PC,反之亦然,也即不能跨子网。为什么?
交大和重大两个网络时通过路由器连接的,路由器的路由表还没有初始化,两网络之间不能通信。
静态路由
静态路由是非自适应性路由协议,是由网络管理人员手动配置的,不能够根据网络拓扑的变化而改变。 因此,静态路由简单高效,适用于结构非常简单的网络。
在当前这个简单的拓扑结构中我们可以使用静态路由,即直接告诉路由器到某网络该怎么走即可。
在前述路由器基本配置成功的情况下使用以下命令进行静态路由协议的配置:
交通大学路由器静态路由配置:
Router>en // 从普通模式进入特权模式 Router#conf t // 进入全局配置模式 Router(config)#ip route 192.168.3.0 255.255.255.0 192.168.2.2 // 告诉交通大学路由器到 192.168.3.0 这个网络的下一跳是 192.168.2.2 Router(config)#exit //退到特权模式 Router#show ip route //查看路由表
重庆大学路由器静态路由配置:
Router>en // 从普通模式进入特权模式 Router#conf t // 进入全局配置模式 Router(config)#ip route 192.168.1.0 255.255.255.0 192.168.2.1 // 告诉重庆大学路由器到 192.168.1.0 这个网络的下一跳是 192.168.2.1 Router(config)#exit //退到特权模式 Router#show ip route //查看路由表
查看路由表你可看到标记为
S
的一条路由,S
表示 Static 。