验证性实验
1、Ipconfig
ipconfig 是微软操作系统的计算机上用来控制网络连接的一个命令行工具。它的主要用来显示当前网络连接的配置信息(/all 参数)。
(1)实作一
使用 Ipconfig/all 查看计算机的网络配置,尽可能明白每行的意思,特别注意 IP 地址、子网掩码 Subnet Mask、网关 Gateway。

IP地址:IP是32位二进制数据,通常以十进制表示(即最大值为255.255.255.255)。我的IP地址是10.60.55.137
子网掩码:子网掩码可以与IP地址做与运算,得出自己的网络号。我的子网掩码是255.254.0.0,与运 算后得出我自己IP的网络号10.60.0.0。
网关:网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。
(2)实作二
使用 ipconfig/all 查看旁边计算机的网络配置,看看有什么异同。

你的计算机和旁边的计算机是否处于同一子网,为什么?
物理地址,IP地址不同,默认网关相同。属于同一子网。10.60.55.137/15 10.60.57.248/15 子网掩码同为255.254.0.0 ,IP地址与子网掩码做 与运算可知处于同一网络00010100.00111100.00000000.00000000(10.60.0.0)
2、ping
PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序 。ping 是工作在 TCP/IP 网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态。
(1)实作一
要测试到某计算机如 重庆交通大学 Web 服务器的连通性,可以使用 ping www.baidu.com 命令,也可直接使用ip地址
请掌握使用该命令后屏幕显示的反馈回来信息的意思,如:TTL、时间等。

时间:从本机发出ping包到收到对方回复所用时间。
TTL:各个系统默认TTL值不同,我的电脑TTL默认为128,表示数据包的生存时间,每经过一次路由,就会减1,直至为0,就会被路由器丢弃,可以防止数据包在网络中循环传输。
(2)实作二
使用 ping/? 命令了解该命令的各种选项并实际使用。

实际使用:ping -i TTL

假设你不能 ping 通某计算机或 IP,但你确定该计算机和你之间的网络是连通的,那么可能的原因是什么?该如何处理能保证 ping 通?
可能的原因:
-
对方关机/ip不存在
-
网段不同,通过路由也无法找到
-
防火墙设置,过滤了ping发出的ICMP数据包。
-
网线故障
常见排查方法:
-
先ping 127.0.0.1,如果无法ping通,则本机TCP/IP 配置即网卡状态异常。
-
再ping 本地IP,如果无法ping通,则本机网络软件硬件无法正常工作。
3、tracert
TRACERT (Trace Route 的组合缩写),也称为路由追踪,该命令行程序可用于跟踪 Internet 协议 (IP) 数据包传送到目标地址时经过的路径。
(1)实作一
要了解到某计算机如 www.baidu.com 中间经过了哪些节点(路由器)及其它状态,可使用 tracert www.baidu.com 命令,查看反馈的信息,了解节点的个数。


ping.pe 这个网站可以探测从全球主要的 ISP 到某站点如:https://qige.io 的线路状态,当然也包括各线路到该主机的路由情况

tracert 能告诉我们路径上的节点以及大致的延迟等信息,那么它背后的原理是什么?本问题可结合第二部分的 Wireshark 实验进行验证。
通过向目标发送发送若干ICMP类的回应数据包,这些数据包的TTL依次1从递增,CMP数据包每经过一个路由器都会将TTL减1,直到目标响应或 TTL 达到最大值,从而确定路由。首先是TTL为1的包发出,收到响应后,再发出TTL为2的包,以此类推,直到确认路由。
在以上两个实作中,如果你留意路径中的节点,你会发现无论是访问百度还是棋歌教学网,路径中的第一跳都是相同的,甚至你应该发现似乎前几个节点都是相同的,你的解释是什么?
因为我们所连接的都是学校的子网,要访问其他网站的话,必须要经过学校网路路由才能转跳到外部的网络。
在追踪过程中,你可能会看到路径中某些节点显示为 * 号,这是发生了什么?
某些路由器不经询问直接丢弃 TTL 过期的数据包,因此没有回应。
四、ARP
ARP(Address Resolution Protocol)即地址解析协议,是用于根据给定网络层地址即 IP 地址,查找并得到其对应的数据链路层地址即 MAC地址的协议。 ARP 协议定义在 1982 年的 RFC 826。
(1)实作一
运行 arp -a 命令查看当前的 arp 缓存, 请留意缓存了些什么。
然后 ping 一下你旁边的计算机 IP(注意,需保证该计算机的 IP 没有出现在 arp 缓存中,或者使用 arp -d * 先删除全部缓存),再次查看缓存,你会发现一些改变,请作出解释。


