计算机网络实验
验证性实验
本部分1-7实验是在cmder中完成,实验8在浏览器中完成
一、ipconfig
实作一:利用ipconfig/all查看自己电脑网络属性
实作二:
问题:我的计算机和旁边的计算机是否属于同一子网,为什么?
ip地址的网络号不相同,主机号不相同,子网掩码相同,网关不一样。
不一样的原因:网关不一样所以网络号不一样
二、ping
实作一:
可以看见能ping通,对相关参数分析如下:
1.字节=32 测试中发送的数据包的大小为32字节
2.时间=140ms 与ping的对象主机往返一次所用的时间为140ms
3.TTL=51 当前测试使用的TTL值为51
实作二:使用ping/?命令了解该命令的各种选项并实际应用
实际操作:
1.使用ping-a命令,指定在目标ip上执行的反向名称解析
2.使用ping-l size,指定回显请求数据消息中的数据字段的长度
问题一:假设你不能 ping 通某计算机或 IP,但你确定该计算机和你之间的网络是连通的,那么可能的原因是什么?该如何处理能保证 ping 通?
采用由远及近的连通性测试确定问题所在。
假设我的ip为192.168.13.170
1.ping 127.0.0.1测试自身网络状态,若没问题
2.ping 相邻电脑ip,若没问题
3.ping 192.168.13.0,若没问题说明问题在资源子网,自己无法解决
问题二:假设在秘籍中进行的网络排查中,ping 百度的 IP 即 ping 14.215.177.39 没问题,但 ping 百度的域名即 ping www.baidu.com 不行,那么可能的原因是什么?如何进行验证和解决?
可能是DNS设置错误。计算机只能识别ip,ping域名需要通过DNS域名解析将其转为ip地址,若DNS设置错误,就可能导致无法ping通。通过清空DNS缓存解决。
三、tracert
实作一:要了解到某计算机如 www.baidu.com 中间经过了哪些节点(路由器)及其它状态,可使用 tracert www.baidu.com 命令,查看反馈的信息,了解节点的个数。
各个节点信息如下:
实作二:ping.pe 这个网站可以探测从全球主要的 ISP 到某站点如 https://qige.io 的线路状态,当然也包括各线路到该主机的路由情况。请使用浏览器访问 http://ping.pe/qige.io 进行了解。
问题一:tracert 能告诉我们路径上的节点以及大致的延迟等信息,那么它背后的原理是什么?本问题可结合第二部分的 Wireshark 实验进行验证。
通过向目标地址发送不同TTL的数据包,每次TTL+1,直至目标地址。
问题二:在以上两个实作中,如果你留意路径中的节点,你会发现无论是访问百度还是棋歌教学网,路径中的第一跳都是相同的,甚至你应该发现似乎前几个节点都是相同的,你的解释是什么?
第一个节点是自己电脑所处的交换机,所以第一个节点都相同。对于有几个节点是相同的我认为是数据出去要经过网关,而本地过网关的路劲都大致相同,所以前几个节点都是相同的。
问题三:在追踪过程中,你可能会看到路径中某些节点显示为 * 号,这是发生了什么?
该节点等待超时。
四、ARP
实作一:运行 arp -a 命令查看当前的 arp 缓存, 请留意缓存了些什么。
然后 ping 一下你旁边的计算机 IP(注意,需保证该计算机的 IP 没有出现在 arp 缓存中,或者使用 arp -d * 先删除全部缓存),再次查看缓存,你会发现一些改变,请作出解释。
实作三:一般而言,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 项添加失败: 请求的操作需要提升” 这样的信息,表示命令没能执行成功,你该如何解决?
出现此问题是修改指定ip地址的时候需要使用netsh命令
问题二:在实作三中,为何缓存中常常有网关的信息?
我们将网关或其它计算机的 arp 信息设置为静态有什么优缺点?
缓存中常有网关信息是因为缓存本身记录了用户访问过的pc网卡mac物理地址。我们将网关或其他计算机的arp信息设置为静态的优点有:便于以固定的IP地址或IP地址分组产生的流量为依据管理,可以避免用户忘记密码而进行的繁琐事务流程;缺点有:合法用户分配的地址可能被非法盗用,因而也容易给合法用户造成损失和潜在的安全隐患。
五、DHCP
实作一:一般地,我们自动获取的网络配置信息包括:IP 地址、子网掩码、网关 IP 以及 DNS 服务器 IP 等。使用 ipconfig/release 命令释放自动获取的网络配置,并用 ipconfig/renew 命令重新获取,了解 DHCP 工作过程和原理
问题一:如果你没能成功的释放,请思考有哪些可能的原因并着手进行解决?
问题二:在Windows系统下,如果由于某种原因计算机不能获取 DHCP 服务器的配置数据,那么Windows将会根据某种算法自动配置为 169.254.x.x 这样的 IP 地址。显然,这样的 IP 以及相关的配置信息是不能让我们真正接入 Internet 的,为什么?既然不能接入 Internet,那么Winodws系统采用这样的方案有什么意义?
因为自动配置的IP地址和信息只是短暂性的解决计算机不能获取 DHCP 服务器的配置数据的问题,要真正的接入Internet还是得本身计算机的正确IP地址。意义是假如某天因DHCP服务器问题从而不能获得网络配置,那么我们可以查看隔壁教室计算机的配置信息来手动进行网络配置,从而使该计算机能够接入Internet。
六、netstat
实作一:Windows 系统将一些常用的端口与服务记录在 C:\WINDOWS\system32\drivers\etc\services 文件中,请查看该文件了解常用的端口号分配。
实作二:使用 netstat -an 命令,查看计算机当前的网络连接状况。更多的 netstat 命令选项.
七、DNS
实作一:Windows 系统将一些固定的/静态的 DNS 信息记录在 C:\WINDOWS\system32\drivers\etc\hosts 文件中,如我们常用的 localhost 就对应 127.0.0.1 。请查看该文件看看有什么记录在该文件中。
实作二:解析过的 DNS 记录将会被缓存,以利于加快解析速度。请使用 ipconfig /displaydns 命令查看。我们也可以使用 ipconfig /flushdns 命令来清除所有的 DNS 缓存。
实作三:
问题一:上面秘籍中我们提到了使用插件或自己修改 hosts 文件来屏蔽广告,思考一下这种方式为何能过滤广告?如果某些广告拦截失效,那么是什么原因?你应该怎样进行分析从而能够成功屏蔽它?
hosts文件是一个用于存储计算机网络中节点信息的文件,它可以将主机名映射到相应的IP地址,实现DNS的功能,它可以由计算机的用户进行控制。
hosts相当于一个字典,如果查到输入的域名在hosts之中,则会先调用其对应的IP,而不通过DNS,因此能够通过手动添加修改错误的<ip-网址>来达到屏蔽某网站的目的。通过将127.0.0.1广告链接设置为广告推送链接,从而广告链接就不会访问到本机,而是访问它自己的服务器。
如果广告拦截失效,是因为有跨服务器访问问题,可以使用adsafe广告管家解决这个问题
八、cache
实作一:
实作二:
wireshark实验
一.数据链路层
实作一:
- 熟悉 Ethernet 帧结构 使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等
你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因。
Wireshark 抓包前,在物理层网卡已经去掉了一些之前几层加的东西,因此,没有校验字段.。
实作二:了解子网内/外通信时的 MAC 地址
同一子网的ip地址为192.168.13.22
- 然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
问题:通过以上的实验,你会发现:
1、访问本子网的计算机时,目的 MAC 就是该主机的
2、访问非本子网的计算机时,目的 MAC 是网关的
请问原因是什么?
因为访问本子网的计算机时,是两台主机在进行通信,所以MAC是目标主机的。而当要访问非本子网的计算机时,首先数据首先要到达本子网的网关,再有网关进行传输,所以目的MAC是网关的。
- 再次 ping www.cqjtu.edu.cn (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?
实作三:掌握ARP解析过程
- 为防止干扰,先使用 arp -d * 命令清空 arp 缓存
- 再次使用 arp -d * 命令清空 arp 缓存
问题:通过以上的实验,你应该会发现
1、ARP 请求都是使用广播方式发送的
2、如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP, 那么 ARP 解析将得到网关的 MAC。请问为什么?
因为当没有配置缺省网关的计算机要和其他网络中的计算机实现通信时,网关收到源计算机的ARP请求会使用自己的MAC地址与目标计算机的IP地址对源计算机进行应答,访问非子网IP时是通过路由器访问的,路由器再把发出去,目标IP收到请求后,再通过路由器端口IP返回去,那么ARP解析将会得到网关的MAC。
二.网络层
作业一: 熟悉 IP 包结构 使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。
问题:为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?
能解决`长为56字节时有16个字节为填充的字节的问题
作业二、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事件
- 请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。
一共有15个节点,中间省略了一部分
在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?
以最近的2的n次方为总生命周期,TTL为50时,可以推测为64,则中间有14跳
传输层
实作一: 熟悉 TCP 和 UDP 段结构
- 用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
- 用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
问题:由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?
端口代表着接收与收发端不同的应用程序;源端口与目的端口相连,实现两个程序之间的通信。
实作二: 分析 TCP 建立和释放连接
- 打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP
Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。
第一次握手Ack=0,Syn=1
第二次握手Ack=1,Syn=0
第三次握手,Ack=1,Syn=0
- 请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
第一次握手Ack=1,Fin=1
第二次握手Ack=1,Fin=0
第三次握手,Ack=1,FIn=1
第四次握手,Ack=1,Fin=0
问题一:去掉 Follow TCP Stream,即不跟踪一个 TCP 流,你可能会看到访问 qige.io 时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?
这属于短连接,这为了实现多个用户进行访问,对业务频率不高的场合,不让其长期占用通道。一个网页由多个部分组成,在头部的link标签中可能也有很多链接来寻找一些css或者js文件等其他文件。并行查找,加快网页展示速度。
问题二:我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?
服务器向客户端发送断开连接和回复同意断开连接合成一次挥手。
四、应用层
作业一:了解 DNS 解析
- 先使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用
Wireshark 任意抓包(可用 dns 过滤)。
- 你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53号端口返回了结果。
- 可了解一下 DNS 查询和应答的相关字段的含义
问题:你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?
DNS不止一个的原因可能是DNS解析过程是先从浏览器的DNS缓存中检查是否有这个网址的映射关系,如果有,就返回IP,完成域名解析;如果没有,操作系统会先检查自己本地的hosts文件是否有这个网址的映射关系,如果有,就返回IP,完成域名解析;如果还没有,电脑就要向本地DNS服务器发起请求查询域名;本地DNS服务器拿到请求后,先检查一下自己的缓存中有没有这个地址,有的话直接返回;没有的话本地DNS服务器会从配置文件中读取根DNS服务器的地址,然后向其中一台发起请求;直到获得对应的IP为止。
作业二:了解 HTTP 的请求和应答
- 打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。
- 请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么命令,如:GET, POST。并仔细了解请求的头部有哪些字段及其意义。
- 请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义。
应答的代码是8538
Server:服务器通过这个头告诉浏览器服务器的类型
Transfer-Encoding:告诉浏览器数据的传送格式
Content- Type:表示后面的文档属于什么MIME类型
Cache-Control:指定请求和响应遵循的缓存机制
问题:刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的 304 代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答 304 应答而不是常见的 200 应答?
浏览器中的缓存,可以直接在缓存区获取到需要的内容,不需要服务器在回复对应的内容,可以减少服务器的一些工作,减小开销。采用200应答就是要完全的将内容发送给客服端,这个会增加服务器的一些开销等。