计算机网络的几个实验
文章目录
验证性实验:
1.ipconfig/all的使用
本机的ipconfig/all:
打开cmder,输入ipconfig/all,获得如下信息:
主机名:该计算机的名字。
主DNS后缀:默认值为空,该项用于本地解析。DNS后缀是用来解析主机名的,如果说该项不为空,会在主机名后添加该项指定的后缀。如在ping主机名时,DNS服务器会来解析主机名。
节点类型:节点类型有access接入,trunk中继,hybrid混合三种类型。access用于直接接入网络终端,trunk用于网络设备之间级联,hybrid同时具备以上两者类型的特性。
ip路由已启用:路由是把信息从源地址穿过网络传递到目的地址,发生在网络层。本机的ip路由已启用为“否”,表示本计算机没有提供路由服务。
wins代理已启用:wins代理和DNS都是用来将主机名转换成IP地址。但是wins代理服务用于缓解网络风暴。即:由于网络拓扑的设计和连接问题,或其他原因导致广播在网段内大量复制,传播数据帧,导致网络性能下降,甚至网络瘫痪。
以太网适配器:就是本计算机的网卡,注意是有线网卡,要用网线链接。本计算机有两个网线插孔可以插,所以有两个以太网网卡。
媒体状态:显示现在该网卡的使用状态,本机用的wifi,所以显示媒体状态为断开连接。
连接待定的DNS后缀:这个后缀是某个DNS服务,如果有的话,则是在解析主机名时,该DNS服务器会帮助解析出ip。
描述:网卡的品牌。
物理地址:即网卡的MAC地址,制造商为网络硬件(如无线网卡或以太网网卡)分配的唯一代码,也称作局域网地址,以太网地址。
DHCP已启用:DHCP是一个局域网的网络协议,指的是由服务器控制一段IP地址范围,客户机登录服务器时可以自动的获取服务器分配的IP地址和子网掩码。
无线局域网适配器 本地连接 是用来连接wifi的。
如果本机装了VMware的虚拟机,应该会多出一个 以太网适配器VMware Network Adapter VMnet1的虚拟机网卡。
无线局域网适配器WLAN:无线局域网网络适配器
获得租约的时间:此ip地址的开始使用时间。
租约过期的时间:此ip地址的到期时间。
IPV4和IPV6地址:ipv4被广泛使用,即计算机的唯一网络标识。简称ip地址。
子网掩码:子网掩码和ip地址是组合使用的,ip地址是计算机网络内的位唯一标识,子网掩码则是用来划分子网的。本机子网掩码是255.255.255.0,转为二进制则末尾有8个0,所以该子网掩码划分出来的子网容量是2的8次方,即256,所以192.168.0.0到192.168.0.255都在一个子网中,但是这256个地址只有254个可以用,因为子网的第一个地址是网段地址x.0,最后一个是广播地址x.255,其他的ip地址的计算机可以正常联网(一般可能还有一个x.1的默认网关)。
默认网关:我们从一个房间走到另一个房间,必须经过一扇门,而从一个子网要发消息给另外一个子网,也需要经过一扇交接两个子网的门,即网关。因为TCP/IP协议会根据子网掩码判断这两个ip地址是否在同一个子网下。如果不在,如a向b发信息,先通过a的网关A,网关A把数据包给网关B,网关B再把信息给b。默认网关便是指,一台主机如果找不到可用的网关,则用他给出的默认网关。
蓝牙网络连接:故名思意,这里的适配器是用于计算机的蓝牙连接网络。
旁边计算机的ipconfig(连接的同一个wifi):
首先,该计算机和我的计算机无线网网卡不一样,我的是intel 的wifi6,这个计算机是用的瑞昱半导体公司的网卡。所以两个计算机的物理地址也不同。
该计算机的ip地址是192.168.0.106,本机ip地址是192.168.0.105,我们的子网掩码都是255.255.255.0,用子网掩码与ip地址相与,都得到192.168.0.0,则表示两台计算机处于同一子网。
2.ping指令的使用
对重庆交通大学官网进行ping:
字节值是指:数据包的大小。
时间是指:得到该数据包所花费的时间,这个时间越小,说明连接这个网址的速度越快。
TTL 值:TTL指的是:Time To Live, 表示 DNS 记录在 DNS 服务器上存在的时间,它是 IP 协议包的一个值,告诉路由器该数据包何时需要被丢弃。
ping的其他指令
(1)ping -t的使用
ping -t 是不间断的对某个ip或者网址执行ping操作,直到管理员按下Ctrl+c手动终止,这个指令可以用来测试连接某个网站是否通畅:
(2)ping -a的使用
ping -a 是用来通过ping某个ip地址,来得到他的主机名,如我ping我自己的ip地址:192.168.0.105,就会解析出我自己的主机名:
(3)ping -l 【字节大小】的使用
windows默认以32位字节的数据包来ping某个ip地址。但是我们也可以通过ping -l 指令以指定发送的数据包的大小,最大可以发送65500字节。如果发送字节大于等于65500,有可能导致目的ip的计算机宕机。所以可以通过配合-t指令来对某个ip的计算机实施dos攻击。
(4)ping -n 【个数】和ping -r 【个数】
ping -n 2 某个ip/网址 是指对某个ip/网址ping 两个数据包,ping -r 2 则是指ping 某个ip/网址 所经过的路由个数,记录2个。这里最多跟踪到9个路由。
如 ping -n 1 -r 9 www.cqjtu.edu.cn 则是对重庆交通大学官网发送一个数据包,跟踪9个路由。
对我同一子网下的计算机ping -r记录路由会发现无效,因为同一子网下传输数据不需要路由器的介入。
如果无法ping通,问题在哪里?
从内到外发现问题并解决:
(1)可能是对方关机。解决:将其开机。
(2)可能是本机的防火墙过滤了ping发出的数据包。解决:修改防火墙设置或者直接关闭防火墙。
(3)可能是本机的网络软件硬件出现异常,如网线,网卡等。交换机负责连接设备,路由器负责连接网络,防火墙负责网络访问限制。解决:ping 回送地址:127.0.0.1,这个地址常用于测试本机TCP/IP是否正常。
(4)交换机负责连接设备,可能是本机到交换机的连接出现了问题。解决:ping旁边的计算机的ip地址,如果ping通,则说明本子网内部交换机工作正常。如果ping不通,则说明可能是交换机出了问题。
(5)可能是网关出口有问题,数据无法通过网关传递到其他网关。解决:先ipconfig,获得网关地址,再ping网关地址,如果ping不通,则说明问题出在网关。
(6)如果上述都没问题,则说明问题出在网关以外的部分。
ping通ip,ping不通域名
能ping通ip 则代表链路是通的,但是ping不通域名只能说明是域名解析出现了问题。而域名解析则是域名服务器DNS进行域名和与之相对的ip地址的转换有问题。可以先用ipconfig/flushdns指令清除dns缓存,再设置电脑的DNS为:8.8.8.8或者101.226.4.6或者114.114.114.114。
3.tracert指令的使用
tracert原理
Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP数据包访问目标所采取的路径。Tracert命令使用用 IP的 TTL和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。以下便是本机到百度之间的路由跟踪消息,最后一列为路由的ip地址。请求超时是因为。tracert指令要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“请求超时”的消息发回源系统。
可以用网站http://ip.cn 了解这些节点处于何处:经过查询,本机先通过网关进入依次进入3,4,5行的重庆联通的路由(我用的wifi是联通的),再进入6行的北京联通,再到10行江苏省南京市联通,再到11行北京电信,最后又回到了13行的江苏省南京市联通。
ping.ge
ping.pe 这个网站可以探测从全球主要的 ISP 到某站点的线路状态,当然也包括各线路到该主机的路由情况。如http://ping.pe/www.baidu.com 可以了解到从全球主要ISP到百度的线路状态。
tracert其他网站,前几跳都是相同的,为什么?
通常其他网站不和自己处于同一子网,要发送数据包到其他网站,则需要通过网关的接入,所以前几跳的节点都是相同的:网关。
出现星号是为什么
诊断工具tracert通过向目标发送具有变化的“生存时间 (TTL)”值的“ICMP 回响请求”消息来确定到达目标的路径。要求路径上的每个路由器在转发数据包之前至少将 IP 数据包中的 TTL 递减 1。这样,TTL 就成为最大链路计数器。数据包上的 TTL 到达 0 时,路由器应该将“ICMP 已超时”的消息发送回源计算机。Tracert 发送 TTL 为 1 的第一条“回响请求”消息,并在随后的每次发送过程将 TTL 递增 1,直到目标响应或跃点达到最大值,从而确定路径。默认情况下跃点的最大数量是 30,可使用 -h 参数指定。检查中间路由器返回的“ICMP 超时”消息与目标返回的“回显答复”消息可确定路径。但是,某些路由器不会为其 TTL 值已过期的数据包返回“已超时”消息,而且这些路由器对于 tracert 命令不可见。在这种情况下,将为该跃点显示一行星号 。 tracert的时候出现*号的行列说明有路由器(也许是出于安全考虑,也许是网络问题)没有回应。所以出现星号。
3.ARP地址解析协议
arp -a
该指令用于查看高速缓存中的所有项目,会得到Internet地址,物理地址以及类型。
这里第一行是我的网关地址,一台主机可以有多个网关,默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。所以该类型是动态的。
第二行则是我的广播地址。最后一行则是当前子网的广播地址,其他的都是内网IP。
在ping了旁边计算机192.168.0.106后,再arp-a,发现我的高速缓存中出现了该ip:
出现这个变化是因为:每当发送一个指定地点的数据报且高速缓存中不存在当前项目时,Arp便会自动添加该项目。一旦高速缓存的项目被输入,它们就已经开始走向失效状态(可能在几分钟之后就没了)。按照缺省设置,Arp高速缓存中的项目是动态的,所以旁边计算机的ip在我的arp -a中的类型是动态的。
arp的其他命令:
可以先直接arp查看该指令的可选参数:
(1)arp -s
该指令是添加主机并且将Internet地址和物理地址相关联。该指令成功后,会永久添加一个ip地址到物理地址的转换信息到表中。
(2)arp -d
该指令是从arp表中删除某个ip的转换物理地址的信息。如果参数为*,就会删除所有在表中的主机。
设置网关地址的arp为静态
一般而言,arp 缓存里常常会有网关的缓存,并且是动态类型的。
网关ip为:192.168.0.1,Mac地址是:54-a7-03-6a-f4-bc,直接用arp -s 192.168.0.1 54-a7-03-6a-f4-bc命令来设置为静态,会发现ARP项添加失败。
这是因为本机已经有该arp缓存了,要先用arp -d删除该网关的缓存,再使用上述指令便可设置默认网关为静态。
为何arp中常常有网关的信息
因为本计算机要传递信息到其他子网,必须经过网关,所以缓存中常常存在网关的信息。
网关设置为静态有什么优缺点?
优点:防止ARP欺骗,ARP欺骗是针对以太网地址解析协议(ARP)的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网络上特定计算机或所有计算机无法正常连线。所以将网关设置为静态后,就只用该网关了,就不会使用攻击者更改后的MAC地址。
缺点:本来是有多个网关的,只是在找不到网关时采用默认网关,设置为静态则只用这一个网关了。
你可能会在实作三的操作中得到
"ARP 项添加失败: 请求的操作需要提升" 这样的信息
,表示命令没能执行成功,你该如何解决?
这是因为没用用管理员打开cmder,右键用管理员打开即可。
4.DHCP
DHCP称作动态主机组态协定,主要是用于内部网络或者网络服务供应商自动分配ip地址给用户,以及用于内部网管理员对所有电脑做中央管理。意思是,我每次开机后,要联网,则内部网络的服务供应商(联通)自动给我的电脑一个ip地址。
重新获取一个ip
先用ipconfi/release来释放自动获取的网络配置信息,再用ipconfig/renew重新获取:
在ipconfig/all中可以发现:
刚才输入ipconfi/renew的时候是下午五点11分,这时通过DHCP给我获得了一个新的ip(虽然跟之前一样,但确实操作了一遍),因为我获得租约的时间正是下午5点11分,这说明是才获得的新ip。
DHCP服务过程大致如下:
(1) 客户机开机,要上网,会自动搜索DHCP服务器(由网络服务商提供,如联通)
(2) 服务器提供许多IP地址和配置信息,客户机从中选择一个配置信息作为自己的ip地址。
(3) 客户机的租约如果过期,则请求租用更新。
(4) 客户机结束使用ip地址,则释放ip地址。
为什么有时候我的ip是169.254.xx.xx?
许多客户端操作系统使用称为自动专用 IP 寻址的东西。即使没有 DHCP 服务器,此过程也会分配 IP 地址。如果未应答 消息,客户端会选择一个随机的 16 位数字并在其前面加上 169.254.xx 它会执行无偿 ARP 并将该地址分配给自己。
如果本机ip是169.254.xx 地址,则表示无法访问 DHCP 服务器。电脑将无法访问网络,因为没有路由器连接到或来自该电脑。通过找出电脑无法看到 DHCP 服务器的原因来解决此问题。
上述知识来自于一篇国外的文档:WHERE DID THAT 169.254.X.X IP ADDRESS COME FROM?
5.netstat
Netstat是在内核中访问网络连接状态及其相关信息的命令行程序,可以显示路由表、实际的网络连接和网络接口设备的状态信息,以及与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络服务运行状况。
查看常用的端口号分配
打开C:\WINDOWS\system32\drivers\etc\services文件,可以查看系统将一些常用的端口与服务的记录。
参照维基百科的TCP/UDP的端口列表,我们可以对比起来看自己常用的端口号都是用于一些什么协议
netstat -an 指令
该指令用于查看计算机当前的网络连接状况。如下:
这是本地机ip(回送地址)的部分端口的使用状况。
本机ip的部分端口的使用情况:
6.DNS
dns是用来将域名映射到ip地址的一套域名系统。解析过程大致如下,客户机要访问www.baidu.com,这是一个域名,首先本地的DNS服务器会先查看缓存中有无该域名转为ip地址的记录,如果没有,计算机访问DNS根服务器,根服务器发现该网址末尾是.com,则是由com区域管理,返回一个.com域服务器给本机,本机向该服务器查询,该com域服务器发现是baidu.com,则返回一个baidu.com的域服务器给本机,本机再向该服务器查询,最后baidu.com域服务器才知道www.baidu.com的ip地址,返回给本机的DNS服务器,该服务器又返回给客户机。这就是DNS域名的解析过程。
可以从之前的service文件中看到,dns用的是tcp和udp的53号端口:
查看固定的dns信息
某些固定或者静态的dns信息都保存在C:/windows/system32/drivers/etc/hosts文件中:
所以我们的127.0.0.1就对应localhost,因此在做web项目时,在网址输入localhost:8000/xxx就相当于输入127.0.0.1:8000/xxx,如下:
查看计算机的dns缓存
在解析域名为ip之前,计算机现在这个缓存中看是否已经有了该转换记录,这将大大节省dns解析的时间。我们可以用ipconfig/displaydns查看dns缓存记录。也可以用ipconfig/flushdns来清空dns缓存。
百度的dns缓存(shifen.com也是百度的)
用ipconfig /flushdns清空后:
出现了csdn的dns缓存记录,因为我现在正在用csdn写文章。
用nslookup命令解析某个域名
nslookup命令用于查询DNS的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。如nslookup qige.io是用默认的DNS服务器来查询该域名:
也可以用其他CloudFlare(1.1.1.1)或 Google(8.8.8.8) 的全球 DNS 服务器来解析:
可以发现使用指定dns服务器解析出的结果中的服务器各不相同。
修改hosts文件来屏蔽网页广告
一般而言,我们访问的网页中是含有广告链接的,当我们解析完网站域名,加载渲染该网页的过程中就会产生对广告链接的请求,然后DNS解析该广告链接,解析成功后,网页弹出广告页面。
hosts文件屏蔽广告方式原理:在文件中添加该广告链接,并且指定一个ip地址(通常为本机地址),因为hosts文件优先级是高于DNS服务器,这样浏览器解析该广告链接时,优先hosts文件,这样我们就相当于更改了该链接本来的ip地址,从而使该链接失效。
当然,这些只是一般情况,如果这样的方式无法屏蔽广告,一种可能是广告内容是嵌入到网页中的。
DNS欺骗,也被称为DNS缓存中毒,是一种计算机黑客攻击形式,黑客将错误的域名系统数据引入DNS解析器的缓存,导致名称服务器返回一个不正确的结果记录,例如IP地址。这导致用户会浏览和来到攻击者的计算机(或任何其他计算机),上文已经讲过将网关ip设置为静态,可以预防DNS欺骗。
7.cache
cache也存在与计算机系统中,同样在浏览器缓存中,cache也是高速缓存 即缓存。
浏览器缓存是根据 HTTP 报文的缓存标识进行的,是性能优化中简单高效的一种优化方式。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。
在chorme浏览器中查看cache
可以按F12,或则右键网页,点击检查,打开开发者工具,选择网络,不勾选停用缓存,刷新页面,在下方观察加载花费时间:
勾选停用缓存后,刷新:
可以发现停用缓存后加载时间变长了,因为停用缓存后,加载该网页的数据全都是直接从internet传过来的,数据的传送相比本地浏览器缓存肯定慢了一些。
wireShark实验:
1.wireshark抓包,熟悉以太网帧结构
进入wireshark,选择自己现在用的网卡(我用的wifi),进去后便开始以默认选项进行不断抓包:

