精选修改版实验三EtherealLabTCP协议.docx
- 文档编号:12736631
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:8
- 大小:329.75KB
精选修改版实验三EtherealLabTCP协议.docx
《精选修改版实验三EtherealLabTCP协议.docx》由会员分享,可在线阅读,更多相关《精选修改版实验三EtherealLabTCP协议.docx(8页珍藏版)》请在冰豆网上搜索。
精选修改版实验三EtherealLabTCP协议
实验三:
EtherealLab——TCP协议
一、实验目的
通过这次实验,详细地研究TCP协议在以下几个方面的运行机制:
(1)TCP为了提供可靠的数据传输所采用的序列号和确认号机制;
(2)TCP拥塞控制算法——慢启动与拥塞避免算法的执行;(3)TCP的流量控制算法;(4)TCP连接的建立过程以及TCP连接的性能(吞吐量和RRT时间)。
二、实验原理
TCP协议为应用进程之间提供面向连接、全双工、可靠的数据传输服务,是传输层最为重要的协议之一。
TCP报文分为头部和数据区两个部分,头部最小长度为20个字节,TCP报文格式定义如下图:
其中序号指该报文段数据区首字节的序号(TCP把数据看作有序的字节流),确认号是期望从对方获得的下一个字节的序号,窗口大小是接收方告知发送方它可用的缓冲区大小。
TCP是面向连接的传输层协议,发送数据前必须通过三次“握手”建立连接,首先客户端发送连接请求(此时SYN=1,ACK=0);然后服务器接受请求,分配缓存和变量,返回响应(此时SYN=1,ACK=1);客户端接受响应,分配缓存和变量,返回响应(此时SYN=0,ACK=1),TCP连接建立。
TCP发送方每发送一个报文段,就启动一个重传定时器,如果在规定的时间内没有收到接收方返回的确认,重传定时器超时,发送方将重传该报文。
从发出数据到接收到确认的往返时间记作RTT(RoundTripTime).在原始算法中,重传定时器的定时宽度为Timeout=
β*EstimatedRTT,其中EstimatedRTT为估算的从发出数据到接收到确认的往返时间。
而EstimatedRTT=α*EstimatedRTT+(1-α)*SampleRTT(注:
本实验α取0.875),这里SampleRTT是采样得到的从发出数据到接收到确认的往返时间。
TCP采用“慢启动、拥塞避免、快速重传、快速恢复”的拥塞控制算法,利用拥塞窗口变量(cwnd)控制发送速度。
其中慢启动是指TCP刚建立连接时将拥塞窗口变量cwnd设置为1个报文段大小,然后以指数方式放大cwnd,直到大于等于ssthresh(初始为最大拥塞窗口一半),进入拥塞避免阶段,进入拥塞避免阶段后,TCP采用线性增加方式放大cwnd。
无论是慢启动阶段还是拥塞避免阶段,如果发生重传定时器超时的现象,就必须回到慢启动阶段,cwnd设置为1个报文段大小,ssthresh设置为上一次拥塞窗口值cwnd的一半。
三、实验步骤与实验问题探讨【注:
实验步骤应用(x),问题用[x]】
1.捕捉从你主机到远程服务器的一次大数据量的TCP传输。
在开始研究TCP以前,我们需要在你主机与远程服务器之间进行一个文件的TCP传输,并利用Ethereal来获取TCP传输所传递的一系列数据包。
你可以访问一个网页去获取一个文件(这个文件包括了《艾丽丝仙境历险记》的ASCII码文本),存到你的主机上,然后利用HTTP的Post方法将该文件传至Web服务器。
既然我们是从你的主机向另一个主机传送大量数据,我们将使用POST方法而不是GET方法。
当然,在这一过程中我们将运行Ethereal来获取TCP报文段序列。
按如下步骤操作:
(1)打开你的浏览器,访问下列网址:
http:
//gaia.cs.umass.edu/ethereal-labs/alice.txt去获取AliceinWonderland的ASCII备份,把该文件存到你主机上的某地。
(2)然后访问下列网址:
http:
//gaia.cs.umass.edu/ethereal-labs/TCP-ethereal-file1.html
(3)你将看到如下画面。
(4)使用“Browse”按钮输入你主机上含《Alice》文本的文件名,目前还不要按“UploadAlice.txtfile”钮。
(5)现在启动Ethereal开始抓包,按“EtherealPacketCaptureOptions”界面上的“OK“键(这里我们不需要选任何选项)。
(6)返回你的浏览器,按“Uploadalice.txtfile”键去上传文件至服务器gaia.cs.umass.edu,一旦文件上传成功,将在浏览器窗口显示一个简短的文件提示。
(7)停止Ethereal的抓包,你的Ethereal窗口看起来与下图相似。
(8)如果你无法上网,你可以下载一个trace文件包,它是遵照上述步骤在作者机器上捕捉的2。
尽管你可能已经获取了自己的数据,但是在研究下面的一些问题时你可能会发现下载一个trace文件包是很有价值的。
(注释2:
下载http:
//gaia.cs.umass.edu/ethereal-labs/ethereal-traces.zip文件,解压文件tcp-ethereal-trace-1.文件中的数据是由运行于作者机器上的Ethereal捕获的,机器执行的步骤本文正文所述.一旦你获取了trace文件,利用“File-Open”选择tcp-ethereal-trace-1文件,将它装入Ethereal,即可查看捕获数据内容)
2.初探捕获数据包
在分析TCP连接的细节之前,让我们先大体看一下trace文件.首先要过滤一下显示在Ethereal窗口的数据包,即在Ethereal窗口上方的显示过滤规则窗口输入”tcp”(小写,无引号,输入完后不要忘记回车),你看到的将是在你主机和gaia.cs.umass.edu之间传送的一系列TCP和HTTP数据包。
你应该可以看到包含SYN字段的三次握手过程,可以看到一个HTTPPOST数据报和一系列”TCPsegmentofareassembledPDU”数据报被从你的主机发往gaia.cs.umass.edu。
这是Ethereal的一种特殊方式:
表明使用了多个TCP报文段来携带一个HTTP信息,你还应看到从gaia.cs.umass.edu返回到你主机的TCP确认报文。
打开被Ethereal捕获的数据包文件tcp-ethereal-trace-1(参见注释2)。
回答如下问题:
[1]向gaia.cs.umass.edu传送文件的客户端所使用的IP地址和TCP端口号是多少?
要回答这个问题,可能最简单的方法是选择一个HTTP信息包,研究携带它的TCP数据包的细节,可以使用detailsoftheselectedpacketheaderwindow来查看
[2]gaia.cs.umass.edu的IP地址是什么?
采用什么端口号来收发TCP报文段?
若你能创建自己的trace文件,回答下列问题(自己在网络环境下做实验):
[3]你的主机使用什么IP地址和TCP端口号向远程服务器传送文件?
3.TCP基础
回答下列关于TCP报文段的问题:
[4]被用于初始化TCP连接的“第一次握手”报文段的序列号是多少?
在该报文段中,其标识位SYN、ACK取值为多少?
[5]为了响应客户端主机的“第一次握手”,gaia.cs.umass.edu发送了SYNACK报文段(即“第二次握手”),SYNACK的序列号是多少?
在该报文段中,其标识位SYN、ACK取值为多少?
[6]包含HTTPPOST命令的TCP报文段的序列号是多少?
注意:
要找到这个POST命令,你需要仔细查看位于Ethereal窗口底部的数据包内容区域,在它的数据域中有一个“POST”字段,
[7]假定包含HTTPPOST命令的TCP报文段是TCP连接中的第一个报文段,在TCP连接中前六个报文段的序列号是多少(包括那个包含HTTPPOST命令的报文段在内)?
每个报文段在什么时间被发送?
对被接收的每个报文段返回的ACK是什么时候收到的?
鉴于每个TCP报文段被发送的时间与对它的确认被收到的时间之间的差值,这六个报文段每一个的往返时延是多少(RRT)?
每收到一个ACK后,EstimatedRTT的值是多少?
假定第一个报文段的EstimatedRTT值与被测的RTT值相等,将其他后续报文段的EstimatedRTT值根据实验原理部分介绍的公式进行计算。
注:
Ethereal有一个非常好的特色,它可以帮助你绘制被发送的TCP报文段的RTT图。
从“listingofcapturedpackets”窗口选择一个被从你主机发往gaia.cs.umass.edu的TCP报文段,然后选Statistics->TCPStreamGraph->RoundTripTimeGraph.
[8]这六个TCP报文段的长度是多少?
3
(注3:
在tcp-ethereal-trace-1文件中所有TCP报文段均少于1460字节。
这是因为该trace文件的数据是在一台安装了以太网卡的机器上采集的,这种网卡将IP数据包的最大长度限定为1500字节(40字节的TCP/IP报头和1460字节的TCP载荷)。
这个1500字节值是被以太网允许的标准最大长度。
如果你的trace文件显示一个TCP长度大于1500字节,而你的计算机使用一个以太网连接,那么Ethereal正报告一个错误的TCP报告段长度;也可能它只显示了一个大的TCP报文段而不是多个小的报文段,而你的计算机实际上可能正传递着多个小的报文段,正如它所收到的ACK所显示的那样。
这种在报文段长度上的不一致是由于以太网卡驱动和Ethereal软件的交互导致。
如果你的主机存在这种不一致,我们推荐你采用下载的trace文件。
)
[9]在整个trace文件中,接收方宣布的可用缓冲区空间的最小值是多少?
有没有出现由于接收方缓冲区已满而阻碍了发送方发送数据的情况?
[10]在trace文件中,有被重传的报文段吗?
为了回答这个问题你将检查什么信息?
[11]在一个ACK包中接收方通常确认几个报文段?
你能找到一些例子说明接收方正在确认多个被接收的报文段吗?
[12]TCP连接的吞吐量(每单位时间被传送字节)是多少?
解释你是怎么计算这个值的?
4.TCP拥塞控制
现在让我们检查一下单位时间从客户端到服务器发送数据量。
我们并不是从Ethereal窗口的原始数据来计算,而是使用Ethereal的一项TCP画图功能——Time-Sequence-Graph(Stevens)来画图表示已得到的数据。
选择“listingofcaptured-packets”窗口中的一个TCP报文段,然后选择菜单Statistics->TCPStreamGraph->Time-Sequence-Graph(Stevens),你将看到一幅类似下图的图,这幅图是根据trace文件tcp-ethereal-trace-1中捕获的数据生成。
在图中,每一个点代表一个被发送的TCP报文段,每个点对应值分别是报文段的序列号和它被发送出去时的时间,注意:
堆在一起的一组点代表被发送方紧挨着发送出的一系列包。
根据http:
//gaia.cs.umass.edu/ethereal-labs/ethereal-traces.zip上的tcp-ethereal-trace-1分组trace文件回答下列有关于TCP报文段的问题:
[13]使用Time-Sequence-Graph(Stevens)画图工具来观察从客户端发往gaia.cs.umass.edu服务器的报文段的序列号与时间点图,你能确定TCP的慢启动阶段从哪开始到哪结束吗?
哪里开始执行拥塞避免?
注意:
在这个来自于“真实世界”的trace文件中,不是所有数据都象课本上讲的那样整洁有序。
[14]评论一下被测量的数据在哪些方面与我们在课本上研究的TCP的理想化的行为不同?
[15]你从你的主机传送一个文件至gaia.cs.umass.edu服务器上这一过程获得trace文件,依据此文件回答上述[13]和[14]两个问题。
(附注:
下图是在另一个网络环境下的捕获结果)
(注:
文档可能无法思考全面,请浏览后下载,供参考。
可复制、编制,期待你的好评与关注)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精选 修改 实验 EtherealLabTCP 协议