一、数据链路层

1.熟悉 Ethernet 帧结构

ping www.baidu.com

mac wireshark抓安卓手机包 wireshark抓包mac地址_mac wireshark抓安卓手机包


由图可见,目的Mac为00:74:9c:9f:40:13, 源Mac地址为40:5b:d8:32:98:07,类型为IPV4

问题解答:
Wireshark 抓包前,在物理层网卡已经去掉了一些之前几层加的东西,比如前导同步码,FCS等等,之后利用校验码CRC校验,正确时才会进行下一步操作,因此,抓包软件抓到的是去掉前导同步码、FCS之外的数据,没有校验字段

2.了解子网内/外通信时的 MAC 地址

(1)我的IP地址为10.160.173.49,ping 10.160.173.50

mac wireshark抓安卓手机包 wireshark抓包mac地址_wireshark_02


可以看到,目的Mac仍然为00:74:9c:9f:40:13,源Mac地址仍然为40:5b:d8:32:98:07;

因为无法访问目标主机,所以请求的包到达了网关,那么目的Mac地址本该为被访问主机的MAC地址,现在变成了网关的Mac地址,源MAC地址应该是本机的物理地址,

(2)ping www.baidu.com

mac wireshark抓安卓手机包 wireshark抓包mac地址_mac wireshark抓安卓手机包


目的Mac仍然为00:74:9c:9f:40:13(网关的),源Mac地址仍然为40:5b:d8:32:98:07(本机的)(3)ping qige.io

mac wireshark抓安卓手机包 wireshark抓包mac地址_mac wireshark抓安卓手机包_04


目的Mac仍然为00:74:9c:9f:40:13(网关的),源Mac地址仍然为40:5b:d8:32:98:07(本机的)

(4)问题解答:
因为本子网内的信息可以直接到达,而本机接收到的本子网以外的信息必定经由网关发送给我,同理本机发送到本子往外信息的下个地址必定是网关的mac地址。

3.掌握 ARP 解析过程

本机IP地址为192.168.43.68,ping 192.168.43.210

mac wireshark抓安卓手机包 wireshark抓包mac地址_mac wireshark抓安卓手机包_05


用 Wireshark 抓这些包(可 arp 过滤)

mac wireshark抓安卓手机包 wireshark抓包mac地址_wireshark_06


查看ARP请求格式

mac wireshark抓安卓手机包 wireshark抓包mac地址_wireshark_07


请求的内容为目标IP的MAC地址

该请求的目的 MAC 地址是00:00:00_00:00:00

查看请求回应

mac wireshark抓安卓手机包 wireshark抓包mac地址_mac wireshark抓安卓手机包_08


回应的源Mac地址为HuaweiTe_8e:33:68(24:31:54:8e:33:68)

目的Mac地址为40:5b:d8:32:98:07,恰好为请求方的MAC地址

(2)ping qige.io

mac wireshark抓安卓手机包 wireshark抓包mac地址_字段_09


查看ARP请求

mac wireshark抓安卓手机包 wireshark抓包mac地址_IP_10


mac wireshark抓安卓手机包 wireshark抓包mac地址_字段_11


mac wireshark抓安卓手机包 wireshark抓包mac地址_网络_12

可以看到,该请求是网关在回应

(3)问题解答:
对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的ARP请求会使用自己的MAC地址与目标计算机的IP地址对源计算机进行应答,访问非子网IP时需要经过网关出入,通过路由器把包发出去,目标IP收到请求后,再通过路由器端口IP返回去,那么ARP解析将会得到网关的MAC。

二、网络层

1.熟悉 IP 包结构

mac wireshark抓安卓手机包 wireshark抓包mac地址_wireshark_13


版本为4,头部长度为20字节,总长度为60字节,存活时间64,协议类型为ICMP

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

2.IP 包的分段与重组

ping 202.202.240.16 -l 2000

mac wireshark抓安卓手机包 wireshark抓包mac地址_网络_14


用 ip.addr == 202.202.240.16 进行过滤

mac wireshark抓安卓手机包 wireshark抓包mac地址_IP_15


打开Flags查看信息

mac wireshark抓安卓手机包 wireshark抓包mac地址_IP_16


问题解答:

因为在 IPv6中分段只能在源与目的地上执行,不能在路由器上进行。因此当数据包过大时,路由器就会直接丢弃该数据包包,并向发送端发回一个"分组太大"的ICMP差错报文,之后发送端就会使用较小长度的IP数据报重发数据,所以路由器会直接丢弃再通知发送端进行重传。

3.考察 TTL 事件

使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤)

mac wireshark抓安卓手机包 wireshark抓包mac地址_网络_17


TTL为1

mac wireshark抓安卓手机包 wireshark抓包mac地址_mac wireshark抓安卓手机包_18


TTL为2

mac wireshark抓安卓手机包 wireshark抓包mac地址_wireshark_19


TTL为3

mac wireshark抓安卓手机包 wireshark抓包mac地址_wireshark_20


TTL是每经过一次路由器就减一,所以每个发送包的TTL的TTL依次递增。由此我们可以知道该追踪原理就是:TTL从1开始发送,每到一个路由器就减一,TTL到0之后就返回时间超过的差错报文。

问题解答:
TTL的值为50,与之相近的最近的为64,所以可以推断这个包从源点到你之间有64-50-1=13跳

三、传输层

1.熟悉 TCP 和 UDP 段结构

(1)Wireshark 任意抓包(可用 tcp 过滤)

mac wireshark抓安卓手机包 wireshark抓包mac地址_字段_21


由图可见,源端口为64178、目的端口为443、序列号为1、确认号为1。

mac wireshark抓安卓手机包 wireshark抓包mac地址_网络_22


各种标志位:Urgent紧急位为0正常,Acknowledgment确认位为1,Push推位为0,Reset恢复位为0正常(当为1时表示拒绝访问),SYN同步位为0(当用于三次握手的前两次时置为1),Fin结束位为0(用于结束后释放连接)(2)用 Wireshark 任意抓包(可用 udp 过滤)

mac wireshark抓安卓手机包 wireshark抓包mac地址_字段_23


源端口为8200,目的端口为64962,长度为66

问题解答:
源端口来表示发送终端的某个应用程序进程,目的端口来表示接收终端的某个应用程序进程。端口号就是来标识终端的应用程序进程,从而实现应用程序进程之间的通信。

2.分析 TCP 建立和释放连接

访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream)

mac wireshark抓安卓手机包 wireshark抓包mac地址_网络_24

在捕获的包中找到三次握手建立连接的包

mac wireshark抓安卓手机包 wireshark抓包mac地址_IP_25


64422第一次请求(包含Seq序列号0,长度0,SYN同步位)到达443,443回复(SYN同步位,ACK确认号1,)给64422,

然后64422第二次请求(ACK确认号为1),三次握手建立连接成功在捕获的包中找到四次挥手释放连接的包

mac wireshark抓安卓手机包 wireshark抓包mac地址_wireshark_26


从图中可看到443到64422的过程中,有FIN结束位,说明此次过程用于释放连接。

主机发出 FIN 信号请求断开,服务器端回应一个 ACK 确认信号,然后服务器端又发出一个 FIN 信号(这里将 ACK 和 FIN 合并成立一个包),最后主机回应一个 ACK 确认信号,即可断开连接。

问题解答:
1.建立多个连接的目的是为了加快网页加载速度,保证通信的流畅与稳定。
2.只抓到三次挥手是因为第四次挥手是用于释放连接,一般是合并到第三次握手过程中去了。

四、应用层

1.了解 DNS 解析

使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析

mac wireshark抓安卓手机包 wireshark抓包mac地址_字段_27


Wireshark DNS过滤

mac wireshark抓安卓手机包 wireshark抓包mac地址_网络_28

mac wireshark抓安卓手机包 wireshark抓包mac地址_字段_29


可以看到,当前计算机使用 UDP用户数据报协议,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了对应的结果。通过对比,发现nslookup qige.io得到的Address为本机的DNS服务器IP地址,

