西安邮电大学(计算机学院)网络协议分析设计报告题目:Web流量分析专业名称:网络工程班级:1201学生姓名:司联波学号(8位):04122007指导教师:孙韩林设计起止时间:2014年12月15日—2014年12月19日网络协议分析与仿真课程设计报告网络流量分析一、课程设计目的加深对IP、DSN 、TCP、UDP、HTTP等协议的理解;掌握流量分析工具的使用,学习基本的流量分析方法。
二、课程设计内容流量分析工具:Wireshark(Windows或Linux),tcpdump(Linux)要求:使用过滤器捕获特定分组;用脚本分析大量流量数据(建议用perl)。
内容:Web流量分析清除本机DNS缓存,访问某一网页(/),捕获访问过程中的所有分组,分析并回答下列问题(以下除1、3、8、11外,要求配合截图回答):(1)简述访问web页面的过程(2)找出DNS解析请求、应答相关分组,传输层使用了何种协议,端口号是多少?所请求域名的IP地址是什么(3)统计访问该页面共有多少请求IP分组,多少响应IP分组?(提示:用脚本编程实现)(4)找到TCP连接建立的三次握手过程,并结合数据,绘出TCP连接建立的完整过程,注明每个TCP报文段的序号、确认号、以及SYN\ACK的设置。
(5)针对(4)中的TCP连接,该TCP连接的四元组是什么?双方协商的起始序号是什么?TCP连接建立的过程中,第三次握手是否带有数据?是否消耗了一个序号?(6)找到TCP连接的释放过程,绘出TCP连接释放的完整过程,注明每个TCP报文段的序号、确认号、以及FIN\ACK的设置。
(7)针对(5)中的TCP连接释放,请问释放请求由服务器还是客户发起?FIN报文段是否携带数据,是否消耗一个序号?FIN报文段的序号是什么?为什么是这个值?(8)在该TCP连接的数据传输过程中,找出每一个(客户)发送的报文段与其ACK 报文段的对应关系,计算这些数据报文段的往返时延RTT(即RTT样本值)。
根据课本200页5.6.2节内容,给每一个数据报文段估算超时时间RTO。
(提示:用脚本编程实现(9)分别找出一个HTTP请求和响应分组,分析其报文格式。
参照课本243页图6-12,在截图中标明各个字段。
(10)访问同一网站的不同网页,本次访问中的TCP连接是否和上次访问相同?(与上次页面访问时间间隔不能过长,可连续访问,分别分析。
(11)请描述HTTP协议的持续连接的两种工作方式。
访问这些页面(同一网站的不同页面)的过程中,采用了哪种方式?(参考课本241页)三、设计与实现过程(1)简述访问web页面的过程答:主要分为三个大的方面:连接当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把/变成ip,使用UDP协议的默认端口号(53)。
DNS的过程是这样的:首先我们知道我们本地的机器上在配置网络时都会填写DNS,这样本机就会把这个url发给这个配置的DNS服务器,如果能够找到相应的url则返回其ip,否则该DNS将继续将该解析请求发送给上级DNS,整个DNS可以看做是一个树状结构,该请求将一直发送到根直到得到结果。
现在已经拥有了目标ip和端口号,这样我们就可以打开socket连接了。
请求连接成功建立后,开始向web服务器发送请求,这个请求一般是GET或POST命令(POST用于FORM参数的传递)。
GET命令的格式为:GET 路径/文件名HTTP/1.0 文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。
现在可以发送GET命令:GET /zhihu/index.html HTTP/1.0,应答web服务器收到这个请求,进行处理。
从它的文档空间中搜索子目录mytest的文件index.html。
如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。
为了告知浏览器,,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP 体信息),HTTP头信息和HTTP体信息之间用一个空行分开。
常用的HTTP头信息有:① HTTP 1.0 200 OK 这是Web服务器应答的第一行,列出服务器正在运行的HTTP 版本号和应答代码。
代码"200 OK"表示请求完成。
② MIME_Version:1.0它指示MIME类型的版本。
③ content_type:类型这个头信息非常重要,它指示HTTP体信息的MIME类型。
如:content_type:text/html指示传送的数据是HTML文档。
④ content_length:长度值它指示HTTP体信息的长度(字节)。
关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。
(2)找出DNS解析请求、应答相关分组,传输层使用了何种协议,端口号是多少?所请求域名的IP地址是什么?试验中访问,抓到dns 数据包,找到的请求分组,查看使用相关的四元组,和使用的协议,然后使用过滤规则(ip.addr= 192.168.1.111 &&ip.addr == 221.11.1.67) &&(udp.port ==62369 and udp.port== 53)找到其相应的DNS的解析请求的和应答的相关分组。
结果如下图:第9行的DNS的请求分组,第18行为DNS的响应分组。
分别展开如下:下面为DNS的请求分组,使用的协议为UDP 源端口为:62369 目的端口为:53下面为DNS的应答分组,使用的协议为UPD 源端口为:53 目的端口为:62369可以看出来所请求域名的IP 为两个(60.28.215.70和60.28.215.71)产生两个ip的主要原因是服务器采用了负载均衡!DNS负载均衡技术是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。
DNS负载均衡的优点:一旦某个服务器出现故障,即使及时修改了DNS设置,还是要等待足够的时间(刷新时间)才能发挥作用,在此期间,保存了故障服务器地址的客户计算机将不能正常访问服务器。
DNS负载均衡采用的是简单的轮循负载算法,不能区分服务器的差异,不能反映服务器的当前运行状态,不能做到为性能较好的服务器多分配请求,甚至会出现客户请求集中在某一台服务器上的情况。
(3)统计访问该页面共有多少请求IP分组,多少响应IP分组?(提示:用脚本编程实现)用wireshare工具分析可知道请求分组为29个响应为9个;讲数据导出之后用脚本分析:结果与工具分析一致(4)找到TCP连接建立的三次握手过程,并结合数据,绘出TCP连接建立的完整过程,注明每个TCP报文段的序号、确认号、以及SYN\ACK的设置。
第一次握手:序号:seq=0;无确认号:ACK=0(not set);SYN=1第二次握手:序号:seq=0;确认号:ack=1;ACK=1;SYN=1第三次握手:序号seq=1;确认号:ack=1;ACK=1;SYN=0(not set)(5)针对(4)中的TCP连接,该TCP连接的四元组是什么?双方协商的起始序号是什么?TCP连接建立的过程中,第三次握手是否带有数据?是否消耗了一个序号?答:源IP地址:192.168.1.111目的IP地址:60.28.215.71源端口:52617目的端口80,起始的序列号:0,TCP在连接建立的过程中,在第三次握手的时候不携带数据,只有三次连接建立了之后才开始传输数据!同时也没有消耗序列号。
(6)找到TCP连接的释放过程,绘出TCP连接释放的完整过程,注明每个TCP报文段的序号、确认号、以及FIN\ACK的设置。
(7)针对(5)中的TCP连接释放,请问释放请求由服务器还是客户发起?FIN报文段是否携带数据,是否消耗一个序号?FIN报文段的序号是什么?为什么是这个值?答:请求释放是由客户端发起的,FIN报文没有携带数据因为确认号还是1但是消耗了一个序列号,因为tcp规定即使不携带数据也需要消耗一个序号!Fin的报文段的序号是1。
(8)在该TCP连接的数据传输过程中,找出每一个(客户)发送的报文段与其ACK报文段的对应关系,计算这些数据报文段的往返时延RTT(即RTT样本值)。
根据课本200页5.6.2节内容,给每一个数据报文段估算超时时间RTO。
(提示:用脚本编程实现答:报文段的往返时间RTT(Round-Trip Time)新的RTTs =(1-a)*(旧的RTTs)+ a*(新的RTT样本值)新的RTTD = (1-b)*(旧的RTTD) + b*|RTTs –新的RTT样本|超时重传时间RTO = RTTs + 4 * RTTD;使用tcp.port==52617过滤!使用perl脚本结果为:(9)分别找出一个HTTP请求和响应分组,分析其报文格式。
参照课本243页图6-12,在截图中标明各个字段。
答:以下为HTTP的请求分组(75):Request Method:GET(请求的方法)Request URL:/(URL)Request Version:HTTP/1.1(http版本)首部行:Host:\r\n(主机的域名)Connection:keep-alive\r\n(告诉服务器发送完请求文档后哦不释放链接)User-Agent:Mozilla/5.0(windows NT 6.1) AppleWebkit/537.6(KHTML,like Gecko) chrome/23.0.1243.2 Safari/537.6(用户代理使用的基于Mozilla内核的浏览器)Accept:text/html(希望接受的文档格式)以下为HTTP的响应分组(85):开始行:Request version:HTTP/1.1(版本)Status code:200(状态码,2xx表示成功)Reponse Phrase:OK首部行:Server:Tengine(web 服务器是Tengine)Date:Thu,06 Dec 2012 02:57:57 GMTConnection:keep-aliveVary:Accept-Encoding (11)HTTP/1.1协议的持续连接有两种工作方式,即非流水线方式(without pipelining)和流水线方式(with pipelining)非流水线方式的特点,是客户端在收到前一个响应后才能发出下一个请求。