网络协议数据获取与TCP/IP协议分析
一、 实验环境介绍
网络接入方式:校园网宽带接入,IP获取方式:DHCP;
操作系统为windows7旗舰版;
本机MAC地址为5c:f9:dd:70:6a:89,IP地址为10.104.5.53。
图1 网络状态截图
二、实验步骤
1. 启动wireshark;
2. 启动一个网页浏览器,并键入一个URL地址,如:www.baidu.com。注意此时不要按下回车键;
3. 清除电脑中的DNS缓存,启动wireshark,开始抓包;
4. 在浏览期网页位置按下回车键,开始访问指定的网页。
5. 一旦网页内容下载完毕,立即停止Microsoft Network Monitor抓包,并将抓到的数据包存入文件中,同时将显示的网页存储下来,以便后面参考。
三、实验过程
使用wireshark前清除DNS缓存截图如下。
图2 清除DNS缓存
抓取协议如下图所示:
图3 抓取协议
四、协议分析
1. 抓取的协议类型
检查在Microsoft Network Monitor顶端窗口的协议一列,确认你已经抓到了DNS、TCP和HTTP数据包。
答:由图3可看出抓到了DNS、TCP、HTTP数据包。
2. 以太网帧,IP分组和UDP数据报
(1) 检查客户端发出的第一个DNS分组
a.确定客户端的以太网地址和IP地址
答:如图4,客户端的MAC地址为5c:f9:dd:70:6a:89;
IPv4地址为:10.104.5.53。
b.以太网帧结构的TYPE字段是什么内容?
答:如图所示,以太网帧结构的TYPE字段为:0x0800,表示该帧是IP协议。
c.目的以太网地址和目的IP地址分别是什么?这些地址对应哪些计算机?解释这些结
果与你连接到Internet 的计算机有关系。
答:目的以太网地址:00: 0f:e2:d7:ef:f9,目的IP地址:10. 0. 0.10
对应的计算机:以太网地址对应要访问的www.bitren.com的源地址,IP地址是本地局域网域名服务器的IP地址。因为我们访问网络时用的是域名,只有经过域名服务器经过域名解析得到要访问的网络IP地址,才能进行交换数据。不同的局域网的域名服务器IP地址不同。
图4 dns分组
(2)检查客户端发出的第一个DNS分组的IP报头
a 包头的长度是多少?分组的总长度是多少?
b 确定协议类型字段。载荷数据中协议的编号和类型是什么?
图5 IP报头
答:报头的长度是20 bytes,分组的总长度是60bytes。
协议类型字段如图所示0x11,协议编号为17,类型为UDP。
3). 检查客户端发出的第一个DNS分组的UDP报头
a. 确定客户端临时端口号和服务器端的默认端口号。载荷数据中应用层协议的类型是什么?
b. 确定UDP报头中的长度字段是否与IP报头长度信息一致。
图6 UDP报头
由图6知,客户端临时端口号为62063,服务器端的默认端口号为53。
UDP报头中的长度字段为40bytes,根据40+20(IP报头长度)=60(IP分组总长度),故UDP报头中的长度字段与IP报头长度信息一致。
4) 画出客户端和服务器端从数据链路层到应用层的协议栈,并解释为什么各层的PDU内容能够使得应用层的进程之间实现端到端通信。
DNSUDPIPEthernetDNSUDPIPEthernet客户端服务器 图7 客户端和服务器端从数据链路层到应用层的协议栈
实现各层的PDU内容能够使得应用层的进程之间实现端到端通信的原因是网络分层,每一层都会为从上一层接收到的信息块添加一个报头和报尾。在目标端,每一层都读出与其对应的头部,并决定采取何种操作,将数据头部和尾部去掉,最终将数据块提交给上一层。
3.DNS
1)检查客户端发送的DNS分组中的DNS查询报文
a)哪个字段表明这个报文是DNS查询还是响应?
b)查询的正文中传送什么信息?
c)查询的交互ID是什么?
d)确定查询的类型与级别的字段
图8 DNS报文
a 查询正文中flags第一位为0,表明此DNS分组为查询报文。
b type A表示查询是由域名查找IP地址;Class:Internet(0x1)是指Internet数据;Name指要查询域名。
c 查询的交互ID是0x64FC。
d 类型字段Type:A(0x1),级别字段Class:Internet(0x1)。
2)现在检查对上述查询的DNS响应的分组
a)这个分组中的以太网地址和IP地址应当是什么?检验这些地址是正确的
b)传送DNS响应的IP分组和UDP数据报的大小是多少?是否比查询的长?
c)确定在响应报文中的交互ID是正确的。
d)在响应报文中提供了多少个答案?比较这些答案及其TTL值。
图9 DNS报文
a 目的以太网地址:00: 0f:e2:d7:ef:f9,目的IP地址:10. 0. 0.10,显然是正确的。
b IP分组的长度124bytes,UDP数据报大小是104bytes,要比查询的长。
c 响应报文中的交互ID是0x64FC,与查询的交互ID相同。
图10 DNS nameservers
在响应报文中共提供了2个答案,分别是dns13.hichina.com和dns14.hichina.com,TTL分别都是40分49秒。
4 TCP 三次握手
1)确定http客户端和服务器端建立廉洁的三次握手的第一个TCP分段的帧结构。
a)在这个分段中你期望看到哪个源端以太网地址和IP地址?你期望看到的协议和类型字段是什么内容?确认这些地址是正确的。
b)解释在第一个TCP分段中的目的以太网地址和IP地址的值。这些地址对应什么计
算机?
c)确定客户端使用的临时端口号,确认使用的默认端口号是HTTP默认的。
d)TCP分段的长度是多少?
e)客户端到服务器端分段的初始序列号是多少?初始窗口大小是多少?最大分段尺寸是多少?
f)找到包含SYN标志的十六进制字符。
图11 TCP三次握手第一次
A)期望看到客户端的MAC地址和IP地址,期望看到的协议和类型字段是IP(0x08000)。如图由此可确认地址的正确性。
B)目的以太网地址为:00: 0F:E2:D7:EF:F9,它是服务器的MAC地址,IP地址为:10.1.10.253,它是服务器的IP地址。
图12 TCP三次握手第一次续图
C)客户端使用的临时端口号为6358,Destination Port为80,是http默认端口号。
D) TCP分段的长度为32.
E)分段的初始序列号:0;初始窗口大小:8192bytes;最大分段尺寸:1460bytes。
F)SYN标志如图所示。
2)确定三次握手中的第二分段
a)第一和第二分段抓取的时间差是多少?
b)在检查分组数据之间,先确定以下字段的值
以太网帧的源地址和目的地址以及类型字段
IP分组中的源IP地址和目的IP地址及其端口号
TCP分段中的ACK序列号
各个标识位的值
确认帧结构中包含期望的数据
c)TCP分段的长度是多少?
d)从服务器端到客户端连接的初始序列号是多少?最大分段尺寸是多少?
图13 TCP三次握手时间差
A) 时间差为2.56424-2.563638=0.00602S
B) 见图14.
图14 TCP三次握手第二阶段
C) TCP分段长度为32byte
D)服务器端到客户端连接的初始序列号:0x4D4Dfe30;最大分段尺寸: 1460bytes。
图15 TCP三次握手第二阶段续图
3)确定三次握手中的最后一个分段
a)从第二分段到最后分段的时间差是多少?将此时间差与第一与第二分段的时间差相比较,解释其中的原因
b)确定最后TCP分段的以下值
序列号和ACK序列号
标志比特的值以及窗口尺寸
确认分段中包含期望的数据
c)最后一个分段的长度是多少?
A)
图16 TCP三次握手时间差
时间差为2.564286 -2. 56424=0.000046S
B)
图17 TCP三次握手第三阶段
序列号1,窗口尺寸16425。
C) TCP长度为20byte。
5. HTTP GET 报文
1) 确定包含HTTP GET报文的数据帧
a) 确认TCP报头中的序列号和ACK号是预期的。
b) 解释TCP报头中的标识位。你是否能够解释为什么有两位被置位了?
c) TCP分段及载荷的长度分别是多少?
图18 http报文1
A) 序列号为1,是预期序列号
B) TCP报头中的标识位如图18。ACK置位表示确认号有效,握手过程有确认,所以ASK置位。PSH置位,它用来通知接收TCP模块立即将数据传递到应用程序。因为http属于应用程序,所以PSH置位。
C) 载荷的长度为746-20=726。
2) 现在考察GET报文的内容
a) 将Wireshark软件的第三个窗口向下滚动,将解码的内容与第二个窗口中的HTTP报文进行比较;
图19 http报文2
b) 数一数报文中的字节数,确认这个数值与TCP报头中的长度信息一致;
报文中的字节数总共为726bytes,与TCP报头中的长度信息一致。
c) 来自服务器的下一个分段期望的下一个序列号应当是多少?
图20 http报文3
6.HTTP Response
1).确定HTTP GET报文与对应的响应报文之间的时间差是多少?
图21 http报文时间差
2.575514-2.565166=0.010348
2).确定服务器是采用HTTP响应报文还是采用简单的TCP ACK分段进行应答。确认来自服务器的分段的序列号是期望的值。
答:采用HTTP响应报文,ACK分段应答。
图22 http报文
3).现在考察HTTP响应报文的分段
a)包含TCP分段的载荷长度是多少?
包含的TCP分段的载荷长度是1460bytes。
b)检查标志是否有置位,并解释为什么置位?
PSH置位是要求客户端将接受到的HTTP数据立即显示。
图23 标志位
c)来自客户端的下一个分段期望的下一个ACK序列号应当是多少?
图24 下一个ACK
下一个序列号是9410。
4).现在考察HTTP响应报文
a)响应报文的结果码是多少?
图25 HTTP响应报文
b)点亮HTTP响应报文中的“数据”部分。将Wireshark软件的第三个窗口向下滚动,将网页解码的内容与屏幕上显示的内容进行比较。
图26 HTTP响应报文
五、实验小结:
通过本次实验,抓取并且分析了DNS,TCP,HTTP有关数据包。学会了如何运用自己所学的知识与实践相结合,把知识运用到所抓包的分析中,通过逐个包逐层的分析,充分了解网络协议的层次结构,及IP地址与端口号如何在一起协调工作,完成端到端的应用。
实验中有几点要注意:
1、在抓取dns包之前需要清空dns缓存。否则计算机中存储的dns记录会导致访问的时候不需要获得dns服务,也就是无法抓取dns协议。
在开始抓包之前,一定要先启动一个网页浏览器,并键入所选择的URL地址,注意此时不要按回车键,而后启动wireshark开始抓包,并在浏览器网页位置按下回车键,开始访问指定的网页,当网页打开下载完毕后,立刻停止Microsoft Network Monitor抓包。否则无法抓取到DNS数据包,在抓取到的众多包中,要认真筛选需要的数据包。
因篇幅问题不能全部显示,请点此查看更多更全内容