mac wireshark抓安卓手机包 wireshark抓包mac地址_mac wireshark抓安卓手机包_30

Queries                                       #问题部分
        baidu.com: type A, class IN
            Name: baidu.com                       #查询名字段, 这里请求域名baidu.com
            [Name Length: 9]
            [Label Count: 2]
            Type: A (Host Address) (1)            #查询类型字段, 这里为A类型
            Class: IN (0x0001)                    #查询类字段, 这里为互联网地址

对比上述资料分析,了解查询相关字段含义

应答相关字段

mac wireshark抓安卓手机包 wireshark抓包mac地址_wireshark_31

Answers                                                      #“回答问题区域”字段
    baidu.com: type A, class IN, addr 220.181.57.216         #资源记录部分
        Name: baidu.com                                      #域名字段, 这里请求的域名为baidu.com
        Type: A (Host Address) (1)                           #类型字段, 这里为A类型
        Class: IN (0x0001)                                   #类字段
        Time to live: 5                                      #生存时间
        Data length: 4                                       #数据长度
        Address: 220.181.57.216                              #资源数据, 这里为IP地址
    baidu.com: type A, class IN, addr 123.125.115.110        #资源记录部分
        Name: baidu.com
        Type: A (Host Address) (1)
        Class: IN (0x0001)
        Time to live: 5
        Data length: 4
        Address: 123.125.115.110

对比上述资料分析,了解应答相关字段含义

问题解答:
为了使服务器负载得到平衡(因为每天访问站点的次数非常多)网站就设有好几个计算机,每一个计算机都运行同样的服务器软件。这些计算机的IP地址不一样,但它们的域名却是相同的。这样,第一个访问该网址的就得到第一个计算机的IP地址,而第二个访问者就得到第二个计算机的IP地址等等。这样可使每一个计算机的负荷不会太大。

2.了解 HTTP 的请求和应答

访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream)

mac wireshark抓安卓手机包 wireshark抓包mac地址_网络_32


在捕获的包中找到 HTTP 请求包

mac wireshark抓安卓手机包 wireshark抓包mac地址_IP_33


可以看到使用的是Get命令

mac wireshark抓安卓手机包 wireshark抓包mac地址_IP_34


HTTP请求头部字段意义:

host 客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号
User-Agent 浏览器表明自己的身份(是哪种浏览器)。
Accept 告诉WEB服务器自己接受什么介质类型,
Accept-Language 浏览器申明自己接收的语言语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等
Accept-Encoding 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 (gzip,deflate)
Content-Encoding WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。
Cookie 这个头信息把之前发送到浏览器的 cookies 返回到服务器。
Referer 浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL
Proxy-Authenticate 代理服务器响应浏览器,要求其提供代理身份验证信息
Range 浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。
If-Unmodified-Since 如果请求的对象在该头部指定的时间之后没修改过,才执行
Content-Type WEB 服务器告诉浏览器自己响应的对象的类型。

在捕获的包中尝试找 HTTP 应答包

mac wireshark抓安卓手机包 wireshark抓包mac地址_IP_35


mac wireshark抓安卓手机包 wireshark抓包mac地址_wireshark_36


没找到,通过查找资料了解到如果找到应该类似于下面这样:

mac wireshark抓安卓手机包 wireshark抓包mac地址_网络_37


Date:通用字段,但通常出现在响应头里,表示 HTTP 报文创建的时间,客户端可以使用这个时间再搭配其他字段决定缓存策略

Server:响应字段,它告诉客户端当前正在提供 Web 服务的软件名称和版本号,例如“Server: openresty/1.15.8.1”。但是出于安全考虑,一般不会给出具体的,比如“GitHub.com”。

Content-Type:文本类型字段,这里是HTML文本,采用“utf-8”格式

Status:状况字段,显示OK代表已经完成

问题解答:
如果资源没有变,服务器就回应一个“304 Not Modified”,表示缓存依然有效,浏览器就可以更新一下有效期,然后放心大胆地使用缓存了。
如果资源变了,服务器返回状态码200,并发送新页面的全部内容。使用“304”可以减小流量和带宽开销。