计算机网络实验报告
(一)验证性实验
1.ipconfig
实作一
使用 ipconfig/all 查看自己计算机的网络配置,尽可能明白每行的意思,特别注意 IP 地址、子网掩码 Subnet Mask、网关 Gateway。
ip地址是ip协议提供的一种统一的地址格式,它为互联网上每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。它由网络编号和主机编号两部分构成,前者用来标识网络,后者用来标识同一网络上的不同主机(或路由器接口)。现有的互联网是在IPv4的基础上运行的,它是由4个字节即32个比特组成,IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。最初设计互联网的时候,Internet委员会定义了5种IP地址类型以适合不同类型的网络,即A类到E类。像我的IPv4地址开始的那个字节是192,就是属于C类网络。不过随着互联网的飞速发展和互联网用户对服务水平要求的不断提高,IPv4定义的有限地址空间将被耗尽,IPv6在全球将会越来越受到重视。
子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的依据。具体说就是两台计算机各自的IP地址与子网掩码进行“与”运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。. 例如:设IP地址为192.168.10.2,子网掩码为255.255.255.240,那么子网掩码是怎样来区分网络地址和主机地址的呢。. 主机地址为:0.0.0.2(将掩码取反,然后与运算)。A类网络到C类网络默认的子网掩码都是网络号为全1,主机号为全0。我的网络属于C类,所以默认的子网掩码就是255.255.255.0。
网关顾名思义就是从一个网络连接到另一个网络的关口。用户为了让本网络上的主机能和其他网络中的主机进行通信,就必须给其指定本网络中的一个路由器,由该路由器帮忙进行转发。
实作二
使用 ipconfig/all 查看旁边计算机的网络配置,看看有什么异同。你的计算机和旁边的计算机是否处于同一子网,为什么?
这两张图是旁边计算机的ipconfig/all命令图,通过观察实作一本机同样的命令结果,作出了不同的响应。本机有以太网连接,无线WLAN连接,甚至还配置了虚拟机,而旁边的计算机只有以太网配置。接下来我们判断两台计算机是否处于同一子网,需要查看两台计算机的IP地址及子网掩码,将IP地址与子网掩码转换成二进制,然后相应位进行相与运算,得出的结果相同就是属于同一子网;得出结果不相同就不属于同一子网。
这是本机ip地址、子网掩码、网关。
这是旁边计算机ip地址、子网掩码、网关。
通过分析IP和子网掩码,再将两者进行相与运算之后,发现得出的结果不相同,所以两台计算机处于同一子网。
2.ping
实作一
要测试到某计算机如 重庆交通大学 Web 服务器的连通性,可以使用 ping www.cqjtu.edu.cn 命令,也可直接使用 IP 地址。
请掌握使用该命令后屏幕显示的反馈回来信息的意思,如:TTL、时间等。
TTL是一个单字节的字段,它指定的是IP包被路由器丢弃之前允许通过的最大网段数量,它位于IPv4包的第九个字节,作用是限制IP数据包在计算机网络中的存在时间。TTL 是由发送主机设置的,以防止数据包不断在IP互联网络上永不终止地循环。可以看到这里的TTL是58。
时间是用来表示ping包往返所需的时间,根据反应的时间可以判断网络的好坏,这里的时间是13ms,可以看出跟www.cqjtu.edu.cn的通信很好。
实作二
使用 ping/? 命令了解该命令的各种选项并实际使用。
Ping是ICMP的一个典型应用。Ping是检测网络连通的常用工具,同时也能收集其他相关信息。
ping -n命令跟无参数ping一样,默认情况下无参数ping都是发送4个字节为32的数据包,在这里使用 -n命令可以指定发送多少数据包,我们在这里指定了数据包的数量为10。
ping -l命令是用来发送size指定大小的到目标主机的数据包,在默认情况是windows主机发送给目的主机的数据包的大小是受限制的,最小是32个字节,最大是65500个字节,当一次发送的数据包大于65500个字节时,可能导致对方计算机瘫痪,所以被限制。在这里我们向www.cqjtu.edu.cn ping了4个5000字节的数据,运行成功。
问题一
假设你不能 ping 通某计算机或 IP,但你确定该计算机和你之间的网络是连通的,那么可能的原因是什么?该如何处理能保证 ping 通?
解决方法:我们可以先ping 127.0.0.1即主机环回地址来测试本机的状态,如果没错,说明问题不在本机,否则检查本机TCP/IP配置是否出错。然后可以ping旁边计算机的ip地址,测试能否连同,也就是测试本子网是否出错,如果有问题,检查网卡到交换机的连线是否出错。然后ping本地网关192.168.0.1,测试到网关的连通性,如果出错,则说明网关有问题。最后如果上述三步都没错,再ping目标ip地址。
问题二
假如是不能ping通域名,那说明是DNS解析出了问题,输入域名首先要被对应的DNS解析服务器解析为对应的ip地址,然后才能根据ip地址发送数据包进行测试,所以发生这个问题可能的原因是DNS解析服务器故障或者配置出错。
3.tracert
实作一
要了解到某计算机如 www.baidu.com 中间经过了哪些节点(路由器)及其它状态,可使用 tracert www.baidu.com 命令,查看反馈的信息,了解节点的个数。
可通过网站 http://ip.cn 查看这些节点位于何处,是哪个公司的,大致清楚本机到百度服务器之间的路径。
这是跟踪百度官网所反馈回来的信息,可以看到这里反馈回来了12个结点。
实作二
ping.pe 这个网站可以探测从全球主要的 ISP 到某站点如 https://qige.io 的线路状态,当然也包括各线路到该主机的路由情况。请使用浏览器访问 http://ping.pe/qige.io 进行了解。
问题一
tracert 能告诉我们路径上的节点以及大致的延迟等信息,那么它背后的原理是什么?本问题可结合第二部分的 Wireshark 实验进行验证。
Tracert命令是通过向目标计算机发送具有不同TTL的ICMP数据包,来确定至目标计算机的路由,也就是说用来跟踪一个消息从一台计算机到另一台计算机所走的路径。要在转发数据包上的 TTL 之前至少递减 1,但必须经过路径上的每个路由器,当数据包上的 TTL 到达 0 时,路由器应该将【ICMP 已超时】的消息发送回源系统。Tracert 先发送 TTL 为 1的回显数据包,并在随后的每次发送过程将TTL递增1,直到目标响应或 TTL 达到最大值,从而确定路由。路由通过检查中级路由器发送回的【ICMP 已超时】的消息来确定路由。
问题二
在以上两个实作中,如果你留意路径中的节点,你会发现无论是访问百度还是棋歌教学网,路径中的第一跳都是相同的,甚至你应该发现似乎前几个节点都是相同的,你的解释是什么?
因为首先是通过本机发送,需要先经过本机的ip地址,出去的网关也是相同的。
问题三
在追踪过程中,你可能会看到路径中某些节点显示为 * 号,这是发生了什么?
请求超时,没有收到反馈信息。
4.ARP
实作一
运行 arp -a 命令查看当前的 arp 缓存, 请留意缓存了些什么。
然后 ping 一下你旁边的计算机 IP(注意,需保证该计算机的 IP 没有出现在 arp 缓存中,或者使用 arp -d * 先删除全部缓存),再次查看缓存,你会发现一些改变,请作出解释。
这是当前的arp缓存,每一个条目都记录了网络上一些其他主机的ip地址和对应的MAC地址。
首先使用arp -d *命令清楚了arp缓存表里的数据,然后ping了旁边的计算机,发现无法访问目标主机。这是因为arp缓存表为空,需要先通过arp协议来获取对方ip地址对应的MAC地址。
实作二
请使用 arp /? 命令了解该命令的各种选项。
这是对于指派的ip地址为192.168.0.5的接口,显示其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 项添加失败: 请求的操作需要提升” 这样的信息,表示命令没能执行成功,你该如何解决?
应该需要以管理员身份运行cmder.exe。需要先运行:netsh i i show in命令找到正在使用的网卡idx号,然后运行:netsh -c i i add neighbors 11 192.168.1.1 24-4b-fe-88-4c-08命令就可以进行绑定了,这里11是idx号,后面是ip地址与物理地址。最后输入 arp -a命令进行查看。
问题二
在实作三中,为何缓存中常常有网关的信息?
我们将网关或其它计算机的 arp 信息设置为静态有什么优缺点?
因为网关就像一个关卡,我们想要访问其他ip地址,就必须先经过网关,也就要先知道网关的MAC地址。
arp缓存表保存者我们访问过的其他ip地址对应的MAC地址信息,我们将网关或者其他计算机的arp信息设置为静态可以方便我们管理,缺点则是这样会产生合法用户依法分配的地址可能被盗用,带来严重的网络安全问题。
5.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系统采用这样的方案有什么意义?
虽然这样的作法不能让我们真正的接入Internet,但是这个自动获取的ip地址和和信息可以短暂的解决计算机不能获取DHCP服务器的配置数据的问题。通过这个方法,我们可以查看附件计算机的网络配置信息来手动配置本机,从而使本机连接上Internet。
6.netstat
实作一
Windows 系统将一些常用的端口与服务记录在 C:\WINDOWS\system32\drivers\etc\services 文件中,请查看该文件了解常用的端口号分配。
实作二
使用 netstat -an 命令,查看计算机当前的网络连接状况。更多的 netstat 命令选项,可参考上面链接 4 和 5 。
7.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 文件来屏蔽广告,思考一下这种方式为何能过滤广告?如果某些广告拦截失效,那么是什么原因?你应该怎样进行分析从而能够成功屏蔽它?
hosts文件屏蔽广告方式原理:在文件中添加该广告链接,并且指定一个ip地址(通常为本机地址),因为hosts文件优先级是高于DNS服务器,这样浏览器解析该广告链接时,优先hosts文件,这样我们就相当于更改了该链接本来的ip地址,从而使该链接失效。
失效原因:广告内容可能内嵌入了网页里面。
分析及做法:我们要想屏幕广告,首先需要找到广告的链接。我们可以在网页中使用f12查看网页源码,里面除了网页官网的链接,其余可视为是广告链接,然后我们修改hosts文件即可。
8.cache
实作一
打开 Chrome 或 Firefox 浏览器,访问 https://qige.io ,接下来敲 F12 键 或 Ctrl + Shift + I 组合键打开开发者工具,选择 Network 面板后刷新页面,你会在开发者工具底部看到加载该页面花费的时间。请进一步查看哪些文件被 cache了,哪些没有。
实作二
接下来仍在 Network 面板,选择 Disable cache 选项框,表明当前不使用 cache,页面数据全部来自于 Internet,刷新页面,再次在开发者工具底部查看加载该页面花费的时间。你可比对与有 cache 时的加载速度差异。
使用cache的话页面几乎是秒加载,而不使用cache的话加载页面速度明显变慢,需要等上几秒钟。
(二)WireShark实验
1.数据链路层
实作一:熟悉 Ethernet 帧结构
使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因。
这是对本机以太网的抓包。原因:wireshark抓包会去掉前导同步码、帧开始分界符、FCS这些内容,它把8字节的前序和4字节的FCS都给过滤了。因为有时校验和会由网卡计算,这个时候wireshark抓到的本机发送的数据包的校验和都是错误的,所以WireShark默认关闭了自己的校验,就不会出现校验字段。
实作二:了解子网内/外通信时的 MAC 地址
1.ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
ping旁边计算机显示请求超时,改为ping www.cqjtu.edu.cn。
这是我同时用wireshark抓取的目的地址为www.cqjtu.edu.cn这个域名对应的ip地址为218.70.34.236所收到的数据包。通过图片中蓝色那一行的数据我们可以看到发送出帧的目的MAC地址即是本机的MAC地址,而返回帧的源MAC地址应该是重庆交通大学web服务器的网关的MAC地址。
2.然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
这是我同时用wireshark抓取的目的地址为qige.io这个域名对应的ip地址为104.21.39.46所收到的数据包。通过图片中蓝色那一行的数据我们可以看到发送出帧的目的MAC地址即是本机的MAC地址,而返回帧的源MAC地址应该是qige.io的web服务器的网关的MAC地址。
3.再次 ping www.cqjtu.edu.cn (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?
这里使用ping -t命令ping了baidu.com。
这是我同时用wireshark抓取的目的地址为baidu.com这个域名对应的ip地址为39.156.66.10所收到的数据包。通过图片中蓝色那一行的数据我们可以看到发送出帧的目的MAC地址即是本机的MAC地址,而返回帧的源MAC地址应该是baidu.com的web服务器的网关的MAC地址。
问题
通过以上的实验,你会发现:
访问本子网的计算机时,目的 MAC 就是该主机的
访问非本子网的计算机时,目的 MAC 是网关的
请问原因是什么?
因为访问本子网的计算机是两台主机在直接进行通信,所以目的MAC地址是该主机的。而在访问非本子网的计算机时数据首先要到达本子网的网关,再交付给网关进行传输,所以目的MAC是网关的。
实作三:掌握 ARP 解析过程
1.为防止干扰,先使用 arp -d * 命令清空 arp 缓存
2.ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。
ping旁边的计算机提示无法访问目的主机。
3.再次使用 arp -d * 命令清空 arp 缓存
4.然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
通过wireshark抓包我们可以看到目的地址是广播,源地址是本机的地址,通过询问信息可以看到发送方的MAC地址即是本机的MAC地址,发送方的ip地址即是本机的ip地址;接收方的MAC地址是全0,表示这个地址待扩充,接收方的ip地址是192.168.0.3。分析报文可知目的ip是c0 a8 00 03。
问题
通过以上的实验,你应该会发现,
ARP 请求都是使用广播方式发送的
如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP, 那么 ARP 解析将得到网关的 MAC。
请问为什么?
1.因为不知道目的MAC地址。
2.因为访问本子网的IP,可以通过在本子网内广播获得相应的MAC,访问非子网的IP,需要得到网关的MAC,由网关到达路由器,路由器不会广播的,子网外部通过IP地址发送。
2.网络层
实作一:熟悉 IP 包结构
使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。
为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?
可以看到这个ip包是Ipv4的版本,头部长度为20比特,总长度为158比特,TTL是64,协议类型是UDP。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 包如何进行分段,如:分段标志、偏移量以及每个包的大小等。
分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办?
在这里由于我执行了两次ping 202.202.240.16 -l 2000命令,所以共捕获到了8个包。可以看到字节长度总共为2000的ip包,被分成了一长一短两个ip包,长的是1514,短的是562。两个ip包的标识符是一样的,说明是由一个ip包分割而来的,第二个ip包的标记为0表示后面没有了别的ip包,意即ip包被分成了两个。根据偏移量就可以知道当前两个ip包在该组分片包中的位置,接收端靠此来组装还原ip包。IP头中的标志域的DF位表示是否允许分段,MF位表示该IP数据包是否是一个I分段数据包。IP头的分段偏移域表示该分段在完整IP包中的位置。IP就是根据这六个域来对IP数据包进行分段和重新组合的。
Ipv6遇大数据包怎么办:转发到能够支持这个数据传输的路由器上或者干脆直接丢弃。
实作三:考察 TTL 事件
在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等。
在验证性实验部分我们使用了 tracert 命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。
请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。
在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?
使用tracer命令对百度进行追踪。
可以发现,TTL会随着跳数的不断增加而增加,从1开始直到最终到达目的主机,每一个节点在3次以内它的TTL的值是不会发生改变的,所以我们可以以此来计算我们和目的主机之间存在多少个节点。
TTL值为50,那么可以推断这个包从源点到我之间至少50跳。
3.传输层
实作一:熟悉 TCP 和 UDP 段结构
用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
这是TCP段的结构。
这是用wireshark任意抓取的tcp包,可以看到源端口号是24:4b:fe:88:4c:08,这是本机以太网的MAC地址,目的端口是紧随其后的2个字节。然后是4个字节的序列号,再是4个字节的确认号,后面是各种标志位。
用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
这是UDP段的结构。
这是用wireshark任意抓取的udp包,可以看到源端口号是24:4b:fe:88:4c:08,这是本机以太网的MAC地址,目的端口是紧随其后的2个字节。然后是两个子节的udp数据报长度。然后是两个字节的校验值。然后是4个字节的数据部分。
问题
由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?
端口号的作用实际就是标识一台主机上的一个进程,源端口号说明这个数据包从哪里来,标识了发起通信的那个进程。目的端口号说明这个数据包到哪里去,标识了接受通信的那个进程。
实作二:分析 TCP 建立和释放连接
打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。
这是经历三次握手建立连接的包,第一次握手以[SYN]作为标志位,seq=0。第二次握手以[SYN,ACK]作为标志位,seq=0,ack的值由第一次握手的seq的值再加一,为1。第三次握手以[ACK]作为标志位,seq的值等于第二次握手中ack的值,为1,ack的值第二次握手中seq的值0再加1,为1。
请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
这是经历四次挥手释放连接的包,第一次挥手以[FIN,ACK]作为标志位,报文号seq=1,确认号ack=3。第二次挥手仍然以[FIN,ACK]作为标志位,报文号seq=1,确认号ack=3。第三次挥手以[ACK]作为标志位,报文号seq=3,确认号ack=2。后一次挥手传输报文中的Seq值等于前一次握手传输报文中的Ack值,而后一次挥手传输报文中的Ack值等于前一次握手传输报文中的Seq值。
问题
去掉 Follow TCP Stream,即不跟踪一个 TCP 流,你可能会看到访问 qige.io 时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?
因为它们之间的连接是一个短连接,数据发送完成后就要断开连接,但是页面会被缓存下来以便我们再次访问,多个连接的好处就是方便用户访问。
4.应用层
实作一:了解 DNS 解析
先使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。
你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。
可了解一下 DNS 查询和应答的相关字段的含义
问题
你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?
这是因为需要平衡浏览器的负载,因为一般一个部署好的网站会有很多个计算机服务器,它们都有不同的ip地址,但是它们的域名都一样,而每天访问网站的计算机肯定不止一台,所以就把网站背后这些计算机平均分配给来访者。
实作二:了解 HTTP 的请求和应答
打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。
请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么命令,如:GET, POST。并仔细了解请求的头部有哪些字段及其意义。
请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义。
可以看到请求包这里是POST命令,应答包这里的代码是382。
(三)Cisco Packet Tracer实验
1.直接连接两台 PC 构建 LAN
将两台 PC 直接连接构成一个网络。注意:直接连接需使用交叉线。
进行两台 PC 的基本网络配置,只需要配置 IP 地址即可,然后相互 ping 通即成功。
这里实现了两台PC互联。
将两台主机的ip地址进行配置,一个配置为192.168.0.5,另一个配置为192.168.0.6。
这里主机0ping成功了主机1,经测试,主机1也能ping成功主机0,这就实现了两台PC互ping成功。
2.用交换机构建 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 |
各机器及相应ip地址配置完成。
问题
1.PC0 能否 ping 通 PC1、PC2、PC3 ?
经过测试发现,PC0只能ping通PC1,而不能ping通PC2和PC3。
2.PC3 能否 ping 通 PC0、PC1、PC2 ?为什么?
经过测试发现,PC3只能ping通PC2,而不能ping通PC0和PC1。这是因为PC3和PC2处于同一子网,而PC0和PC1又处于另一个子网,我们也没有配置网关信息,相当于网关没有工作,自然无法通信。
3.将 4 台 PC 的掩码都改为 255.255.0.0 ,它们相互能 ping 通吗?为什么?
这里使用PC0进行测试,ping了其他三台PC,发现均能ping通。这是因为修改参数后,它们四台主机处于同一子网。
4.使用二层交换机连接的网络需要配置网关吗?为什么?
需要配置,因为不同网络之间的主机想要通信需要通过网关帮忙转发消息,配置网关可以使不同子网的主机之间建立连接。
3.交换机接口地址列表
二层交换机是一种即插即用的多接口设备,它对于收到的帧有 3 种处理方式:广播、转发和丢弃(请弄清楚何时进行何种操作)。那么,要转发成功,则交换机中必须要有接口地址列表即 MAC 表,该表是交换机通过学习自动得到的!
仍然构建上图的拓扑结构,并配置各计算机的 IP 在同一个子网,使用工具栏中的放大镜点击某交换机如左边的 Switch3,选择 MAC Table,可以看到最初交换机的 MAC 表是空的,也即它不知道该怎样转发帧(那么它将如何处理?),用 PC0 访问(ping)PC1 后,再查看该交换机的 MAC 表,现在有相应的记录,请思考如何得来。随着网络通信的增加,各交换机都将生成自己完整的 MAC 表,此时交换机的交换速度就是最快的!
我们知道交换机在转发数据之前需要它每个端口所连每一个主机对应的MAC地址,构建一个MAC地址表。具体实现:每一个数据帧中都包含有源MAC地址与目的MAC地址,假设PC0向PC2发送一个数据帧,该帧从交换机的端口0进入,交换机提取帧中的源MAC地址,也就是主机PC0所对应的MAC地址,将它与端口0对应,并将这条记录存入表中。此时由于MAC表中并没有该帧的目的MAC地址所对应的端口号,所以交换机采用广播方式向除了已经对应上的端口0外的所有端口进行转发,确保主机PC2可以收到该帧。同理主机PC0收到PC1,PC2,PC3的帧也会把对应地址存入地址表,最终构建出完整的MAC表,这时候交换机的速度就是最快的。
4.生成树协议(Spanning Tree Protocol)
交换机在目的地址未知或接收到广播帧时是要进行广播的。如果交换机之间存在回路/环路,那么就会产生广播循环风暴,从而严重影响网络性能。
而交换机中运行的 STP 协议能避免交换机之间发生广播循环风暴。
只使用交换机,构建如下拓扑:
构建的拓扑如上图。
这是初始时的状态。我们可以看到交换机之间有回路,这会造成广播帧循环传送即形成广播风暴,严重影响网络性能。
随后,交换机将自动通过生成树协议(STP)对多余的线路进行自动阻塞(Blocking),以形成一棵以 Switch4 为根(具体哪个是根交换机有相关的策略)的具有唯一路径树即生成树!
经过一段时间,随着 STP 协议成功构建了生成树后,Switch5 的两个接口当前物理上是连接的,但逻辑上是不通的,处于Blocking状态(桔色)如下图所示:
在网络运行期间,假设某个时候 Switch4 与 Switch5 之间的物理连接出现问题(将 Switch4 与 Switch5 的连线剪掉),则该生成树将自动发生变化。Switch5 上方先前 Blocking 的那个接口现在活动了(绿色),但下方那个接口仍处于 Blocking 状态(桔色)。如下图所示:
5.虚拟局域网 VLAN
在实际网络中(如),你可看到路由器一般位于网络的边界,而内部几乎全部使用交换机连接。
前面我们分析过,交换机连接的是同一个子网! 显然,在这样一个大型规模的子网中进行广播甚至产生广播风暴将严重影响网络性能甚至瘫痪。
另外我们也已经知道,其实学校是划分了 N 多个子网的,那么这些交换机连接的就绝不是一个子网!这样矛盾的事情该如何解释呢?我们实际上使用了支持 VLAN 的交换机!而前述的交换机只是普通的 2 层交换机(或者我们把它当作 2 层交换机在使用。
VLAN(Virtual Local Area Network)即虚拟局域网。通过划分 VLAN,我们可以把一个物理网络划分为多个逻辑网段即多个子网。
划分 VLAN 后可以杜绝网络广播风暴,增强网络的安全性,便于进行统一管理等。
在 CPT 中构建如下图所示拓扑:
这里配置了拓扑结构。
Cisco 2960 交换机是支持 VLAN 的交换机,共有 24 个 100M 和 2 个 1000M 以太网口。默认所有的接口都在 VLAN 1 中,故此时连接上来的计算机都处于同一 VLAN,可以进行通信。
下面我们就该交换机的 24 个 100M 接口分为 3 个部分,划分到 3 个不同的 VLAN 中,id 号分别设为 10、20、30,且设置别名(computer、communication、electronic)以利于区分和管理。
交换机 VLAN 配置:
Switch>en
Switch#conf t
Switch(config)#vlan 10 // 创建 id 为 10 的 VLAN(缺省的,交换机所有接口都属于VLAN 1,不能使用)
Switch(config-vlan)#name computer // 设置 VLAN 的别名
Switch(config-vlan)#exit
Switch(config)#int vlan 10 // 该 VLAN 为一个子网,设置其 IP,作为该子网网关
Switch(config-if)#ip address 192.168.0.1 255.255.255.0
Switch(config-if)#exit
Switch(config)#vlan 20 // 创建 id 为 20 的 VLAN
Switch(config-vlan)#name communication //设置别名
Switch(config-vlan)#exit
Switch(config)#int vlan 20
Switch(config-if)#ip addr 192.168.1.1 255.255.255.0
Switch(config-if)#exit
Switch(config)#vlan 30 // 创建 id 为 20 的 VLAN
Switch(config-vlan)#name electronic // 设置别名
Switch(config-vlan)#exit
Switch(config)#int vlan 30
Switch(config-if)#ip add 192.168.2.1 255.255.255.0
Switch(config-if)#exit
Switch(config)#int range f0/1-8 // 成组配置接口(1-8)
Switch(config-if-range)#switchport mode access // 设置为存取模式
Switch(config-if-range)#switchport access vlan 10 // 划归到 VLAN 10 中
Switch(config-if-range)#exit
Switch(config)#int range f0/9-16
Switch(config-if-range)#switchport mode access
Switch(config-if-range)#switchport access vlan 20
Switch(config-if-range)#exit
Switch(config)#int range f0/17-24
Switch(config-if-range)#switchport mode access
Switch(config-if-range)#switchport access vlan 30
Switch(config-if-range)#^Z
Switch#show vlan // 查看 VLAN 的划分情况
至此,在该交换机上我们就划分了 3 个 VLAN(不包括缺省的 VLAN 1)。
各 VLAN 下 PC 的网络配置及连接的交换机接口如下表:
配置如上图所示。
例如这里我们进行测试,用PC0去ping处于同一子网的PC1和处于不同子网的PC2,结果发现能够ping通PC1,却不能ping通PC2。
思考
分析一下当前为何不同 VLAN 中的 PC 不能通信?网关在此起什么作用?我们的网关又在何处?如何发起广播测试?
VLAN就是用来起分割网络的作用,不同子网之间彼此不能互相通信,而网关在这里进行协议之间的转换,不同网络之间的通信需要网关帮忙进行转发。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!