(2)实作二
请使用 arp /? 命令了解该命令的各种选项。

(3)实作三
一般而言,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 命令设置其为静态类型的。
(这里的ip地址是隔离点的,不再是学校的ip10.60.55.137)


在实作三中,为何缓存中常常有网关的信息?
记录访问过的MAC地址,下次方便使用,而不用频繁的去向对方获取MAC地址。
我们将网关或其它计算机的 arp 信息设置为静态有什么优缺点?
优点:稳定性更佳,静态ip可以更稳定,可以作属于自己的网站和服务器,便于管理,静态ip能通过ip地址远程访问对应电脑。
缺点: 价格昂贵,静态ip要采用用专线上网的计算机才拥有固定的所以也需要比较昂贵的费用。
五、DHCP
DHCP(Dynamic Host Configuration Protocol)即动态主机配置协议,是一个用于 IP 网络的网络协议,位于 OSI 模型的应用层,使用 UDP 协议工作,主要有两个用途:
-
用于内部网或网络服务供应商自动分配 IP 地址给用户
-
用于内部网管理员对所有电脑作中央管理
简单的说,DHCP 可以让计算机自动获取/释放网络配置。
(1)实作一
一般地,我们自动获取的网络配置信息包括:IP 地址、子网掩码、网关 IP 以及 DNS 服务器 IP 等。使用 ipconfig/release 命令释放自动获取的网络配置,并用 ipconfig/renew 命令重新获取,了解 DHCP 工作过程和原理。


在Windows系统下,如果由于某种原因计算机不能获取 DHCP 服务器的配置数据,那么Windows将会根据某种算法自动配置为 169.254.x.x 这样的 IP 地址。显然,这样的 IP 以及相关的配置信息是不能让我们真正接入 Internet 的,为什么?既然不能接入 Internet,那么Winodws系统采用这样的方案有什么意义?
在IP网络里,每台主机接入网络都需要一个IP地址,DHCP服务器会为接入网络的计算机自动分配IP地址,但特殊情况下,DHCP分配失败或者没有DHCP服务器时,机器可以自己分配一个IP来完成这个工作。
六、netstat
无论是使用 TCP 还是 UDP,任何一个网络服务都与特定的端口(Port Number)关联在一起。因此,每个端口都对应于某个通信协议/服务。
netstat(Network Statistics)是在内核中访问网络连接状态及其相关信息的命令行程序,可以显示路由表、实际的网络连接和网络接口设备的状态信息,以及与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络服务运行状况。
(1)实作一
Windows 系统将一些常用的端口与服务记录在 C:\WINDOWS\system32\drivers\etc\services 文件中,请查看该文件了解常用的端口号分配。

(2)实作二
使用 netstat -an 命令,查看计算机当前的网络连接状况。更多的 netstat 命令选项,可参考上面链接 4 和 5 。

七、DNS
DNS(Domain Name System)即域名系统,是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 的 53 号端口。
(1)实作一
Windows 系统将一些固定的/静态的 DNS 信息记录在 C:\WINDOWS\system32\drivers\etc\hosts 文件中,如我们常用的 localhost 就对应 127.0.0.1 。请查看该文件看看有什么记录在该文件中。

(2)实作二
解析过的 DNS 记录将会被缓存,以利于加快解析速度。请使用 ipconfig /displaydns 命令查看。我们也可以使用 ipconfig /flushdns 命令来清除所有的 DNS 缓存。


(2)实作三
使用 nslookup qige.io 命令,将使用默认的 DNS 服务器查询该域名。当然你也可以指定使用 CloudFlare(1.1.1.1)或 Google(8.8.8.8) 的全球 DNS 服务器来解析,如:nslookup qige.io 8.8.8.8

八、cache
cache 即缓存,是 IT 领域一个重要的技术。我们此处提到的 cache 主要是浏览器缓存。
浏览器缓存是根据 HTTP 报文的缓存标识进行的,是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。
(1)实作一
打开 Chrome 或 Firefox 浏览器,访问 https://qige.io ,接下来敲 F12 键 或 Ctrl + Shift + I 组合键打开开发者工具,选择 Network 面板后刷新页面,你会在开发者工具底部看到加载该页面花费的时间。请进一步查看哪些文件被 cache了,哪些没有。
除了qige.io.html,其余都被磁盘或者内存所缓存

