目录
1.ipconfig
实作一
ipconfig是微软操作系统的计算机上用来控制网络连接的一个命令行工具,使用ipconfig/all查看自己计算机的网络配置,IP地址、子网掩码Subnet Mask、网关Gateway。
ipconfig/all能为DNS和WINS服务器显示它已配置且所要使用的附加信息(如IP地址等),并且显示内置于本地网卡中的物理地址(MAC)。
物理地址(MAC)为DC-E9-94-28-DD-D5,MAC地址为媒体访问控制地址,也称为局域网地址,以太网地址或物理地址,是一个用来确认网上设备位置的地址。
IP地址:192.168.0.103,采用网际协议版本4,是网际协议中用于标识发送或接收数据报的设备的一串数字。
子网掩码:255.255.255.0(/24),子网掩码它有两个主要作用:一是屏蔽部分IP地址,区分网络标识和主机标识,解释IP地址是在局域网上还是在远程网络上,其次将一个大的IP网络划分为几个小的子网络。
网关实质上是一个网络通向其他网络的IP地址。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。
实作二
使用 ipconfig/all
查看其他计算机的网络配置,看看有什么异同。
可以看出另一台计算机的Mac地址、IP地址、网关、DNS服务器等等与我自己的计算机不同。
问题一:你的计算机和旁边的计算机是否处于同一子网,为什么?
因为旁边没有其他的计算机,所以借用了朋友的计算机,可以看出舍友的网络号为192.168.1.0,而我的网络号为192.168.0.0,所以不是处于同一子网。
2.ping
实作一
要测试到某计算机如 重庆交通大学 Web 服务器的连通性,可以使用 ping www.cqjtu.edu.cn
命令,也可直接使用 IP 地址。
检测发现连接畅通,其中返回的内容包括:字节,时间以及TTL(Time To Live)。
字节:表示的就是发送数据包的大小
时间:表示主机回答响应的时间
TTL:指的是生存时间,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量,限制IP数据包在计算机网络中的存在的时间,每经过一个路由器节点TTL就会减去1,所以这里的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 配置即网卡状态等ping 192.168.1.64
,测试到旁边计算机的连通性,如果OK,那么说明本子网内部工作正常,否则,问题在本机网络出口到交换机之间,检查本机网卡到交换机的连线等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不通说明域名解析不出来,出了问题。
解决方法:负责解析域名的,就是DNS,首先清空一下DNS缓存,命令窗口ipconfig/flushdns然后设置电脑的DNS为google的DNS 8.8.8.8 或者电信的 101.226.4.6或者114.114.114.114大部分是可以的 如果还是Ping不通 则可联系给域名服务的服务商,他们会给出dns服务器。
另外,经常有同学问到的:“能上 QQ,但不能上网” 跟这个问题的原因是相似的。
3.tracert
实作一
要了解到某计算机如www.baidu.com中间经过了哪些结点(路由器)及其他状态,可使用tracert www.baidu.com命令,查看反馈的信息,了解结点的个数。
tracert工作原理:tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。
tracert工作过程:tracert是利用ICMP和TTL进行工作的。首先Tracert会发出TTL值为1的ICMP数据报。当到达路径上的第一个路由器时,路由器会将TTL值减1,此时TTL值变成0,该路由器会将此数据报丢弃,并返回一个超时回应数据报(包括数据报的源地址、内容和路由器的IP地址)。当Tracert收到该数据报时,它便获得了这个路径上的第一个路由器的地址。接着,Tracert再发送另一个TTL为2的数据报,第一个路由器会将此数据报转发给第二个路由器,而第二个路由器收到数据报时,TTL为0。第二个路由器便会返回一个超时回应数据报,从而Tracert便获得了第二个路由器的地址。这个动作一直重复,直到到达目的地或者确定目标主机不可到达为止。
可通过网站 http://ip.cn 查看这些节点位于何处,是哪个公司的,大致清楚本机到百度服务器之间的路径。
实作二
ping.pe 这个网站可以探测从全球主要的 ISP 到某站点如 https://qige.io 的线路状态,当然也包括各线路到该主机的路由情况。请使用浏览器访问 http://ping.pe/qige.io 进行了解。
问题一:
tracert
能告诉我们路径上的节点以及大致的延迟等信息,那么它背后的原理是什么?本问题可结合第二部分的 Wireshark 实验进行验证。
原理:tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。tracert是利用ICMP和TTL进行工作的。首先Tracert会发出TTL值为1的ICMP数据报。当到达路径上的第一个路由器时,路由器会将TTL值减1,此时TTL值变成0,该路由器会将此数据报丢弃,并返回一个超时回应数据报(包括数据报的源地址、内容和路由器的IP地址)。当Tracert收到该数据报时,它便获得了这个路径上的第一个路由器的地址。接着,Tracert再发送另一个TTL为2的数据报,第一个路由器会将此数据报转发给第二个路由器,而第二个路由器收到数据报时,TTL为0。第二个路由器便会返回一个超时回应数据报,从而Tracert便获得了第二个路由器的地址。这个动作一直重复,直到到达目的地或者确定目标主机不可到达为止。
问题二:
在以上两个实作中,如果你留意路径中的节点,你会发现无论是访问百度还是棋歌教学网,路径中的第一跳都是相同的,甚至你应该发现似乎前几个节点都是相同的,你的解释是什么?
原因:因为都是从本台电脑发送出去的,我这台电脑连接的是我们学校的路由器,每次访问互联网都要经过它,也就是说网关如果始终是一样的,那么每次都得经过,只要本地默认网关不变,访问外部资源的前几跳都不会发生变化。
问题三:
在追踪过程中,你可能会看到路径中某些节点显示为 * 号,这是发生了什么?
原因:有的路由器在TTL为零时,不发送ICMP超时消息,直接将它们丢弃,故主机无法获得该TTL值对应的路由器IP地址,用 * 表示。
4.ARP
ARP(Adress Resolution Protocol)即地址解析协议,是用于根据给定网络层地址即IP地址,查找并得到其对应的数据链路层地址即MAC地址的协议。ARP协议定义在1982年的RFC 826。
ARP原理: 请求应答。在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装。
ARP的工作流程: 在同一个局域网内,PC1想向PC2发送数据,数据包含PC1的IP地址、MAC地址和PC2的IP地址,此时还需要PC2的MAC地址。首先,PC1广播请求包,其他终端接收到后,检查目的IP地址,与本机不相同则丢弃。当PC2接收到该请求包后,将PC1的IP和MAC映射信息存储在本地的ARP缓存表,再向PC1点到点传播回应包。PC1接收到回应包后,将PC2的IP和MAC映射信息存储在本地。过程形象化表示为:PC1先自我介绍,然后才是询问。
实作一
运行arp -a命令查看当前的 arp 缓存, 请留意缓存了些什么。
可以看出缓存了接口地址、Mac地址、IP地址,以及为每个地址表明了动态或者静态属性。
ping旁边的计算机 IP(注意,需保证该计算机的 IP 没有出现在 arp 缓存中,或者使用 arp -d *
先删除全部缓存),再次查看缓存,发现ARP缓存表多了旁边计算机的IP到MAC地址的映射,并且类型为动态。
原因:因为旁边另一台计算机与本机位于同一个局域网内,且经检查另一台的IP、MAC地址映射没有记录,则需要本机广播请求包,再接收到请求包后,点到点发送回应包给本机,将IP、MAC地址映射添加到本机的ARP缓存表。
实作二
请使用 arp /?
命令了解该命令的各种选项。
实作三
一般而言,arp 缓存里常常会有网关的缓存,并且是动态类型的。
假设当前网关的 IP 地址是 192.168.0.1
,MAC 地址是 8c-f2-28-d0-6b-b2
,请使用 arp -s 192.168.0.1 8c-f2-28-d0-6b-b2
命令设置其为静态类型的。
发现ARP 项添加失败: 请求的操作需要提升
问题一:
你可能会在实作三的操作中得到 "ARP 项添加失败: 请求的操作需要提升" 这样的信息,表示命令没能执行成功,你该如何解决?
首先进入管理员模式,输入netsh i i show in 先找出当前的网卡idx号为14
运行:netsh -c i i add neighbors 14 192.168.0.1
8c-f2-28-d0-6b-b2
再运行:arp -a 进行查看:
问题二:
在实作三中,为何缓存中常常有网关的信息?
原因:缓存中是主机曾经访问过的记录,访问其他地址需要网关信息,因此缓存中会存在网关的信息。
问题三:
我们将网关或其它计算机的 arp 信息设置为静态有什么优缺点?
优缺点:将网关的arp设置为静态可以有效预防arp欺骗,避免计算机受到攻击
缺点就是不够灵活,并且麻烦。
ARP 欺骗
ARP欺骗(ARP spoofing),又称ARP毒化(ARP poisoning,网络上多译为ARP病毒)或ARP攻击,是针对以太网地址解析协议(ARP)的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网络上特定计算机或所有计算机无法正常连线。
如何防范ARP欺骗?
1.建议使用静态 ARP 缓存,用手工方法更新缓存中的记录,使 ARP 欺骗无法进行。
2.MAC 地址绑定,使网络中每一台计算机的 IP 地址与硬件地址一一对应,不可更改。
5.DHCP
DHCP(Dynamic Host Configuration Protocol)即动态主机配置协议,是一个用于 IP 网络的网络协议,位于 OSI 模型的应用层,使用 UDP 协议工作,主要有两个用途:
- 用于内部网或网络服务供应商自动分配 IP 地址给用户
- 用于内部网管理员对所有电脑作中央管理
DHCP基本原理:DHCP,Dynamic Host Configuration Protocol,动态主机配置协议,是一种可以使主机开机后自动获取IP地址、子网掩码、DNS等信息的技术手段。应用DHCP技术,不仅可以简化用户的上网流程,方便用户上网,如果从企业的角度来说,还可以实现对公司内部网络用户的管理。DHCP是一种C/S模式的网络协议,要想实现DHCP功能,首先主机必须支持DHCP Client功能,其次网络中还必须拥有一台DHCP服务器,并且主机和该服务器之间必须能够正常通信。因为DHCP中有些报文时以广播的形式,因此DHCP Server和DHCP Client一般必须要在一个子网内。
DHCP服务器,既可以是一台主机,华为和思科系列路由交换设备也可以实现DHCP服务器功能。
DHCP使用UDP协议实现通信,网络层协议号字段为0x11,DHCP Client端口号68,DHCP Server端口67。
实作一
一般地,我们自动获取的网络配置信息包括:IP 地址、子网掩码、网关 IP 以及 DNS 服务器 IP 等。使用 ipconfig/release
命令释放自动获取的网络配置,并用 ipconfig/renew
命令重新获取,了解 DHCP 工作过程和原理。
renew后网络配置有了,而且和之前的网络配置一样
问题一:
如果你没能成功的释放,请思考有哪些可能的原因并着手进行解决?
原因:很可能没有开启DHCP客户端服务;解决办法是在 “ win+R ” 然后输入 “ sc config DHCP start= AUTO” 重启后就OK 了。
问题二:在Windows系统下,如果由于某种原因计算机不能获取 DHCP 服务器的配置数据,那么Windows将会根据某种算法自动配置为 169.254.x.x 这样的 IP 地址。显然,这样的 IP 以及相关的配置信息是不能让我们真正接入 Internet 的,为什么?既然不能接入 Internet,那么Winodws系统采用这样的方案有什么意义?
原因:169.254.x.x是所谓的自动专用IP地址,此范围内的IP意味着计算机无法看到网络,使用DHCP的计算机需要有一个外部服务器告诉它要使用的 IP 地址。如果没有网络连接,计算机将无法与服务器通信。
意义:可以在169.254.x.x内的子网范围内进行通信,用于单链路的两个主机之间的链路本地地址,而没有另外指定IP地址。
6.netstat
无论是使用 TCP 还是 UDP,任何一个网络服务都与特定的端口(Port Number)关联在一起。因此,每个端口都对应于某个通信协议/服务。
netstat
(Network Statistics)是在内核中访问网络连接状态及其相关信息的命令行程序,可以显示路由表、实际的网络连接和网络接口设备的状态信息,以及与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络服务运行状况。
实作一
Windows 系统将一些常用的端口与服务记录在 C:\WINDOWS\system32\drivers\etc\services
文件中,请查看该文件了解常用的端口号分配。
实作二
使用 netstat -an
命令,查看计算机当前的网络连接状况。
netstat 命令相关选项:
netstat -an 命令,查看计算机当前的网络连接状况 -a:显示所有连接和侦听端口;
-n:以数字形式显示地址和端口号;
-t: 显示TCP传输协议的连线状况;
-u:显示UDP传输协议的连线状况;
-s: 显示每个协议的统计信息; -r: 显示路由表
7.DNS
DNS(Domain Name System)即域名系统,是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 的 53 号端口。
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 服务器来解析,如:nslookup qige.io 8.8.8.8
问题一:
使用插件或自己修改 hosts
文件来屏蔽广告,思考一下这种方式为何能过滤广告?如果某些广告拦截失效,那么是什么原因?你应该怎样进行分析从而能够成功屏蔽它?
原因:在文件中添加该广告链接,并且指定一个ip地址,因为hosts文件优先级是高于DNS服务器,这样浏览器解析该广告链接时,优先hosts文件,这样我们就相当于更改了该链接本来的ip地址,从而使该链接失效。可以通过将127.0.0.1设置为广告推送的链接,从而广告链接就不会访问到本机了。如果拦截失效,可能是因为跨服务器访问问题,可以使用adsafe广告管家来进行解决。
8.cache
cache 即缓存,是 IT 领域一个重要的技术。我们此处提到的 cache 主要是浏览器缓存。浏览器缓存是根据 HTTP 报文的缓存标识进行的,是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。
浏览器缓存原理:当网页需要资源的时候,首先访问浏览器缓存,如果浏览器缓存没有数据时,那么就会请求服务器端,服务器进行响应数据,浏览器就会同时把数据资源存储起来,当网页再次需要这个资源的时候,还是先访问浏览器缓存,发现有数据就会直接返回,这样就可以缩短网络请求资源的距离,减少延迟等。
实作一
打开 Chrome 或 Firefox 浏览器,访问 https://qige.io ,接下来敲 F12
键 或 Ctrl + Shift + I
组合键打开开发者工具,选择 Network
面板后刷新页面,你会在开发者工具底部看到加载该页面花费的时间。请进一步查看哪些文件被 cache了,哪些没有。
花费的时间为0.2s左右,一些CSS样式资源、图片资源被缓存在cache中。
实作二
接下来仍然在Network面板,选择Disable cache选项框,表示当前页面不使用cache,页面数据全部来自于Internet,刷新页面,再次在开发者工具底部查看加载该页面花费的时间。对比有cache时的加载速度差异。
可以看到在当前页面不使用cache的情况下,加载的时间为1s,而在使用cache的情况下,只需要0.2s左右,加载速度是没使用cache的情况的5倍(大约),很大地加快了页面访问的速度。