可见:目的MAC地址为:
我的MAC地址为:
该数据就是送到我电脑上(wlan网卡)。
其源地址是:
类型为ipv4。
这一段便是以太网的帧
以太网的帧结构为:
1.前同步码(8字节):由7个字节的前导码和1个字节的帧开始符构成。在wireshark中没有显示。
2.目的地址(6字节):这里是:04 33 c2 b9 da 43
3.源地址(6字节):这里是:54 a7 03 6a f4 bc
4.类型(2字节):ipv4,所以是08 00
5.负载
6.冗余校验CRC(字节)
为什么wireshark的以太网帧字段中没有冗余校验呢?
经过网上搜索得知,wireshark抓包之前,在物理层的网卡已经进行校验了,如果校验通过,才会有下一步的举措。所以说wireshark中抓到包都已经通过校验了。
2.了解子网内/外通信时的 MAC 地址
ping我旁边的一台计算机192.168.0.106,通过icmp关键字对wireshark过滤,可以发现:
其目的地址的mac地址为:
这就是我旁边计算机的mac地址
而源地址的mac地址便是我的mac地址。这是因为我和我的另一台计算机处于同一子网下,所以我ping到另一台计算机,不需要经过网关,因此源地址目的地址就是分别我的mac地址和另一台计算机的mac地址。
**ping www.cqjtu.edu.cn **,该网站与我不在同一子网,抓包如下:
源地址和目的地址为:
我们可以用arp -a来看该目的地址的mac地址的ip地址是啥:
可以发现,该mac地址是我的网关,所以说此时源地址是我的mac地址,目的地址是网关的mac地址。
通过以上的实验,你会发现:
访问本子网的计算机时,目的 MAC 就是该主机的
访问非本子网的计算机时,目的 MAC 是网关的
请问原因是什么?
这是因为我发数据到同一子网的ip,不需要经过网关。
但是我发数据到外网,就需要经过网关。
3.掌握 ARP 解析过程
1.为防止干扰,先使用 arp -d * 命令清空 arp 缓存
2.ping 我的另一台计算机,用arp过滤抓包,如下:
可见目的地址是全1(广播),源地址是我的mac地址。
再次使用 arp -d * 命令清空 arp 缓存
然后 ping qige.io,同时用 Wireshark 抓这些包。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
目的地址全1,源地址是我的网关mac。
同样是因为同一子网下不需要通过网关,可以直接得到该IP对应的MAC,不属于同一子网的话,需要通过网关才能通信。
4.熟悉ip包结构
任意抓包,查看ip包结构:
版本:ip头部的第一个字段是版本:占用一个字节(4个bit),位于ip包最前面。对于ipv4,该字段的值必须是4。
头部长度:接下来的一个字节是头部长度,此处为5(0101)所以说头部长度的最大值为15(1111),头部长度用于说明头部由多少个32位字组成。
区分
区分服务:一般情况下不使用。只有使用区分服务时,这个字段才起作用,例如:需要实时数据流的 VoIP 。此处区分服务为00。
总长度:占16位,定义为ip包的总长度,包括了头部和数据的长度。该字段最大值为2^16-1,如果说大了,就拆分为多个小包。这里是01 8d
TTL 同理,此处ttl为128 即80
占2位,避免 IP 包因陷入路由环路而永远存在。IP 包每经过一个路由器,TTL 都被减一,直到 TTL 为零时则被丢弃。
协议类型:此处位06
06为TCP协议,常见协议如下:
✎ 问题
为提高效率,我们应该让 IP 的头部尽可能的精简。
但在如此珍贵的 IP 头部你会发现既有头部长度字段,
也有总长度字段。请问为什么?
头部长度的存在是因为IP 头部可能包含数量不一的 可选选项 ,因此需要一个字段来记录头部大小,进而确定数据的偏移量。总长度是为了接收方的网络层了解到传输的数据包含哪些,如果没有该部分,当数据链路层在传输时,对数据进行了填充,对应的网络层不会把填充的部分给去掉。
5.IP 包的分段与重组
之前提到,我们可以用ping ip -l size 来向某个ip发送指定大小的包,比如说ping 202.202.240.16 -l 2000 向 202.202.240.16 发送2000大小的包,但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。用ip.addr == 202.202.240.16 进行过滤的wireshark抓包结果如下:
ip包需要分段时,会用一个16位的识别号来记录一个ip包的id,具有同一个该id的ip包才会进行组装。发了四个包,观察第一个包的id是48876,分片为两个,两个的id都是48876,所以可以组装:
对于分开的第一个大包,标志位为0x1,代表接下来还有包,偏移量为0
分开的第二个小包,标致位为0,偏移量为1480
分段与重组是一个耗费资源的操作,
特别是当分段由传送路径上的节点即路由器来完成的时候,
所以 IPv6 已经不允许分段了。那么 IPv6 中,
如果路由器遇到了一个大数据包该怎么办?
ip包中有一处DF标志位,表明是否允许分片,对于ipv6来说,分段只能在源地址和目的地址执行,所以该标志位直接设置1,丢弃该包,并返回ICMP出错的报文。
6.考察TTL事件
对www.baidu.com 执行tracert路由跟踪,使用wireshark抓包(icmp过滤)
TTL是ip数据包在计算机网络中可以转发的最大跳数,走一跳,ttl减一,如果说ip包在到达目的ip之前,ttl减到了0,则路由器将该包丢弃,并返回请求超时。
所以tracert的工作原理是:首先,tracert送出一个TTL是1的IP 数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将TTL减1。此时,TTL变为0,所以该路由器会将此数据包丢掉,并送回一个超时消息,tracert 收到这个消息后,便知道这个路由器存在于这个路径上,接着tracert 再送出另一个TTL是2 的数据包,以此类推。tracert 每次将送出的数据包的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个数据包 抵达目的地。当数据包到达目的地后,该主机则不会送回超时消息,一旦到达目的地,经过网上搜索得知:由于tracert通过UDP数据包向不常见端口(30000以上)发送数据包,因此会收到超时消息,故可判断到达目的地。
在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,
但现实中我们都以跳数/节点数进行设置。
如果你收到一个包,其 TTL 的值为 50,
那么可以推断这个包从源点到你之间有多少跳?
根据上述tracert原理可知,如果说ttl默认值是64,则有64-50=14跳,如果默认值是128,则128-50=78跳。
7.熟悉 TCP 和 UDP 段结构
用wireshark抓包,分析tcp,udp的段结构:
tcp
源端口:59936,4个字节,目的端口:80,4个字节。
标致字段:六个bit,这里设置了FIN,ACK
校验和:16bit,功能是用于检验当前的报文段是否有数据错误或丢失。
确认号是在仅当ack标志设置时有效,长度为 32 位。它表示已确认收到的数据序号,它的值为:已收到数据最后一个字节的序号加一,即接收方期望进一步接收的数据序号。
序列号长度为 32 位,表示数据首字节的序号。在三次握手阶段,SYN 指令也是通过该字段,将本端选定的 起始序号 告诉接收方。
UDP
源端口: 1024,目的端口: 5001
长度: 该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8。
校验值: 该字段占据 16 位,可以检验数据在传输过程中是否被损坏。
问题
由上大家可以看到 UDP 的头部比 TCP 简单得多,
但两者都有源和目的端口号。
请问源和目的端口号用来干什么?
端口号是用来代表某一个计算机的不同应用程序的,比如说我的3000端口代表我学生端后台,3001代表我的管理员后台。所以说源端口和目的端口的存在是为了两个计算机各自的端口所对应用程序之间的连接。
8.分析 TCP 建立和释放连接
1.打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
2.请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征
三次握手的建立连接的包:
上面说过 SYN是用于建立TCP连接的标志号,所以一开始[SYN],用于发起一次TCP连接。
第一次握手:SYN=1,此时seq=0,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态
第二次握手:同意链接,发出确认报文,ACK=1,SYN=1,确认号ack=0+1=1,自己初始化一个序列号seq=0;TCP服务器进程进入了SYN-RCVD(同步收到)状态
第三次握手:客户进程收到确认后,还要向服务器给出确认。ACK=1,ack=0+1=1。自己的序列号seq=0+1=1。此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态
3.请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
第一次挥手,服务器发送FIN和ACK报文,表示自己没有数据要发了,想要断开连接,fin_wait_1 状态(不能再发送数据到客户端,但能够发送控制信息 ACK 到客户端)。
第二次挥手,客户收到FIN报文,直到没有数据要来了,发送ACK确认。服务器收到客户端对FIN的ACK。
第三次挥手,客户端发送FIN,ACK给服务端,表示自己没有数据要发了,服务器收到FIN后,发送ACK回去。
第四次挥手,客户端收到ACK,进入close状态,关闭本端口的会话窗口。释放资源。
去掉 Follow TCP Stream,即不跟踪一个 TCP 流,
你可能会看到访问 qige.io 时我们建立的连接有多个。
请思考为什么会有多个连接?作用是什么?
多个连接是用来提供多个传输通道的,可以加快传输数据的速度。
我们上面提到了释放连接需要四次挥手,
有时你可能会抓到只有三次挥手。原因是什么?
因为有时候可能出现ACK和FIN合在一起的情况。(网上查阅得知)即在释放连接的时候,有一次返回的时候ACK=1确认释放连接的时候,同一个报文中FIN=1,即同时发出的释放连接的请求。
9.了解 DNS 解析
1.先使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。
2.你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。
53号端口正是对应的dns服务:
我要查某个域名的ip,则请求本地dns服务器,即53号端口,所以目的端口是53,53号端口从外面得到了ip的信息,最后再将信息返回给我。
你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,
思考一下是什么原因?
因为我们的dns服务器不止一个:
每一个服务器的ip地址不同,发出的解析请求是分散给不同的服务器,连接不同的服务器就有不同的服务器地址。
10.了解 HTTP 的请求和应答
1.我用浏览器访问我自己的web项目,用 Wireshark 抓包
2.请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么命令,如:GET, POST。并仔细了解请求的头部有哪些字段及其意义。
这个GET是用来得到课程图片的。
这个GET是用来得到用户头像的
后面的authorization是因为我用了jwt认证,在ajax请求的时候加的请求头。
查阅得知,http请求包有:
3.请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义。
捕获的包中 有200,有304
HTTP应答码也称为状态码,它反映了Web服务器处理HTTP请求状态。HTTP应答码由3位数字构成,其中首位数字定义了应答码的类型:
1XX-信息类(Information),表示收到Web浏览器请求,正在进一步的处理中
2XX-成功类(Successful),表示用户请求被正确接收,理解和处理例如:200 OK
3XX 重定向类(Redirection),表示请求没有成功,客户必须采取进一步的动作。如304:如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。简单的表达就是:服务端已经执行了GET,但文件未变化。
4XX-客户端错误(Client Error),表示客户端提交的请求有错误 例如:404 NOT
Found,意味着请求中所引用的文档不存在。
5XX-服务器错误(Server Error)表示服务器不能完成对请求的处理:如 500,出现500一般就是后端代码报错了。
刷新一下网站,你会发现不少的 304 代码的应答,
这是所请求的对象没有更改的意思,
让浏览器使用本地缓存的内容即可。
那么服务器为什么会回答 304 应答而不是常见的 200 应答?
因为浏览器刷新后,服务器根据浏览器传来的时间发现和当前请求资源的修改时间一致,认为服务器判断资源没改变,所以应答304。
CPT实验
1.两个pc直连
设置pc2,pc3 的ip分别为192.168.0.105和192.168.0.106:
用交叉线相连,可以ping通。
2.用交换机构建LAN
PC0 能否 ping 通 PC1、PC2、PC3 ?
Pc1可以,其他两个不行,因为2,3 不与pc0在同一子网。
PC3 能否 ping 通 PC0、PC1、PC2 ?为什么?
同理,可以ping通pc2,但是不通pc0和pc1。因为后两者不与pc3同一子网。
将 4 台 PC 的掩码都改为 255.255.0.0 ,它们相互能 ping 通吗?为什么?
可以,如果掩码都为255.255.0.0,他们四个的网络号则都是192.168.0.0,处于同一子网,可以ping通。
使用二层交换机连接的网络需要配置网关吗?为什么?
不用,子网内部的通信不需要网关的介入,网关是用来与外部子网通信的。
集线器和交换机的区别是什么
可以说集线器是非智能的交换机。 因为,集线器是一种非智能的网络设备,只能起到信号放大和传输的作用,不能对信号中的碎片进行处理,而交换机是一种智能的网络设备,所以也可以说是相当于智能的集线器,它除了拥有集线器的所有特性以外,还具备自动寻址、交换、处理等功能。
3.交换机接口地址列表
最初交换机的mac table是空的:
ping一下:
交换机的mactable多了记录,这是因为ping的时候,使用了arp协议,即将ip地址转换为mac地址,然后存放于arp缓存中。
4.生成树协议(Spanning Tree Protocol)
交换机在目的地址未知或接收到广播帧时是要进行广播的。如果交换机之间存在回路/环路,那么就会产生广播循环风暴,从而严重影响网络性能。
而交换机中运行的 STP 协议能避免交换机之间发生广播循环风暴。
构建如下拓扑结构:
此时交换机之间有回路,产生网络风暴。随后,交换机将自动通过生成树协议(STP)对多余的线路进行自动阻塞(Blocking),以形成一棵以 Switch4 为根(具体哪个是根交换机有相关的策略)的具有唯一路径树即生成树。
可以用cpt的simulator来显示交换机的stp协议的个过程:
减去中间那条线:
5.路由器配置初步
类似如下配置: