文档库

最新最全的文档下载
当前位置:文档库 > 修改版实验三:Ethereal Lab —— TCP协议

修改版实验三:Ethereal Lab —— TCP协议

实验三:Ethereal Lab ——TCP协议

一、实验目的

通过这次实验,详细地研究TCP协议在以下几个方面的运行机制:(1)TCP 为了提供可靠的数据传输所采用的序列号和确认号机制;(2)TCP拥塞控制算法——慢启动与拥塞避免算法的执行;(3)TCP的流量控制算法;(4)TCP连接的建立过程以及TCP连接的性能(吞吐量和RRT时间)。

二、实验原理

TCP协议为应用进程之间提供面向连接、全双工、可靠的数据传输服务,是传输层最为重要的协议之一。TCP报文分为头部和数据区两个部分,头部最小长度为20个字节,TCP报文格式定义如下图:其中序号指该报文段数据区首字节的序号(TCP把数据看作有序的字节流),确认号是期望从对方获得的下一个字节的序号,窗口大小是接收方告知发送方它可用的缓冲区大小。

修改版实验三:Ethereal  Lab —— TCP协议

TCP是面向连接的传输层协议,发送数据前必须通过三次“握手”建立连接,首先客户端发送连接请求(此时SYN=1,ACK=0);然后服务器接受请求,分配缓存和变量,返回响应(此时SYN=1,ACK=1);客户端接受响应,分配缓存和变量,返回响应(此时SYN=0, ACK=1),TCP连接建立。

TCP发送方每发送一个报文段,就启动一个重传定时器,如果在规定的时间内没有收到接收方返回的确认,重传定时器超时,发送方将重传该报文。从发出

数据到接收到确认的往返时间记作RTT(Round Trip Time).在原始算法中,重传定时器的定时宽度为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://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html/ethereal-labs/alice.txt去获取Alice in Wonderland的ASCII备份,把该文件存到你主机上的某地。

(2)然后访问下列网址:

http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html/ethereal-labs/TCP-ethereal-file1.html (3)你将看到如下画面。

修改版实验三:Ethereal  Lab —— TCP协议

(4)使用“Browse”按钮输入你主机上含《Alice》文本的文件名,目前还不要按

“Upload Alice.txt file”钮。

(5)现在启动Ethereal开始抓包,按“Ethereal Packet Capture Options”界

面上的“OK“键(这里我们不需要选任何选项)。

(6)返回你的浏览器,按“Upload alice.txt file”键去上传文件至服务器

http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html,一旦文件上传成功,将在浏览器窗口显示一个简短的文件提示。

修改版实验三:Ethereal  Lab —— TCP协议

(7)停止Ethereal的抓包,你的Ethereal窗口看起来与下图相似。

修改版实验三:Ethereal  Lab —— TCP协议

(8)如果你无法上网,你可以下载一个trace文件包,它是遵照上述步骤在作者机器上捕捉的2。尽管你可能已经获取了自己的数据,但是在研究下面的一些问题时你可能会发现下载一个trace文件包是很有价值的。

(注释2:下载http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html/ethereal-labs/ethereal-traces.zip文件,解压文件tcp-ethereal-trace-1.文件中的数据是由运行于作者机器上的Ethereal捕获的,机器执行的步骤本文正文所述.一旦你获取了trace文件,利用“File-Open”选择

tcp-ethereal-trace-1文件,将它装入Ethereal,即可查看捕获数据内容)

2.初探捕获数据包

在分析TCP连接的细节之前,让我们先大体看一下trace文件.首先要过滤一下显示在Ethereal窗口的数据包,即在Ethereal窗口上方的显示过滤规则窗口输入”tcp”(小写,无引号,输入完后不要忘记回车),你看到的将是在你主机和http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html之间传送的一系列TCP和HTTP数据包。你应该可以看到包含SYN字段的三次握手过程,可以看到一个HTTP POST数据报和一系列”TCP segment of a reassembled PDU”数据报被从你的主机发往http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html。这是Ethereal的一种特殊方式:表明使用了多个TCP报文段来携带一个HTTP 信息,你还应看到从http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html返回到你主机的TCP确认报文。

打开被Ethereal捕获的数据包文件tcp-ethereal-trace-1(参见注释2)。回答如下问题:

[1]向http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html传送文件的客户端所使用的IP地址和TCP端口

号是多少?要回答这个问题,可能最简单的方法是选择一个HTTP信息包,研究携带它的TCP数据包的细节,可以使用details of the selected packet header window来查看

[2]http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html的IP地址是什么?采用什么端口号来收发TCP报文段?

若你能创建自己的trace文件,回答下列问题(自己在网络环境下做实验):

[3]你的主机使用什么IP地址和TCP端口号向远程服务器传送文件?

3.TCP基础

回答下列关于TCP报文段的问题:

[4]被用于初始化TCP连接的“第一次握手”报文段的序列号是多少?在该报文段中,其标识位SYN、ACK取值为多少?

[5]为了响应客户端主机的“第一次握手”,http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html发送了SYN ACK报文段(即“第二次握手”),SYN ACK的序列号是多少?在该报文段中,其标识位SYN、ACK取值为多少?

[6]包含HTTP POST命令的TCP报文段的序列号是多少?注意:要找到这个POST命令,你需要仔细查看位于Ethereal窗口底部的数据包内容区域,在它的数据域中有一个“POST”字段,

[7]假定包含HTTP POST命令的TCP报文段是TCP连接中的第一个报文段,在TCP连接中前六个报文段的序列号是多少(包括那个包含HTTP POST命令的报文段在内)?每个报文段在什么时间被发送?对被接收的每个报文段返回的ACK 是什么时候收到的?鉴于每个TCP报文段被发送的时间与对它的确认被收到的时间之间的差值,这六个报文段每一个的往返时延是多少(RRT)?每收到一个ACK后,EstimatedRTT的值是多少?假定第一个报文段的Estimated RTT值与被测的RTT值相等,将其他后续报文段的Estimated RTT值根据实验原理部分介绍的公式进行计算。

注:Ethereal有一个非常好的特色,它可以帮助你绘制被发送的TCP报文段的RTT图。从“listing of captured packets”窗口选择一个被从你主机发往http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html的TCP报文段,然后选Statistics->TCP Stream Graph->Round Trip Time Graph.

[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)来画图表示已得到的数据。

选择“listing of captured-packets”窗口中的一个TCP报文段,然后选择菜单Statistics->TCP Stream Graph-> Time-Sequence-Graph(Stevens),你将看到一幅类似下图的图,这幅图是根据trace文件tcp-ethereal-trace-1中捕获的数据生成。

修改版实验三:Ethereal  Lab —— TCP协议

在图中,每一个点代表一个被发送的TCP报文段,每个点对应值分别是报文段的序列号和它被发送出去时的时间,注意:堆在一起的一组点代表被发送方紧挨着发送出的一系列包。

根据http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html/ethereal-labs/ethereal-traces.zip上的tcp-ethereal-trace-1分组trace文件回答下列有关于TCP报文段的问题:

[13]使用Time-Sequence-Graph(Stevens)画图工具来观察从客户端发往http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html服务器的报文段的序列号与时间点图,你能确定TCP的慢启动阶段从哪开始到哪结束吗?哪里开始执行拥塞避免?注意:在这个来自于“真实世界”的trace文件中,不是所有数据都象课本上讲的那样整洁有序。

[14]评论一下被测量的数据在哪些方面与我们在课本上研究的TCP的理想化的行为不同?

[15]你从你的主机传送一个文件至http://www.wendangku.net/doc/cffd02c3b9f3f90f77c61b16.html服务器上这一过程获得trace文件,依据此文件回答上述[13]和[14]两个问题。

(附注:下图是在另一个网络环境下的捕获结果)

修改版实验三:Ethereal  Lab —— TCP协议