一、验证性实验
ipconfig
✍ ipconfig 是微软操作系统的计算机上用来控制网络连接的一个命令行工具。它的主要用来显示当前网络连接的配置信息(/all 参数)。
实作一:
使用 ipconfig/all 查看自己计算机的网络配置,尽可能明白每行的意思,特别注意 IP 地址、子网掩码 Subnet Mask、网关 Gateway。
当我们在cmder上面输入ipconfig/all时就会弹出很多信息,下面我将对其中信息进行解说,由于部分内容会出现重复,因此只会对未重复的部分进行一次讲解。
![](https://i-blog.csdnimg.cn/blog_migrate/fa4f3664d01f04b0ba34deb9b4e4d738.png)
主机名:可以看到我们这台设备(主机名)叫:LAPTOP-BU205IS2,这个参数可以在“我的电脑”→“属性”里面进行修改。
主DNS后缀:默认为空,实际上是用来负责主机名和Internet地址之间的解析,如果不为空,则会在ping主机的时候为主机名后面自动加上这项内容并通过DNS服务器来进行解析
节点类型:计算机网络中的节点又称网络单元,一般可分为三类:访问节点、转接节点、混具备以上两种节点的功能。
IP路由已启用:如果是开启状态,那么这个设备将具有路由转发的功能,当这个设备具有多块网卡并连接不同的电脑时,这些电脑可以相互ping通访问。目前这个信息已经被“路由远程访问”取代,因此该功能在大多数设备默认关闭,但依旧可以使用。
WINS代理已启用:全称:Windows Internet Name Service,负责用来将主机名转换解析为IP地址,通常和DHCP服务一起工作,即用户向DHCP服务器索取IP地址时,DHCP服务提供的IP地址就会被WINS服务器记录,从而让WINS服务器可以动态维护计算机名称地址与IP地址的资料库。
![](https://i-blog.csdnimg.cn/blog_migrate/34ad0dceca8409ae8adb25a88ffa3845.png)
以太网适配器即以太网网卡,以太网是“有线”网的一门网络技术。
媒体状态:这项信息用来显示当前设备是否接入该适配器
连接特定的DNS后缀:解析主机名时DNS服务器会帮助解析IP。实际上当我们需要制定一个有别于主DNS后缀的名称时,就可以使用一个特定的DNS后缀。
描述:当前适配器的品牌及其型号
物理地址:当前适配器的MAC地址(物理地址)
`DHCP已启用:即动态主机配置协议,DHCP服务器的主要作用其实是管理和分配IP地址,为大量的主机分配地址并且能够集中管理
自动配置已启用:IP地址自动获取
![](https://i-blog.csdnimg.cn/blog_migrate/2debc94b4f9e60028bfb1baaa01e6ba4.png)
这个地方很有意思,因为这台设备装有VirtualBox虚拟机,因此该部分实际上是虚拟网卡,主要的功能是将实际上的机器于虚拟机进行互联,实现资源和文件的共享。
本地链接IPv6地址: 即本地链接IP地址,IPv6地址有128位长,通常写成8组,是用来代替IPv4地址的下一版本互联网协议,首选则说明不止一个
IPv4地址:即本地局域网所在的ip地址,图中IP地址为C类,目前未分配的IPv4地址越来越少,存在耗尽问题。
子网掩码:必须结合IP地址一同使用,转换为二进制时前面的1表示网络号,后面的0表示主机号。子网掩码会告知路由器地址的哪个部分是网络地址,哪个部分是主机地址。
默认网关:又叫缺省网关,当主机找不到可用网关时会将数据发给默认网关。
DHCPv6 IAID:DHCPv6,可以配置IPv6地址,地址前缀长度,DNS server,DNS前缀,NTP server等,但是不会配置默认路由。每一个网卡都会对应有一个IAID,由客户端选取用于分配给该客户的每一IA。
DHCPv6 客户端 DUID:DUID对于特定的client是不可变的,即使这个client的linklocal地址改变了也是不会改变。
DNS服务器:即域名系统服务器,该服务器会将网址翻译为IP地址。
TCPIP上的NetBIOS:即网络基本输入/输出系统协议。NetBIOS协议是一种在局域网上的程序可以使用的应用程序编程接口(API)。
![](https://i-blog.csdnimg.cn/blog_migrate/cedc278ddd9b55efcf3bf6d278c919bc.png)
无限局域网适配器,即无线网卡。本地连接后面的数字实际上是有含义的,在windows中,同一设备接入不同的位置时就会在设备的总类下增加同类设备,为了区分设备名称会在其后加以数字用来区分,9则表示一个设置了9个宽带连接。
![](https://i-blog.csdnimg.cn/blog_migrate/5631a7c40aa22750c8a13bb16312613a.png)
无线局域网网卡WLAN
获得租约的时间:由于路由器自动分配给设备动态IP地址,根据路由器品牌不同或设置不同,会在一段时间内再重新分配刷新一个新的IP,而这个获得租约时间即为当前IP地址被分配并开始使用的时间。
租约过期的时间:IP地址到期的时间,当这个IP地址过期后会自动分配一个新的IP地址给当前设备,通常情况下这个IP地址是不会改变的
DHCP 服务器:DHCP服务器的地址,会提供DHCP服务
![](https://i-blog.csdnimg.cn/blog_migrate/a9296eadd0a898ea84fa4848948bb569.png)
即蓝牙网络的网卡,不需要时可以禁用
实作二:
使用 ipconfig/all 查看旁边计算机的网络配置,看看有什么异同。
![](https://i-blog.csdnimg.cn/blog_migrate/470ce5d099a090458ca18b8c45dd487a.jpeg)
可以看到主机名不同,以及网络适配器的描述也不相同,物理地址也不同
** ✎ 问题**
你的计算机和旁边的计算机是否处于同一子网,为什么?
是,因为连接的同一个路由器
ping
✍ PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序 。ping 是工作在 TCP/IP 网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态。
实作一:
要测试到某计算机如 重庆交通大学 Web 服务器的连通性,可以使用 ping www.cqjtu.edu.cn 命令,也可直接使用 IP 地址。
![](https://i-blog.csdnimg.cn/blog_migrate/0e0050f8c3470bc7913ed8c1448674c7.png)
在使用了ping www.cqjtu.edu.cn命令后,得到上图所示内容。
1.一共从218.70.34.236接收到4个数据包,每个数据包大小为32字节。
2.以时间=37ms为例子,这条消息则是指收到这个数据包往返用时37毫秒。
3.TTL是生存时间,每一个被发送出的IP信息包都有一个TTL域,该域被设置为一个较高的数值,当信息包在网络中被传输时,TTL的域值每通过一个路由器就会减一;当TTL 递减到0时,信息包被路由器抛弃。TTL=53则是指该数据包最多还能存活53跳。实际上TTL的推荐值一般为大于ping命令返回的TTL值的最近的2^n,因此可以认为被ping对象可能经过了64-53=11个路由器将数据包传递到本设备。
4.Ping的统计信息里面记录了发送数据包的个数,接收的数量已经过程中丢失的包的数量等信息,并且还统计了往返行程时间。
实作二:
使用 ping/? 命令了解该命令的各种选项并实际使用。
![](https://i-blog.csdnimg.cn/blog_migrate/5eca613d73026ebdaa6bcdc84a296849.png)
以上为关于ping的所有命令,下面将对这些命令进行简单操作
ping -t
![](https://i-blog.csdnimg.cn/blog_migrate/57e05d68d6cca15745d086ca77ce752c.png)
当接收了9个数据包时我们使用Ctrl+c停止命令,很明显,这与直接ping www.cqjtu.edu.cn不同,-t命令实际上是不会自动停止的,只有通过管理员命令才会停止。其返回的数据和pingwww.cqjtu.edu.cn一致,这里不做过多解释。
2.ping -a
![](https://i-blog.csdnimg.cn/blog_migrate/66f9cba0e0e7dbfd04a5b5190e4b43d9.png)
ping 218.70.34.236 -a 解析计算机名与 NetBios 名。就是可以通过 ping 它的 ip 地址,可以解析出主机名。这里218.70.34.236就是www.cqjtu.edu.cn的IP地址
3.ping -n count
![](https://i-blog.csdnimg.cn/blog_migrate/a0c797157c154b7d0f2ce438000e921d.png)
这条命令可以设置设备接收数据包的个数,这里我指定了接收到的数据包个数应为“1”,因此被ping对象返回的数据包也确实只有1个
4.ping -l size
![](https://i-blog.csdnimg.cn/blog_migrate/efe4f23473c936cbe9bbf9e8d680023f.png)
如图所示,这个命令可以改变被ping对象返回数据包的大小,这里我们要求返回的数据包大小为64字节,因此输入的命令是ping www.cqjtu.edu.cn -l 64。实际上,-l后面的数字是由范围规定的,即要求返回的数据包大小是有规定的,默认为32字节,最大为65500字节,当我们输入65501时,会发生以下情况。
![](https://i-blog.csdnimg.cn/blog_migrate/67c9aa794b79d9030e01da4dda3f5873.png)
5.ping -f
![](https://i-blog.csdnimg.cn/blog_migrate/b68ee830b095bd8e55744cef919ca1c9.png)
通常配合-l命令使用效果更加明显,-f是让返回数据包不进行拆分处理的命令,我们这里设置返回数据包的大小为5000字节,但是以以太网为例,单个数据包大小不能超过1500字节,因此需要拆包才能正常发送。
6.ping -i TTL
![](https://i-blog.csdnimg.cn/blog_migrate/00fc361f5a4f2bc43486ea40b6edb4e6.png)
设置数据包的生存时间,由于设置的TTL过小,因此被ping对象发送的数据包在传输过程中并未到达本设备就因为生存时间耗尽被抛弃,即TTL传输过程中过期。
7.ping -r count
![](https://i-blog.csdnimg.cn/blog_migrate/292930152d7b9267fdcec0d9bfb60419.png)
用来追踪记录数据包传送途中的路由,通常有效范围为1到9,多余9个将无法显示,并且此功能需要经过的路由器支持源路由功能。
8.ping -w timeout
![](https://i-blog.csdnimg.cn/blog_migrate/f02160745b8172a8c39d3a17c4bcd1d2.png)
这里设置了响应时间为10毫秒,当响应时间超过了这个数字将会显示请求超时
tracert
✍ TRACERT (Trace Route 的组合缩写),也称为路由追踪,该命令行程序可用于跟踪 Internet 协议 (IP) 数据包传送到目标地址时经过的路径。
实作一:
要了解到某计算机如 www.baidu.com 中间经过了哪些节点(路由器)及其它状态,可使用 tracert www.baidu.com 命令,查看反馈的信息,了解节点的个数。
可通过网站 http://ip.cn 查看这些节点位于何处,是哪个公司的,大致清楚本机到百度服务器之间的路径。
在使用命令后跟踪路由信息如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/5942a6a0eb04fca4fbc34744418d649c.png)
以数据: 1 3 ms 3 ms 2 ms 192.168.43.1为例,这里的1为路由节点数,3ms,3ms,2ms这三个时间信息则是为三次发送数据的返回时间,192.168.43.1是路由节点的ip地址。
下面的表格是通过 http://ip.cn查询到的信息
您查询的IP | 所在地理位置 |
192.168.43.1 | 内网IP 内网IP |
192.168.25.254 | 内网IP 内网IP |
172.16.2.1 | 内网IP 内网IP |
222.176.65.181 | 中国 重庆 重庆市 电信 |
222.176.65.205 | 中国 重庆 重庆市 电信 |
202.97.28.21 | 中国 广东省 广州市 电信 |
121.14.14.162 | 中国 广东省 广州市 电信 |
14.29.121.206 | 中国 广东省 广州市 电信 |
14.215.177.38 | 中国 广东省 广州市 电信 |
实作二:
ping.pe 这个网站可以探测从全球主要的 ISP 到某站点如 https://qige.io 的线路状态,当然也包括各线路到该主机的路由情况。请使用浏览器访问 http://ping.pe/qige.io 进行了解。
返回图片的大致内容如下:
![](https://i-blog.csdnimg.cn/blog_migrate/735a06afba8bda28cceb2d10dbd3da2a.png)
ARP
✍ ARP(Address Resolution Protocol)即地址解析协议,是用于根据给定网络层地址即 IP 地址,查找并得到其对应的数据链路层地址即 MAC地址的协议。 ARP 协议定义在 1982 年的 RFC 826。
实作一:
运行 arp -a 命令查看当前的 arp 缓存, 请留意缓存了些什么。
![](https://i-blog.csdnimg.cn/blog_migrate/957a585ea4d200255809d51d69d6edc0.png)
缓存了接口的Internet地址(IP),物理地址(Mac)以及类型
然后 ping 一下你旁边的计算机 IP(注意,需保证该计算机的 IP 没有出现在 arp 缓存中,
或者使用 arp -d * 先删除全部缓存),再次查看缓存,你会发现一些改变,请作出解释。
实作二:
请使用 arp /? 命令了解该命令的各种选项。
![](https://i-blog.csdnimg.cn/blog_migrate/5099af2d35eb984cbe14a6dc0301b224.png)
-a: 通过询问当前协议数据,显示当前 ARP 项。如果指定 inet_addr,则只显示指定计算机的 IP 地址和物理地址。如果不止一个网络接口使用 ARP,则显示每个 ARP 表的项。
-g: 与 -a 相同。
-v: 在详细模式下显示当前 ARP 项。所有无效项和环回接口上的项都将显示。
inet_addr: 指定 Internet 地址。
-N if_addr: 显示 if_addr 指定的网络接口的 ARP 项。
-d: 删除 inet_addr 指定的主机。inet_addr 可以是通配符 *,以删除所有主机。
-s: 添加主机并且将 Internet 地址 inet_addr与物理地址 eth_addr 相关联。物理地址是用连字符分隔的 6 个十六进制字节。该项是永久的。
eth_addr: 指定物理地址。
if_addr: 如果存在,此项指定地址转换表应修改的接口的 Internet 地址。如果不存在,则使用第一个适用的接口。
实作三:
一般而言,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 命令设置其为静态类型的。
![](https://i-blog.csdnimg.cn/blog_migrate/a3cb8276f1e2c5e76f765719ca5f80de.png)
请求操作失败!因为不是管理员身份。
🗣 TroubleShooting
你可能会在实作三的操作中得到 "ARP 项添加失败: 请求的操作需要提升" 这样的信息,表示命令没能执行成功,你该如何解决?
解:以管理员身份运行
netsh -c i i add neighbors 13 192.168.0.1 5c-d9-98-f1-89-64
✎ 问题
在实作三中,为何缓存中常常有网关的信息?
使用ARP命令,也可以用人工方式输入静态的网卡物理IP地址,为缺省网关和本地服务器等常用主机进行这项作业,有助于减少网络上的信息量。
我们将网关或其它计算机的 arp 信息设置为静态有什么优缺点?
优点:便于管理,静态arp绑定设置可以防止局域网内的ARP攻击。
缺点:工作量大
DHCP
✍ DHCP(Dynamic Host Configuration Protocol)即动态主机配置协议,是一个用于 IP 网络的网络协议,位于 OSI 模型的应用层,使用 UDP 协议工作,主要有两个用途:
用于内部网或网络服务供应商自动分配 IP 地址给用户
用于内部网管理员对所有电脑作中央管理
简单的说,DHCP 可以让计算机自动获取/释放网络配置。
实作一:
一般地,我们自动获取的网络配置信息包括:IP 地址、子网掩码、网关 IP 以及 DNS 服务器 IP 等。使用 ipconfig/release 命令释放自动获取的网络配置,并用 ipconfig/renew 命令重新获取,了解 DHCP 工作过程和原理。
ipconfig/release
![](https://i-blog.csdnimg.cn/blog_migrate/6b7ce387db49f6a4a2ca3e906e3bedbf.png)
ipconfig/renew
![](https://i-blog.csdnimg.cn/blog_migrate/67bb05bbcf86938e953b162582044497.png)
工作过程及原理:在使用DHCP服务时,用户的计算机从DHCP服务器那里获得上网的参数,然后DHCP 服务器接收到了客户机的请求信息后,回应客户请求信息,然后客户机接到回应后选择一个DHCP服务器分配给用户IP,然后服务器确定地址租约。DHCP客户机经历了在建立客户机使用的有效IP地址过程中的6个转换状态。这六个状态是:初始化、选择请求、捆绑、更新、重新捆绑。
✎ 问题
在Windows系统下,如果由于某种原因计算机不能获取 DHCP 服务器的配置数据,那么Windows将会根据某种算法自动配置为 169.254.x.x 这样的 IP 地址。显然,这样的 IP 以及相关的配置信息是不能让我们真正接入 Internet 的,为什么?既然不能接入 Internet,那么Winodws系统采用这样的方案有什么意义?
解:Windows系统为网卡设置169.254.x.x的保留IP,是因为当计算机不能获取DHCP服务时可以依靠保留IP实现互相通讯。自动配置的IP地址只能短暂性的解决计算机不能获取 DHCP 服务问题,需要真正的接入Internet还需要计算机正确的IP地址。这样做的意义是统一格式,让用户明白客户机无法得到DHCP的响应,好让用户自行排查故障。
netstat
✍ 无论是使用 TCP 还是 UDP,任何一个网络服务都与特定的端口(Port Number)关联在一起。因此,每个端口都对应于某个通信协议/服务。
netstat(Network Statistics)是在内核中访问网络连接状态及其相关信息的命令行程序,可以显示路由表、实际的网络连接和网络接口设备的状态信息,以及与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络服务运行状况。
实作一:
Windows 系统将一些常用的端口与服务记录在 C:\WINDOWS\system32\drivers\etc\services 文件中,请查看该文件了解常用的端口号分配。
![](https://i-blog.csdnimg.cn/blog_migrate/0f1877a1047a491baaedb4fd2577e2ea.png)
实作二:
使用 netstat -an 命令,查看计算机当前的网络连接状况。更多的 netstat 命令选项,可参考上面链接 4 和 5 。
![](https://i-blog.csdnimg.cn/blog_migrate/0d6e9f806c6382cc0b152ca5b17aa04a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/68e744196daf0b3347a6347c7aa090f1.png)
netstat/?更多netstat命令选项如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/855d3402e75c0a1a198ce98a9af8e109.png)
DNS
✍ DNS(Domain Name System)即域名系统,是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 的 53 号端口。
实作一:
Windows 系统将一些固定的/静态的 DNS 信息记录在 C:\WINDOWS\system32\drivers\etc\hosts 文件中,如我们常用的 localhost 就对应 127.0.0.1 。请查看该文件看看有什么记录在该文件中。
打开内容为空...
![](https://i-blog.csdnimg.cn/blog_migrate/620db5983897aa12776c5e112f06d192.png)
实作二:
解析过的 DNS 记录将会被缓存,以利于加快解析速度。请使用 ipconfig /displaydns 命令查看。我们也可以使用 ipconfig /flushdns 命令来清除所有的 DNS 缓存。
![](https://i-blog.csdnimg.cn/blog_migrate/adbb276c49a1e2827ee17f984a7cbc7d.png)
清除缓存:
![](https://i-blog.csdnimg.cn/blog_migrate/7206fc4cb840b69f49cabc7b96bdff4e.png)
实作三:
使用 nslookup qige.io 命令,将使用默认的 DNS 服务器查询该域名。当然你也可以指定使用 CloudFlare(1.1.1.1)或 Google(8.8.8.8) 的全球 DNS 服务器来解析,如:nslookup qige.io 8.8.8.8,当然,由于你懂的原因,这不一定会得到正确的答案。
![](https://i-blog.csdnimg.cn/blog_migrate/89fc292b641d3fb8003e0cfe9eef6812.png)
![](https://i-blog.csdnimg.cn/blog_migrate/be4c9ce2ecc32e9f3f3cba464bd2386a.png)
🗣 TroubleShooting
上面秘籍中我们提到了使用插件或自己修改 hosts 文件来屏蔽广告,思考一下这种方式为何能过滤广告?如果某些广告拦截失效,那么是什么原因?你应该怎样进行分析从而能够成功屏蔽它?
插件屏蔽广告方式原理:阻止广告URL的请求
hosts文件屏蔽广告方式原理:在文件中添加广告的链接,并且为其指定一个ip地址,相当于更改了该链接本来的ip地址,从而使广告链接失效。
失效原因:可能是广告拦截的规则失效了,需要新的规则来拦截广告。
应对方法:研究新的广告链接网址规则。
cache
✍ cache 即缓存,是 IT 领域一个重要的技术。我们此处提到的 cache 主要是浏览器缓存。
浏览器缓存是根据 HTTP 报文的缓存标识进行的,是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。
实作一:
打开 Chrome 或 Firefox 浏览器,访问 https://qige.io ,接下来敲 F12 键 或 Ctrl + Shift + I 组合键打开开发者工具,选择 Network 面板后刷新页面,你会在开发者工具底部看到加载该页面花费的时间。请进一步查看哪些文件被 cache了,哪些没有。
![](https://i-blog.csdnimg.cn/blog_migrate/70dae953a7cdf0aba9bf32a705736b7c.png)
以上数据除了qige.io都被缓存了,并且被区分为内存缓存(memory cache)和磁盘缓存(disk cache)
实作二:
接下来仍在 Network 面板,选择 Disable cache 选项框,表明当前不使用 cache,页面数据全部来自于 Internet,刷新页面,再次在开发者工具底部查看加载该页面花费的时间。你可比对与有 cache 时的加载速度差异。
启用缓存:
![](https://i-blog.csdnimg.cn/blog_migrate/c3bca8ce9f264f826584e2b02b382c07.png)
禁用缓存:
![](https://i-blog.csdnimg.cn/blog_migrate/dde738765199da8557817b85dd26fd19.png)
很明显,在禁用缓存后原本应该缓存的部分数据加载时间变长。
二、 Wireshark 实验
准备
请自行查找或使用如下参考资料,了解 Wireshark 的基本使用:
选择对哪块网卡进行数据包捕获
开始/停止捕获
了解 Wireshark 主要窗口区域
设置数据包的过滤
跟踪数据流
准备对WLAN网卡进行数据包捕捉:
![](https://i-blog.csdnimg.cn/blog_migrate/b6ef92e83cb40e48921fa27be75ff8b8.png)
主窗口认识:
![](https://i-blog.csdnimg.cn/blog_migrate/6be8466bccd9da0c4b39e712d3d030f2.png)
这里我们设置只查找IP为192.168.43.184的数据包以实现数据包过滤:
![](https://i-blog.csdnimg.cn/blog_migrate/73b298adcf1dd20fa2b71117a3bb8ff9.png)
数据链路层
实作一 熟悉 Ethernet 帧结构
使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。
如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/9aefc21248096fe004ecc67f9948ca4e.png)
✎ 问题
你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因。
一些情况下数据校验会通过网卡计算,这个情况下wireshark抓到的数据包的校验和都是错误的,所以默认关闭了WireShark自己的校验。
实作二 了解子网内/外通信时的 MAC 地址
ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
这里我们ping qige.io,由于前面的实验我们已经得知qige.io的IP地址为104.21.39.46,因此通过wireshark的过滤功能我们可以查询到以下数据:
![](https://i-blog.csdnimg.cn/blog_migrate/ddee2e89b64ef60d6c8e799331524762.png)
点击其中一行数据可得:
![](https://i-blog.csdnimg.cn/blog_migrate/76c73df0e62f9a9ced815de3b83e1de5.png)
Destination: IntelCor_6e:ac:26 (40:ec:99:6e:ac:26) 目的mac,本机
再次 ping www.cqjtu.edu.cn (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?
同上,ping后且过滤后得到以下数据包:
![](https://i-blog.csdnimg.cn/blog_migrate/6465124c3d2c8f817cdda6f6e3f47f6f.png)
点击其中一个数据包,得到以下结论:
![](https://i-blog.csdnimg.cn/blog_migrate/3ac7442acb5bc2f9b64f7d68aba2fa70.png)
Source: IntelCor_6e:ac:26 (40:ec:99:6e:ac:26) 源mac,本机
✎ 问题
通过以上的实验,你会发现:
访问本子网的计算机时,目的 MAC 就是该主机的
访问非本子网的计算机时,目的 MAC 是网关的
请问原因是什么?
解:因为在访问本子网内的计算机时,数据包传输是在子网内进行传输的,因此MAC地址是该主机的,而访问非子网计算机时,数据包传输又发生在子网外,需要经过网关,因此MAC地址会是网关的
实作三 掌握 ARP 解析过程
为防止干扰,先使用 arp -d * 命令清空 arp 缓存
![](https://i-blog.csdnimg.cn/blog_migrate/087b05a809834740f5d517cec6cb378a.png)
ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。
再次使用 arp -d * 命令清空 arp 缓存
![](https://i-blog.csdnimg.cn/blog_migrate/087b05a809834740f5d517cec6cb378a.png)
然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
![](https://i-blog.csdnimg.cn/blog_migrate/6126b939a5f48761162a3bf17560f8e2.png)
✎ 问题
通过以上的实验,你应该会发现,
ARP 请求都是使用广播方式发送的
如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP, 那么 ARP 解析将得到网关的 MAC。
请问为什么?
解答:采用广播形式是因为查询方通常情况下不知道被查询方的 MAC 地址,而所有结点都要处理广播帧,因此通过广播发送给被查询方。而被查询方通过接收到的广播帧的源地址知道查询方的 MAC 地址了,因此可以用该地址进行响应,这样局域网中的除查询方外其它主机就不会接收和处理该 ARP响应了,避免浪费带宽和其它主机的计算资源。
网络层
实作一 熟悉 IP 包结构
使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。
![](https://i-blog.csdnimg.cn/blog_migrate/b8b26e78bed88f9da2ab993ff70898cd.png)
✎ 问题
为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?
有了头部长度接收方才能知道从哪段开始读取数据并且知道报头的结束位置,而拥有总长度字段则是为了让接收方的网络层知道在哪将填充字段去掉
实作二 IP 包的分段与重组
根据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。
缺省的,ping 命令只会向对方发送 32 个字节的数据。我们可以使用 ping 202.202.240.16 -l 2000 命令指定要发送的数据长度。此时使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等
得到如下数据:
![](https://i-blog.csdnimg.cn/blog_migrate/6b07337f4f01b4c679bb8199d0093ce2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b9b9d4cf1630ff21e39e964d88484647.png)
✎ 问题
分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办
解:将该数据包直接丢弃并通知源自行分段并重新发送小的数据包
实作三 考察 TTL 事件
在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等。
在验证性实验部分我们使用了 tracert 命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。
请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。
![](https://i-blog.csdnimg.cn/blog_migrate/d4defb2a01535711ea910b4cf2e0fe15.png)
![](https://i-blog.csdnimg.cn/blog_migrate/aea2a707892e6bf18b21e8eadee8013e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d9b8a2e9f7dbefb81df33eb3bd406f95.png)
......
![](https://i-blog.csdnimg.cn/blog_migrate/26c89bbfecc91159b11ea9b0ced7cb5f.png)
可以观察到每个包的TTL都会增加1,直到到达目的地
✎ 问题
在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?
解:这里我们认为这个包设置的TTL应为比50大,且离50最近的2的n次方,应当为64,则有:64-50=14
传输层
实作一 熟悉 TCP 和 UDP 段结构
用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/b719b9e9bd56e0ac79b02e70f08fe1ae.png)
用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/86381eb24d9064ea23532cc1026234d3.png)
✎ 问题
由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?
解:源端口号是用来标识源进程,同样的,目的端口号则是用来标识目的进程
实作二 分析 TCP 建立和释放连接
打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
![](https://i-blog.csdnimg.cn/blog_migrate/a235bc33b275268f2dde424488907b92.png)
请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。
如下:
![](https://i-blog.csdnimg.cn/blog_migrate/aa6d7a0e9c61c3db08ad3c2171e34568.png)
第一次握手:
![](https://i-blog.csdnimg.cn/blog_migrate/b1db178d7894ee8879d4dd7e13728420.png)
Seq=0:初始序列号为0
Ack=0:初始建立连接值为0,表示当前没有接收到数据
SYN=1:标志位置1,表示请求建立连接
第二次握手:
![](https://i-blog.csdnimg.cn/blog_migrate/a86c30a68bb37705b81604b2d8e4f9d7.png)
SYN=1:标志位置1,表示请求连接
Seq=0
ACK=1:请求包中的顺序号为:X+1
第三次握手:
![](https://i-blog.csdnimg.cn/blog_migrate/f4495822e861d3294a1f6e5c36fa6d61.png)
SYN=Not set:标志位,表示已经收到记录
Seq =1
Ack = 1:请求包中的顺序号Y+1
就这样通过了TCP三次握手,建立了连接。开始进行数据交互
请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
第四次握手:
![](https://i-blog.csdnimg.cn/blog_migrate/20a7fb4d4ec75cd758deef52df2fa9ee.png)
ACK:确认
Seq=1
Ack=518
✎ 问题一
去掉 Follow TCP Stream,即不跟踪一个 TCP 流,你可能会看到访问 qige.io 时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?
这些连接属于短连接,即当数据发送完毕后该链接会断开,此时页面通常已经被缓存,当需要时才会再次建立连接, 这样做的好处是可以实现多用户同时访问
✎ 问题二
我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?
抓取时间太短了,或者是根本不需要新的数据
应用层
应用层的协议非常的多,我们只对 DNS 和 HTTP 进行相关的分析。
实作一 了解 DNS 解析
先使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。
![](https://i-blog.csdnimg.cn/blog_migrate/504af864fac0163b31e587af9ddd7bbe.png)
你应该可以看到当前计算机使用 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 等。并仔细了解应答的头部有哪些字段及其意义。
✎ 问题
刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的 304 代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答 304 应答而不是常见的 200 应答?
只有第一次请求,服务器端的返回状态才会是200,当第二次请求服务器资源没有发生变化时都只会返回304,而本次实验我们只是将网页挂起,没有资源的改变,因此返回的304更多。
三、Cisco Packet Tracer 实验
VLSM: 即可变长子网掩码是为了有效的使用无类别域间路由和路由汇聚来控制路由表的大小,它是网络管理员常用的IP寻址技术,VLSM就是其中的常用方式,可以对子网进行层次化编址,以便最有效的利用现有的地址空间。
CIDR: 即无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。
RIP: 路由信息协议RIP(Routing Information Protocol)是基于距离矢量算法的路由协议,利用跳数来作为计量标准。
OSPF: (Open Shortest Path First开放式最短路径优先)是一个内部网关协议,用于在单一自治系统内决策路由。
VLAN: 虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样,由此得名虚拟局域网。
STP: 生成树协议,可应用于计算机网络中树形拓扑结构建立,主要作用是防止网桥网络中的冗余链路形成环路工作。
NAT: 网络地址转换,当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
DHCP: 动态主机配置协议 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) 是 RFC 1541(已被 RFC 2131 取代)定义的标准协议,该协议允许服务器向客户端动态分配 IP 地址和配置信息。
直接连接两台 PC 构建 LAN
将两台 PC 直接连接构成一个网络。注意:直接连接需使用交叉线。
进行两台 PC 的基本网络配置,只需要配置 IP 地址即可,然后相互 ping 通即成功。
配置IP的方式:左键点击pc,在弹出的窗口内点击桌面,选择IP配置即可开始配置pc的IP,这里配置pc0的IP地址为:192.168.0.1,而pc1的IP地址为:192.168.0.2
然后点击pc0,选择桌面,再点击命令提示符功能即可开始输入命令。
ping 192.168.0.2
同样,点击pc1再操作一遍
ping 192.168.0.1
说明可以互相ping通
用交换机构建 LAN
如下图:
PC配置如下
主机名 | IP地址 | 子网掩码 |
PC0 | 192.168.1.1 | 255.255.255.0 |
PC1 | 192.168.1.2 | 255.255.255.0 |
PC2 | 192.168.2.1 | 255.255.255.0 |
PC3 | 192.168.2.2 | 255.255.255.0 |
✎ 问题
PC0 能否 ping 通 PC1、PC2、PC3 ?
由此可见,pc0可以ping通pc1,但不能ping通pc1和pc2
PC3 能否 ping 通 PC0、PC1、PC2 ?为什么?
由此可见,pc3可以ping通pc2,但不能ping通pc0和pc1,我猜测pc3和pc2在同一子网下,而pc3和pc0、pc1都不在同一子网下。
将 4 台 PC 的掩码都改为 255.255.0.0 ,它们相互能 ping 通吗?为什么?
先将4台主机子网掩码都改为255.255.0.0,以pc0实验,可看到以下情况:
由此可见更改后4台主机可以ping通
使用二层交换机连接的网络需要配置网关吗?为什么?
需要,根据上述实验可知,在没有配置网关的情况下,非同一台交换机上的主机不能互相通信
✎ 试一试
集线器 Hub 是工作在物理层的多接口设备,它与交换机的区别是什么?请在 CPT 软件中用 Hub 构建网络进行实际验证。
换机工作在数据链路层,通过MAC地址转发数据;集线器工作在物理层,通过广播的形式转发数据。集线器内部采用了总线型拓扑,在同一时间内必须是单向的,只能维持在半双工模式下;交换机上的两个端口之间的通道是相互独立的,可以实现全双工通信。
配置好上述4台主机的IP地址后,开始发送数据,可以看到如下区别
集线器:
单向
交换机:
双向
交换机接口地址列表
二层交换机是一种即插即用的多接口设备,它对于收到的帧有 3 种处理方式:广播、转发和丢弃(请弄清楚何时进行何种操作)。那么,要转发成功,则交换机中必须要有接口地址列表即 MAC 表,该表是交换机通过学习自动得到的!
仍然构建上图的拓扑结构,并配置各计算机的 IP 在同一个一个子网,使用工具栏中的放大镜点击某交换机如左边的 Switch3,选择 MAC Table,可以看到最初交换机的 MAC 表是空的,也即它不知道该怎样转发帧(那么它将如何处理?),用 PC0 访问(ping)PC1 后,再查看该交换机的 MAC 表,现在有相应的记录,请思考如何得来。随着网络通信的增加,各交换机都将生成自己完整的 MAC 表,此时交换机的交换速度就是最快的!
一开始交换机3的mac表确实为空
使用pc0 ping了 pc1后结果如下;
生成树协议(Spanning Tree Protocol)
交换机在目的地址未知或接收到广播帧时是要进行广播的。如果交换机之间存在回路/环路,那么就会产生广播循环风暴,从而严重影响网络性能。
而交换机中运行的 STP 协议能避免交换机之间发生广播循环风暴。
成功构建如下拓扑图(初始状态):
、
一段时间后:
此时通过使用模拟状态查看到信息通信情况如下:
剪掉中间的线后情况如下:
此时通过使用模拟状态查看到信息通信情况如下: