计算机网络课程实验报告
实验5:利用Ethereal分析TCP、UDP、ICMP协议
继续学习Ethereal的使用;
利用Ethereal分析TCP、UDP和ICMP协议。
TCP协议采用了哪些机制保证可靠数据传输。
(3分)
数据重传和数据确认应答机制
Traceroute的工作过程,用自己的话来描述,200字以内,超过酌情扣分。
(4分)
构造数据包,来检查到达一个主机时经过了哪些路由。
主机发送给目的地址的数据包的TTL是从1逐个递增的,而数据包每到达一个路由器,它的TTL值就会减1,当TTL减到0时,该数据包被取消,传回一个数据包给主机,我们就能捕获这个路由器的IP地址了。
如果收到"超时错",表示刚刚到达的是路由器,而如果收到的是"端口不可达" 错误,表示刚刚到达的就是目的主机,路由跟踪完成,程序结束。
阐述一下为什么应用程序开发者会选择将应用程序运行在UDP而不是TCP 之上?(3分)
UDP没有拥塞控制机制,发送方可以以任何速率向下层注入数据。
很多实时应用是
可以容忍一定的数据丢失的,同时又对速率有很高要求(比如在线视频播放),这时开发者会倾向选择UDP协议,避免使用TCP协议的拥塞控制机制产生的分组开销。
实验过程:
使用Ethereal分析TCP协议: (15分)得分:抓取本机与/ethereal-labs/alice.txt通信过程中的网络数据包。
根据操作思考以下问题:
客户服务器之间用于初始化TCP连接的TCP SYN报文段的序号(sequence number)是多少?在该报文段中,是用什么来标示该报文段是SYN报文段的?
Seq=0
Flags中的syn位为1,ack位为0,说明是syn报文段
服务器向客户端发送的SYNACK报文段序号是多少?该报文段中,Acknowledgement字段的值是多少?服务器是如何决定此值
的?在该报文段中,是用什么来标示该报文段是SYNACK报文段的?
Seq=0
Ack=1,服务器根据客户端发送的SYN报文的Seq值加一后得到此值
Flags中的Ack和Syn位都为1,所以是SYNACK报文
如果将包含HTTP POST命令的TCP报文段看作是TCP连接上的第一个报文段,那么该TCP连接上客户机向服务器发送的第六个报文段的序号是多少?是何时发送的?该报文段所对应的ACK是何时接收的?
第六个报文段:
对应的ack报文段:
23号报文时第六个报文,seq=6310,发送时间:Jun 1,2013 13:32:56.587941000对应的ack报文段接收时间Jun 1,2013 13:32:56.993379000
前六个TCP报文段的长度各是多少?在整个文件发送过程中,接受方公示的窗口大小是否变化?窗口大小代表什么含义?(可参考教科书“流量控制”一节)
首个报文段长度为555,其余都为1506,接收方窗口长度是变化的。
它代表接收方
端口上缓冲区空闲空间的大小,显示其接受能力
TCP连接的throughput (bytes transferred per unit time)是多少?请写出你的计算过程。
(不必给出计算结果,表达出计算的思路即可)
TCP连接发送报文的数据字节总数÷发送数据报总时间
实验结论,以及实验中遇到的其他问题是如何解决的?
分析QQ通讯中捕获到的UDP数据包。
根据操作思考以下问题:
QQ消息是基于UDP的还是TCP的?
UDP
为什么你发送一个ICQ数据包后,服务器又返回给你的主机一个ICQ数据包?这与UDP的不可靠数据传输有什么联系?
返回的ICQ数据包时作确认用的,因为UDP是不可靠的数据传输协议,所以需要这种确认机制。
对比前面的TCP协议分析,你能看出UDP是无连接的吗?
能看出来,相比TCP协议,UDP协议没有握手过程,直接发送数据。
实验结论,以及实验中遇到的其他问题是如何解决的?
结论:UDP协议是无连接的,不可靠的数据传输协议,发送数据后需要确认。
问题:抓包过程中数据包太多且不断出现,很难锁定要找的数据包。
需要在发送的同时盯紧抓包窗口,确定目的数据包编号的大概范围,再去仔细查找。
(因为在找到目的数据包之前不知道我机器上QQ服务器的ip地址)
(1)分析Ping产生ICMP消息,根据操作思考以下问题:
ICMP有关知识参见教材第四章4.4.3节
为什么ICMP包没有源和目的端口号?ICMP报文的用途?
因为ICMP是网络层协议,不涉及上层的端口号。
ICMP报文主要用来检测网络中是否存在故障,不涉及进程间通信,无需源和目的端口号。
观察一个由你的主机发送的ICMP请求包,其ICMP类型和代码号是什么?
该ICMP包还含有哪些字段?checksum, sequence number 和identifier字段各占多少字节?
ICMP类型:8(响应请求 ECHO-REQUEST)
代码号为0
ICMP报文包括IP头、ICMP头和ICMP体,还包含checksum、identifier、sequence number、data这些字段。
checksum, sequence number 和identifier字段各占2字节
观察一个ICMP应答包,其ICMP类型和代码号是什么?该ICMP包还含有哪些字段?checksum, sequence number 和identifier字段各占多少字节?
类型:0(响应应答,ECHO-REPLY)
代码号:0
ICMP报文包括IP头、ICMP头和ICMP体,还包含checksum、identifier、sequence number、data这些字段。
checksum, sequence number 和identifier字段各占2字节
(2)分析Traceroute产生ICMP消息,根据操作思考以下问题:
观察捕获到的ICMP echo包,是否和前面实验中的ICMP ping查询包不同?
如果是的话,为什么会这样?
ICMP ping查询包:
ICMP tracert捕捉到的ICMP echo包:
(第一个)
(中间某个)
(最后一个)
Ping响应请求数据包存活时间(TTL)不变,而tracert捕捉到的响应请求数
据包的TTL从1到11。
这是因为tracert命令能显示数据包在网络中经过的路由器的IP地址。
主机发送给目的地址的数据包的TTL是从1逐个递增的,而数据包每到达一个路由器,它的TTL值就会减1,当TTL减到0时,该数据包被取消,传回一个数据包给主机。
这样,我们就能找到从我们主机到目的地址之间的所有路由器了。
观察捕获到的ICMP exceeded包,它比ICMP echo包包含更多的字段。
这些字段里都包含哪些呢?
包含超时信息,即类型为11,代码为0的头部,以及返回该信息的路由的IP 地址。
观察源主机收到的最后3个ICMP数据包。
这些数据包和ICMP exceeded 包有什么不同?为什么会不同?
这些数据包没有ICMP time exceeded消息,因为数据已经送到目的地,不必再返回超时信息。
所以它返回的类型为0,代码为0的回应报文,该报文的源地址就是我们最终访问的.
实验结论,以及实验中遇到的其他问题是如何解决的?
Ping要通过设定定时器来测量某条网络通信的往返时间以及网络通不通的问题,而tracert主要通过TTL和超时报文来的之到达某地址所经过的路由地址。