计算机网络实验--Wireshark实验

计算机网络实验三–Wireshark实验

数据链路层

实作一 熟悉Ethernet帧结构

计算机网络实验--Wireshark实验_第1张图片
问题:
Ethernet帧结构是包含目的MAC、源MAC、类型和字段等要素的,但是我们在使用Wireshark软件进行抓包时,因为有时校验和会由网卡计算,这时wireshark抓到的本机发送的数据包的校验和都是错误的,所以默认关闭了WireShark自己的校验。

实作二 了解子网内/外通信时的 MAC 地址

1.ping 同一子网

计算机网络实验--Wireshark实验_第2张图片
通过查看IP地址为10.1.201.80的的详细信息,发现其物理MAC正是00:74:9c:9f:40:13

2.ping qige.io

计算机网络实验--Wireshark实验_第3张图片
这个MAC地址是qige.io的服务器MAC地址

3.ping www.cqjtu.edu.cn

计算机网络实验--Wireshark实验_第4张图片
这个MAC地址是www.cqjtu.edu.cn的服务器MAC地址
问题:
原因是访问本子网以外的网络的时候,都是通过 mac 地址送到网关处,然后出了网关再通过 IP 地址进行查找;接收到非子网的计算机返回的数据都是先到网关,网关再根据目的MAC送到本机。

实作三 掌握 ARP 解析过程

1.使用 arp -d * 命令清空 arp 缓存

需要用管理员权限启动命令行,如果不是以管理员权限启动就会提示ARP 项删除失败: 请求的操作需要提升。
非管理员权限启动
上图是非管理员权限启动
计算机网络实验--Wireshark实验_第5张图片
上图是以管理员权限启动

2.ping 同一子网下的计算机

计算机网络实验--Wireshark实验_第6张图片
ARP的格式为0806
计算机网络实验--Wireshark实验_第7张图片
回应ARP请求的目的MAC是32:ff
回应ARP请求的源MAC是40:13
计算机网络实验--Wireshark实验_第8张图片

3.ping qige.io

计算机网络实验--Wireshark实验_第9张图片

计算机网络实验--Wireshark实验_第10张图片
ARP的请求和回应
计算机网络实验--Wireshark实验_第11张图片

问题:
ARP代理,访问非子网IP时是通过路由器访问的,路由器再把发出去,目标IP收到请求后,再通过路由器端口IP返回去,那么ARP解析将会得到网关的MAC。

网络层

实作一 熟悉IP包结构

计算机网络实验--Wireshark实验_第12张图片
问题:
头部长度是来表明该包头部的长度,可以使得接收端计算出报头在何处结束及从何处开始读数据。总长度是为了接收方的网络层了解到传输的数据包含哪些,如果没有该部分,当数据链路层在传输时,对数据进行了填充,对应的网络层不会把填充的部分给去掉。

实作二 IP 包的分段与重组

使用 ping 202.202.240.16 -l 2000命令指定要发送的数据长度。

计算机网络实验--Wireshark实验_第13张图片
此时使用 Wireshark 抓包,了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等:
计算机网络实验--Wireshark实验_第14张图片
每次通信发出去的IP包有两个,表示进行了分组,分别对两个包进行详细分析:
计算机网络实验--Wireshark实验_第15张图片
分组150总长为1500,偏移量为0,最后蓝色字体表示151分组是在帧中重新组装的 IPv4包
计算机网络实验--Wireshark实验_第16张图片
分组151总长为548,偏移量是1480,最后也表示有两个碎片,分别是150号分组和151号分组。

问题:
分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办?
答: 当数据包过大时,路由器就会直接丢弃该数据包包,并向发送端发回一个"分组太大"的ICMP差错报文,之后发送端就会使用较小长度的IP数据报重发数据。

实作三 考察 TTL 事件

使用 tracert www.baidu.com命令进行追踪
计算机网络实验--Wireshark实验_第17张图片
使用 Wireshark 抓包,发现TTL是逐渐加1:
计算机网络实验--Wireshark实验_第18张图片
计算机网络实验--Wireshark实验_第19张图片

计算机网络实验--Wireshark实验_第20张图片

问题:
在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?
答: 一般系统都会设置TTL的值为64或者128,如果发现收到这个包的TTL值是50 ,那么我们之间的跳数=64 - 50 =14跳。

传输层

实作一 熟悉 TCP 和 UDP 段结构

  1. 用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
    计算机网络实验--Wireshark实验_第21张图片
  2. 用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。

计算机网络实验--Wireshark实验_第22张图片

问题:
由上可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?
答: 由于下层网络层的PDU是IP包,网络层的传输只能确定IP包最终到达哪个主机,但是不能将数据传输到具体某个请求的进程,这时传输层的端口号就显得重要,源端口和目的端口号的作用就是唯一标识了某个进程,确保通信的数据到达正确的进程。