(2)实作二
接下来仍在 Network 面板,选择 Disable cache 选项框,表明当前不使用 cache,页面数据全部来自于 Internet,刷新页面,再次在开发者工具底部查看加载该页面花费的时间。你可比对与有 cache 时的加载速度差异。
加载耗时增加,没有使用磁盘或者内存的缓存,需要等待资源的获取。

Wireshark实验
一、数据链路层
实作一 熟悉 Ethernet 帧结构
使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。

目的MAC:(60:6a:5c:80:9e:c6)
源MAC:(6c:6a:77:16:a6:48)
类型:IPv4(0x0800)
字段:封装的IP包
你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因。
这是因为有时校验和会由网卡计算,这时wireshark抓到的本机发送的数据包的校验和都是错误的,所以默认关闭了WireShark自己的校验。
实作二 了解子网内/外通信时的 MAC 地址
ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
(因为被隔离后返家,同一子网的其他ip我不知道)。结论:发出帧的目的MAC地址和返回帧的源MAC地址都是该子网下的被访问计算机的MAC地址。
然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?


发出帧的目的 MAC 地址:(60:ee:5c:80:9e:c6)
返回帧的源 MAC 地址:(60:ee:5c:80:9e:c6)
这个 MAC 地址是谁的:默认网关的MAC地址
(3)实作三 掌握 ARP 解析过程
为防止干扰,先使用 arp -d * 命令清空 arp 缓存
ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。
再次使用 arp -d * 命令清空 arp 缓存
然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
不出子网不需要经过网关,所以得到的MAC地址是对方主机的。出子网的话,则需要经过网关,所以目的MAC是网关的。
通过以上的实验,你应该会发现,
1.ARP 请求都是使用广播方式发送的
2.如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP, 那么 ARP 解析将得到网关的 MAC。
请问为什么?
ARP请求以广播方式发送,这样子网内所有主机都能收到。当访问本子网的主机时,ARP解析协议将会直接得到该ip对应的MAC地址。当访问非本子网的主机时,则需要出网关,所以ARP解析协议将会直接得到网关MAC地址
二、网络层
实作一 熟悉 IP 包结构
使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。

版本:Internet Protocol Version 4
头部长度:Header Length:20 bytes
总长度:Total Length:60
TTL:128
协议类型:ICMP
为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?
便于传输时识别IP总长度,因为接收端读数据时,接收到数据长度超过1500B就会被返回链路层进行分段,有标明就可以节省时间。
实作二 IP 包的分段与重组
根据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。
缺省的,ping 命令只会向对方发送 32 个字节的数据。我们可以使用 ping 202.202.240.16 -l 2000 命令指定要发送的数据长度。此时使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等


分段标志:Identification:0xb4a4 (46244)
偏移量:Offset (8B)
分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办?
丢弃并通知发送方
实作三 考察 TTL 事件
在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等。
在验证性实验部分我们使用了 tracert 命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。
请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。

TTL由1依次增加,直到达到最大或者找到路由。首先是TTL=1的数据包发出,收到目标响应,再发出TTL=2的数据包,依次类推,直到确定路由。
在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?
如果默认发出包的TTL为128,则经过了78跳。
三、传输层
实作一 熟悉 TCP 和 UDP 段结构
用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。


由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?
源端口:本机中接收某个进程的数据包的端口。
目的端口:对方主机接收某个进程的数据包的端口。
实作二 分析 TCP 建立和释放连接
打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。

第一次握手时,主机将请求发送给服务器。Syn=1,Ack=0

第二次握手时,由服务器发送回主机。Syn=1,Ack=1

第三次握手时,由主机发送到服务器。Syn=0,Ack=1。

请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
第一次握手时,Ack=1,Fin=1。

第二次握手,Ack=1,Fin=0。

第三次握手,Ack=1,Fin=1。

第四次握手,Ack=1,Fin=0。

去掉 Follow TCP Stream,即不跟踪一个 TCP 流,你可能会看到访问 qige.io 时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?
多个连接相当于开辟了多个传输通道,这样可以加快传输数据的速度。
我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?
原因是将第二次、第三次挥手发出的包合并为了一个。
四、应用层
实作一 了解 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等。并仔细了解应答的头部有哪些字段及其意义

状态码304:未修改。自从上次请求后,请求的页面未修改过。
状态码404:未找到。服务器未找到请求的页面。

最低0.47元/天 解锁文章
2582

被折叠的 条评论
为什么被折叠?



