验证性实验
ipconfig
ipconfig
是微软操作系统的计算机上用来控制网络连接的一个命令行工具。它的主要用来显示当前网络连接的配置信息(/all
参数)。
实作一
使用ipconfig/all
查看自己计算机的网络配置,尽可能明白每行的意思,特别注意IP
地址、子网掩码 Subnet Mask
、网关Gateway
。
实作二
问题:
你的计算机和旁边的计算机是否处于同一子网,为什么?
答:处于同一子网,因为我们都连接的校园网。
ping
PING
(Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序 。ping
是工作在 TCP/IP 网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态。
实作一
要测试到某计算机如 重庆交通大学 Web 服务器的连通性,可以使用 ping www.cqjtu.edu.cn
命令,也可直接使用 IP 地址。
请掌握使用该命令后屏幕显示的反馈回来信息的意思,如:TTL、时间等。
反馈回来的信息包括字节、时间、TTL,它们的意思是:
- 字节:它的大小
- 时间:发送这个数据需要的时间
- TTL:这个数据包的寿命
实作二
使用 ping/?
命令了解该命令的各种选项并实际使用。
问题:
假设你不能ping
通某计算机或 IP,但你确定该计算机和你之间的网络是连通的,那么可能的原因是什么?该如何处理能保证ping
通?
答:当网络出现故障不能访问某计算机如14.215.177.39
(百度的 IP 地址之一 ) 时,我们一般可采用由近及远的连通性测试来确定问题所在。现假设我的 IP 是192.168.1.89
,我旁边计算机的 IP 是192.168.1.64
,网关的 IP 是192.168.1.1
,那么过程如下:
ping 127.0.0.1
测试自己计算机的状态,如果 OK,那么说明本机网络软件硬件工作正常,否则,问题在本机,检查本机 TCP/IP 配置即网卡状态等
2.ping 192.168.1.64
测试到旁边计算机的连通性,如果OK,那么说明本子网内部工作正常,否则,问题在本机网络出口到交换机之间,检查本机网卡到交换机的连线等
3.ping 192.168.1.1
测试到网关的连通性,如果 OK,那么说明本子网出口工作正常,否则,问题在网关,报告给网管ping 14.215.177.39
测试到百度的连通性,如果 OK,那就 OK,否则,问题在网关以外,报告给网管
问题:
假设在秘籍中进行的网络排查中,ping
百度的 IP 即ping 14.215.177.39
没问题,但ping
百度的域名即ping www.baidu.com
不行,那么可能的原因是什么?如何进行验证和解决?
答:
- 能ping通IP 则代表链路是通的,但是ping不通域名只能说明是域名解析出现了问题。
- 可以使用nslookup + 域名 看下是哪个域名服务器,我们很多时候都是使用自动获取DNS服务器,但是有些时候,使用默认的DNS服务器是ping 不通域名的,此时可以将DNS 配置成固定的,比如google的DNS 8.8.8.8 或者电信的 101.226.4.6或者114.114.114.114。
- 如果还是Ping不通 则可联系给域名服务的服务商,他们会给出dns服务器。
tracert
TRACERT
(Trace Route 的组合缩写),也称为路由追踪,该命令行程序可用于跟踪 Internet 协议 (IP) 数据包传送到目标地址时经过的路径。
实作一
要了解到某计算机如 www.baidu.com 中间经过了哪些节点(路由器)及其它状态,可使用tracert www.baidu.com
命令,查看反馈的信息,了解节点的个数。
可通过网站 http://ip.cn 查看这些节点位于何处,是哪个公司的,大致清楚本机到百度服务器之间的路径。
通过http://ip.cn查看结果:
- 192.168.64.95 内网IP 内网IP
- 192.168.25.254 内网IP 内网IP
- 172.16.130.25 内网IP 内网IP
- 222.176.65.57 中国 重庆 重庆市 电信
- 222.176.65.89 中国 重庆 重庆市 电信
- 113.96.5.58 中国 广东省 广州市 电信
- 113.96.11.74 中国 广东省 广州市 电信
- 14.29.117.238 中国 广东省 广州市 电信
- 14.215.177.39 中国 广东省 广州市 电信
实作二
ping.pe
这个网站可以探测从全球主要的 ISP 到某站点如 https://qige.io 的线路状态,当然也包括各线路到该主机的路由情况。请使用浏览器访问 http://ping.pe/qige.io 进行了解。
问题一:
tracert
能告诉我们路径上的节点以及大致的延迟等信息,那么它背后的原理是什么?本问题可结合第二部分的 Wireshark 实验进行验证。
答:
tracert发出TTL值为1的ICMP数据包(40个字节、源地址、目标地址和发出时间标签,一般发3个); 当到达路径上第一个路由器时,路由器会将,TTL值减1; 此时TTL值为0,该路由器将此数据包丢弃,向源地址返回一个ICMP超时通知(数据包的源地址、路由器的IP地址); 当tracert收到该数据包,获得了这个路径上的第一个路由器的地址;tracert再发送另一个TTL为2的数据包;第一个路由器会将此数据包转发给第二个路由器;当TTL=0,第二个路由器返回一个超时通知,tracert得到第二个路由器地址;Tracert每次发出数据报时便会将TTL加1,发现下一个路由器,这个动作一直重复,直到到达目的地或者确定目标主机不可到达为止,到达目的IP后,目标主机并不返回超时报文,Tracert发送数据报时,会选择一个一般应用程序不会使用的号码来做端口(3000以上),当到达目的地后,目标主机返回一个ICMP port unreachable(端口不可达)的消息,当tracert收到这个消息后,就知道目的地到达了。
问题二:
在以上两个实作中,如果你留意路径中的节点,你会发现无论是访问百度还是棋歌教学网,路径中的第一跳都是相同的,甚至你应该发现似乎前几个节点都是相同的,你的解释是什么?
答:因为无论是访问百度还是棋歌教学网,都需要经过同一个交换机进入通信的子网,所以路径中的第一跳都是相同的,甚至前几个节点都是相同的。
问题三:
在追踪过程中,你可能会看到路径中某些节点显示为 * 号,这是发生了什么?
答:没有出现具体的信息反馈,请求超时。
ARP
ARP(Address Resolution Protocol)即地址解析协议,是用于根据给定网络层地址即 IP 地址,查找并得到其对应的数据链路层地址即 MAC地址的协议。 ARP 协议定义在 1982 年的 RFC 826。
实作一
运行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 信息设置为静态有什么优缺点?
答:
- 因为缓存本身记录着访问过的pc网卡MAC物理地址;
- 优点:便于管理,特别是在根据IP地址限制网络流量的局域网中,以固定的IP地址或IP地址分组产生的流量为依据管理,可以免除在按用户方式计费时用户每次上网都必须进行的身份认证的繁琐过程,同时也避免了用户经常忘记密码的尴尬 。
缺点:存在安全隐患,由于静态分配IP地址的弱点可能存在非法盗用。
DHCP
DHCP(Dynamic Host Configuration Protocol)即动态主机配置协议,是一个用于 IP 网络的网络协议,位于 OSI 模型的应用层,使用 UDP 协议工作,主要有两个用途:
- 用于内部网或网络服务供应商自动分配 IP 地址给用户
- 用于内部网管理员对所有电脑作中央管理
简单的说,DHCP 可以让计算机自动获取/释放网络配置。
实作一
一般地,我们自动获取的网络配置信息包括:IP 地址、子网掩码、网关 IP 以及 DNS 服务器 IP 等。使用 ipconfig/release
命令释放自动获取的网络配置,并用 ipconfig/renew
命令重新获取,了解 DHCP 工作过程和原理。
使用 ipconfig/release
命令释放自动获取的网络配置:
用 ipconfig/renew
命令重新获取:
问题:
在Windows系统下,如果由于某种原因计算机不能获取 DHCP 服务器的配置数据,那么Windows将会根据某种算法自动配置为 169.254.x.x 这样的 IP 地址。显然,这样的 IP 以及相关的配置信息是不能让我们真正接入 Internet 的,为什么?既然不能接入 Internet,那么Winodws系统采用这样的方案有什么意义?
答:
DHCP 服务器通过广播一条提供消息来响应客户机。该提供消息中包含选定的 IP 地址以及有关可为客户机配置的服务的信息。每台服务器都会暂时保留所提供的 IP 地址,直到客户机确定是否使用该 IP 地址为止。所以那个自动配置的地址就是这样来的。
netstat
无论是使用 TCP 还是 UDP,任何一个网络服务都与特定的端口(Port Number)关联在一起。因此,每个端口都对应于某个通信协议/服务。
netstat
(Network Statistics)是在内核中访问网络连接状态及其相关信息的命令行程序,可以显示路由表、实际的网络连接和网络接口设备的状态信息,以及与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络服务运行状况。
实作一
Windows 系统将一些常用的端口与服务记录在C:\WINDOWS\system32\drivers\etc\services
文件中,请查看该文件了解常用的端口号分配。
实作二
使用netstat -an
命令,查看计算机当前的网络连接状况。更多的netstat
命令选项,可参考上面链接4
和 5
。
DNS
DNS(Domain Name System)即域名系统,是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 的 53 号端口。
实作一
Windows 系统将一些固定的/静态的 DNS 信息记录在C:\WINDOWS\system32\drivers\etc\hosts
文件中,如我们常用的localhost
就对应127.0.0.1
。请查看该文件看看有什么记录在该文件中。
实作二
解析过的 DNS 记录将会被缓存,以利于加快解析速度。请使用ipconfig /displaydns
命令查看。我们也可以使用ipconfig /flushdns
命令来清除所有的 DNS 缓存。
使用ipconfig /displaydns
命令查看:
使用ipconfig /flushdns
命令来清除所有的 DNS 缓存:
再次查看:
实作三
使用 nslookup qige.io
命令,将使用默认的 DNS 服务器查询该域名。当然你也可以指定使用 CloudFlare(1.1.1.1)
或Google(8.8.8.8)
的全球 DNS 服务器来解析,如:nslookup qige.io 8.8.8.8
,当然,由于你懂的原因,这不一定会得到正确的答案。
指定使用 CloudFlare(1.1.1.1)
或Google(8.8.8.8)
的全球 DNS 服务器来解析:
问题:
上面秘籍中我们提到了使用插件或自己修改 hosts 文件来屏蔽广告,思考一下这种方式为何能过滤广告?如果某些广告拦截失效,那么是什么原因?你应该怎样进行分析从而能够成功屏蔽它?
答:
查找hosts里面是不是有关于当前域名的IP指定信息,如果你输入当前域名有指定IP信息,那么就不再进行该域名的DNS解析了,浏览器会直接向该IP发送请求。简单来说hosts就是你的本地DNS服务器,你可以通过修改hosts文件将域名“解析”到任何地址。
cache
cache 即缓存,是 IT 领域一个重要的技术。我们此处提到的 cache 主要是浏览器缓存。
浏览器缓存是根据 HTTP 报文的缓存标识进行的,是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。
实作一
打开 Chrome 或 Firefox 浏览器,访问 https://qige.io ,接下来敲 F12
键 或 Ctrl + Shift + I
组合键打开开发者工具,选择 Network
面板后刷新页面,你会在开发者工具底部看到加载该页面花费的时间。请进一步查看哪些文件被 cache了,哪些没有。
实作二
接下来仍在 Network
面板,选择 Disable cache
选项框,表明当前不使用 cache,页面数据全部来自于 Internet,刷新页面,再次在开发者工具底部查看加载该页面花费的时间。你可比对与有 cache 时的加载速度差异。