实作二 分析 TCP 建立和释放连接

  1. 打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
  2. 请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。
    计算机网络实验--Wireshark实验_第23张图片
  • 第一次握手:本机ip地址为10.61.35.64为客户端,发送序列号为Seq=0的报文包给IP地址为20.212.97.243的服务器;
  • 第二次握手:20.212.97.243的服务器收到该报文后,返回一个确认号为Ack=1, 序列号为Seq=0的SYN+ACK的给客户端;
  • 第三次握手:客户端收到来自服务器的响应报文,会将里面的序列号加1赋给新的Ack,同时将里面的Ack赋给新的Seq,即回复一个Seq=1, Ack=1的ACK报文给服务器。
  1. 请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
    计算机网络实验--Wireshark实验_第24张图片
  • 第一次挥手:客户端61.128.140.213发送一个FIN,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。
  • 第二次挥手:服务器端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1,即Ack=(第一挥手发送的Seq=78)+1=79,服务器端进入CLOSE_WAIT状态。
  • 第三次挥手:服务器端发送一个FIN,用来关闭服务器端到客户端的数据传送,服务器端进入LAST_ACK状态。
  • 客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务器端进入CLOSED状态,完成四次挥手。

问题一:
去掉 Follow TCP Stream,即不跟踪一个 TCP 流,你可能会看到访问 qige.io 时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?
答:
建立多个连接就可以同时进行多通道传输数据,这样在传输数据量比较大的时候就可以节省传输时间,同时加快传输速度。

问题二:
我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?
答: tcp释放连接只有三次挥手的原因就是最后一个ACK丢失,三次挥手适合在双方都没有数据要发送的情况下。

应用层

实作一 了解 DNS 解析

  1. 先使用 ipconfig /flushdns命令清除缓存,再使用 nslookup qige.io命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。
    计算机网络实验--Wireshark实验_第25张图片
    计算机网络实验--Wireshark实验_第26张图片
    计算机网络实验--Wireshark实验_第27张图片
  2. 你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。
    计算机网络实验--Wireshark实验_第28张图片解析查询请求的报文如下:
    计算机网络实验--Wireshark实验_第29张图片
  3. 了解一下 DNS 查询和应答的相关字段的含义
    DNS 报文的基础结构部分指的是报文首部,如图所示。
    在这里插入图片描述事务 ID:DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。
    标志:DNS 报文中的标志字段。
    问题计数:DNS 查询请求的数目。
    回答资源记录数:DNS 响应的数目。
    权威名称服务器计数:权威名称服务器的数目。
    附加资源记录数:额外的记录数目(权威名称服务器对应 IP 地址的数目)。
    计算机网络实验--Wireshark实验_第30张图片

问题:
你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?
答:
当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果(域名对应的IP地址)返回。如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域) 的主域名服务器的地址。本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。直到找到正确的纪录。

实作二 了解 HTTP 的请求和应答

  1. 打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。
    计算机网络实验--Wireshark实验_第31张图片

  2. 请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么命令,如:GET, POST。并仔细了解请求的头部有哪些字段及其意义。计算机网络实验--Wireshark实验_第32张图片分析请求包:
    计算机网络实验--Wireshark实验_第33张图片 GET和POST是最常见的HTTP请求方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE、CONNECT;

    请求方法
    1.OPTIONS
    返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务 器发送‘*’的请求来测试服务器的功能性
    2.HEAD
    向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
    3.GET
    向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
    4.POST
    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
    5.PUT
    向指定资源位置上传其最新内容
    6.DELETE
    请求服务器删除Request-URL所标识的资源
    7.TRACE
    回显服务器收到的请求,主要用于测试或诊断
    8.CONNECT
    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

    请求头部
    Host: 给出了接收请求的服务器的主机名和端口号
    User-Agent: 将发起请求的应用程序名称告知服务器
    Accept: 告诉服务器能够发送哪些媒体类型
    Accept-Encoding: 告诉服务器能够发送哪些编码方式
    Accept-Language: 告诉服务器能够发送哪些语言

  3. 请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:200, 304, 404等。并仔细了解应答的头部有哪些字段及其意义。
    计算机网络实验--Wireshark实验_第34张图片
    分析应答包:
    计算机网络实验--Wireshark实验_第35张图片

    常见状态码:
    100: 继续 客户端应当继续发送请求。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。
    102: 继续处理 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。
    200: 请求成功 处理方式:获得响应的内容,进行处理
    201: 请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到 处理方式:爬虫中不会遇到
    300: 该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。 处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
    301: 请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源 处理方式:重定向到分配的URL
    302: 请求到的资源在一个不同的URL处临时保存 处理方式:重定向到临时的URL
    304: 请求的资源未更新
    400: 非法请求
    404: 没有找到 处理方式:丢弃
    500: 服务器内部错误 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在的源代码出现错误时出现。
    501: 服务器无法识别 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。

    计算机网络实验--Wireshark实验_第36张图片

    响应头:
    Age: (从最初创建开始)响应持续时间
    Server: 服务器应用程序软件的名称和版本
    Accept-Ranges: 对此资源来说,服务器可接受的范围类型

    问题:
    刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的 304 代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答 304 应答而不是常见的 200 应答?
    答: 304应答表示请求的资源未更新,200应答表示请求成功,获得响应内容。服务器回答304应答说明浏览器已经将qige.io网站的页面进行缓存,刷新时直接从本地缓存里面取出网站,这就说明请求的内容没有改变,服务器就回答304应答。

你可能感兴趣的:(笔记,wireshark,网络,tcp/ip)