yznu计算机网络实验报告5:lyf

  • 实验目的
  1. 掌握 TCP 协议的报文格式
  2. 掌握 TCP 连接的建立和释放过程
  3. 掌握 TCP 数据传输中编号与确认的过程
  4. 掌握 TCP 协议校验和的计算方法
  5. 理解 TCP 重传机制
  • 实验环境

该实验采用网络结构一

  • 实验内容

练习一:察看 TCP 连接的建立和释放

各主机打开工具区的“拓扑验证工具”,选择相应的网络结构,配置网卡后,进行拓扑验证,如果通过拓扑验证,关闭工具继续进行实验,如果没有通过,请检查网络连接。 本练习将主机 A 和 B 作为一组,主机 C 和 D 作为一组,主机 E 和 F 作为一组。现仅以 主机 A、B 所在组为例,其它组的操作参考主机 A、B 所在组的操作。

  1. 主机 B 启动协议分析器捕获数据,并设置过滤条件(提取 TCP 协议)。
  2. 主机 A 启动 TCP 工具连接主机 B。
  1. 主机 A 启动实验平台工具栏中的“地址本工具”。点击[主机扫描]按钮获取组内主机信息,选中主机 B 点击[端口扫描]按钮获取主机 B 的 TCP 端口列表。
  2. 主机 A 启动实验平台工具栏中的“TCP 工具”。选中“客户端”单选框,在“地址”文本框中填入主机 B 的 IP 地址,在“端口”文本框中填入主机 B 的一个 TCP 端口,点击[连接]按钮进行连接。

  1. 察看主机 B 捕获的数据,填写下表。

表 7-3 实验结果

字段名称

报文 1

报文 2

报文 3

序列号

2840237879

2222245451

2024445719

确认号

1399549876

0

0

ACK

1

1

1

SYN

0

1

0

  1. TCP 连接建立时,前两个报文的首部都有一个“最大字段长度”字段,它的值是多少?作用是什么?结合 IEEE802.3 协议规定的以太网最大帧长度分析此数据是怎样得出的。
  • maximum segment size=1460

  1. 主机 A 断开与主机 B 的 TCP 连接。
  2. 察看主机 B 捕获的数据,填写下表。

表 7-4 实验结果

字段名称

报文 4

报文5

报文 6

报文7

序列号

1645141353

1239747434

1239747434

1645141354

确认号

1239747434

1645141354

1645141354

1239747435

ACK

1

1

1

1

FIN

0

0

0

0

  1. 结合步骤 3、5 所填的表,理解 TCP 的三次握手建立连接和四次握手的释放连接过程,理解序号、确认号等字段在 TCP 可靠连接中所起的作用。
  • TCP的传输连接分为3个阶段,连接建立(三次握手),数据传送和连接释放(四次挥手)。
  1. 序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  2. 确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
  3. 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
  • URG:紧急指针(urgent pointer)有效。
  • ACK:确认序号有效。
  • PSH:接收方应该尽快将这个报文交给应用层。
  • RST:重置连接。
  • SYN:发起一个新连接。
  • FIN:释放一个连接。

TCP三次握手:

最开始的时候,客户端和服务器都是处于关闭(CLOSED)状态,主动打开连接的是客户端,被动打开连接的是服务器。

准备工作:服务器必须准备好接受外来的连接,这通常通过调用socket,bind和listen这三个函数来完成,称之为被动打开。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。

第一次握手中,客户A通过调用connect发起主动打开,客户端向服务器发出连接请求的TCP报文段,将标志位SYN置为1,随机产生一个序列号,并将该数据包发送给服务器B;客户进入SYN_SENT状态,等待server的确认。

第二次握手中,服务器B收到数据包后,由标志位为1知道客户请求建立连接,服务器B将标志位SYN和ACK都置为1,随机产生一个序列号seq,将该数据包发送给服务器,服务器进入SYN_SENT状态,等待客户的确认。

第三次握手中,客户A收到确认消息后,检查序列号ack以及标志位ACK是否为1,若满足要求,则将该数据报发送给服务器,服务器在检查序列号ack以及标志位ACK是否为1,若满足要求,则建立连接,完成三次握手;随后服务器和客户之间就可以传输数据了。

TCP四次握手

首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

第一次挥手:客户端Client发送一个FIN,用来关闭客户Client到服务器Server的数据传送,客户Client进入FIN_WAIT_1状态。

TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

第二次挥手:服务器Server收到FIN后,发送一个标志位ACK给客户Client,其确认序号ack为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器Server进入CLOSE_WAIT状态。

TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

第三次挥手:客户端收到服务器的确认请求之后,此时,客户端就进入FIN_WAIT_2状态,等待服务器发送连接并释放报文(在这之前还需要接受服务器发送的最后的数据),服务器Server发送一个FIN,用来关闭服务器Server到客户Client的数据传送,服务器Server进入LAST_ACK状态。

第四次挥手:客户Client收到FIN后,进入TIME_WAIT状态(注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。),接着发送一个标志位ACK给服务器Server,确认序号为收到序号+1,服务器只要收到客户端发出的确认,服务器Server进入CLOSED状态,完成四次挥手。可以看到,服务器结束TCP连接的时间要比客户端早一些。

思考问题:

  1. 为什么在 TCP 连接过程中要使用三次握手?如不这样做可能会出现什么情况。
  • 主要原因是为了防止旧的重复连接引起连接混乱问题。比如在网络环境比较复杂的情况,客户端可能会连续发送多次请求。如果只设计成两次握手的情况,服务端只能一直接收请求,然后返回请求信息,也不知道客户端是否请求成功。这些过期请求的话就会造成网络连接的混乱。所以设计成三次握手的情况,客户端在接收到服务端SEQ+1的返回消息之后,就会知道这个连接是历史连接,所以会发送报文给服务端,告诉服务端。所以TCP设计成三次握手的目的就是为了避免重复连接。

  1. 解释 TCP 协议的释放过程?
  • 释放连接的过程一般需要四次挥手如下图所示:

这里假设客户端主动释放连接。在挥手之前主动释放连接的客户端结束ESTABLISHED阶段,随后开始四次挥手:

  1. 首先客户端向服务器发送一段TCP报文表明其想要释放TCP连接。

标记位为FIN,表示请求释放连接,序号为Seq = u

随后客户端进入FIN-WAIT-1阶段,即半关闭阶段,并且停止向服务端发送通信数据。

  1. 服务器接收到客户端请求断开连接的FIN报文后,结束ESTABLISHED阶段,进入CLOSE-WAIT阶段并返回一段TCP报文。

标记位为ACK,表示接收到客户端释放连接的请求,序号为Seq = v

确认号为Ack = u + 1,表示是在收到客户端报文的基础上,将其序号值加1作为本段报文确认号Ack的值。随后服务器开始准备释放服务器端到客户端方向上的连接。客户端收到服务器发送过来的TCP报文后,确认服务器已经收到了客户端连接释放的请求,随后客户端进入FIN-WAIT-2阶段。

  1. 服务器端在发出ACK确认报文后,服务器端会将遗留的待传数据传送给客户端,待传输完成后即经过CLOSE-WAIT阶段,便做好了释放服务器端到客户端的连接准备,再次向客户端发出一段TCP报文。

标记位为FIN和ACK,表示已经准备好释放连接了,序号为Seq = w

确认号Ack = u + 1,表示是在收到客户端报文的基础上,将其序号Seq的值加1作为本段报文确认号Ack的值。随后服务器端结束CLOSE-WAIT阶段,进入LAST-ACK阶段,并且停止向客户端发送数据。

  1. 客户端收到从服务器发来的TCP报文,确认了服务器已经做好释放连接的准备,于是进入TIME-WAIT阶段,并向服务器发送一段报文。

标记位为ACK,表示接收到服务器准备好释放连接的信号,序号为Seq= u + 1,表示是在已收到服务器报文的基础上,将其确认号Ack值作为本段序号的值。

确认号为Ack= w + 1,表示是在收到了服务器报文的基础上,将其序号Seq的值作为本段报文确认号的值。随后客户端开始在TIME-WAIT阶段等待2 MSL。服务器端收到从客户端发出的TCP报文之后进入CLOSED阶段,由此正式确认管关闭服务器端到客户端方向上的连接。客户端等待完2 MSL之后,进入CLOSED阶段,由此完成四次挥手。

练习二:利用协议编辑器编辑并发送 TCP 数据包

本练习每台主机为一组。现仅以主机 A 所在组为例,其他组的操作参考主机 A 所在组的操作。

在本实验中由于 TCP 连接有超时时间的限制,故协议编辑器和协议分析器的两位同学要默契配合,某些步骤(如计算 TCP 校验和)要求熟练、迅速。

为了实现 TCP 三次握手过程的仿真,发送第一个连接请求帧之前,编辑端主机应该使用 TCP 屏蔽功能来防止系统干扰(否则计算机系统的网络会对该请求帧的应答帧发出拒绝响应)。

通过手工编辑 TCP 数据包实验,要求理解实现 TCP 连接建立、数据传输以及断开连接的全过程。在编辑过程中注意体会 TCP 首部中的序列号和标志位的作用。

首先选择服务器主机上的一个进程作服务器进程,并向该服务器进程发送一个建立连接请求报文,对应答的确认报文和断开连接的报文也编辑发送。其步骤如下:

  1. 启动协议分析器捕获数据,设置过滤条件(提取 HTTP 协议)。
  2. 启动协议编辑器,在界面初始状态下,程序会自动新建一个单帧,可以利用协议编辑器打开时默认的以太网帧进行编辑。
  3. 填写该帧的以太网协议首部,其中:

源 MAC 地址:主机 A 的 MAC 地址

目的 MAC 地址:服务器的 MAC 地址

协议类型或数据长度:0800(IP 协议)

  1. 填写 IP 协议头信息,其中:

高层协议类型:6(上层协议为 TCP)

总长度:40(IP 首部 + TCP 首部)

源 IP 地址:主机 A 的 IP 地址

目的 IP 地址:服务器的 IP 地址(默认为 172.16.0.253)

其它字段任意。

应用前面学到的知识计算 IP 首部校验和。

  1. 填写 TCP 协议信息,其中:

源端口:任意大于 1024 的数,不要使用下拉列表中的端口

目的端口:80(HTTP 协议)

序列号:选择一个序号 ISN(假设 1942589885),以后的数据都根据它来填写

确认号:0

首部长度:50(长度 20 字节)

标志位:02(标志 SYN=1)

123第 1 部分 IPv4 协议实验

窗口大小:任意

紧急指针:0

使用协议编辑器的“手动计算”方法计算校验和;再使用协议编辑器的“自动计算”方法计算校验和。将两次计算结果相比较,若结果不一致,则重新计算。

  1. TCP 在计算校验和时包括哪些内容?
  • TCP校验和的范围包括首部和数据这两部分。

  1. 将设置完成的数据帧复制 3 份。

修改第二帧的 TCP 层的“标志”位为 10(即标志位 ACK=1),TCP 层的“序列号”为1942589885+1。

修改第三帧的 TCP 层的“标志”位为 11(即标志位 ACK=1、FIN=1),TCP 层的“序列号”为 1942589885+1。

修改第四帧的 TCP 层的“标志”位为 10(即标志位 ACK=1),TCP 层的“序列号”为1942589885+2。

  1. 在发送该 TCP 连接请求之前,先 ping 一次目标服务器,让目标服务器知道自己的 MAC 地址。
  2. 启动实验平台工具栏中的“启动屏蔽”,为 TCP/IP 协议栈过滤掉收到的 TCP 数据。
  3. 点击菜单栏中的[发送]按钮,在弹出对话框中选择发送第一帧。
  4. 在主机上捕获相应的应答报文,这里要求同学及时准确地捕获应答报文并迅速从中获得应答报文的接收字节序列号。
  5. 假设接收字节序号为:3246281765,修改第二帧和第三帧 TCP 层的“确认号”的值为:3246281766。
  6. 计算第二帧的 TCP 校验和,将该帧发送。对服务器的应答报文进行确认。
  7. 计算第三帧的 TCP 校验和,将该帧发送。
  8. 在主机上观察应答报文,要及时把最后一帧“序列号”记录下来。
  9. 修改第四帧的 TCP 层“确认号”为接收的序列号+1(即 3246281767)。
  10. 计算第四帧的 TCP 校验和,将该帧发送。断开连接,完成 TCP 连接的全过程。
  11. 协议分析器一端截获相应的请求及应答报文并分析,注意观察“会话分析”中的会话过程。
  12. 编辑端主机启动实验平台工具栏中的“停止屏蔽”,恢复正常网络功能。

思考问题:

  1. 使用 TCP 协议对实时话音数据的传输有什么有缺点?使用 UDP 协议在传送数据文件时会有什么问题?
  • 1.如果语音数据不是实时播放(边接受边播放)就可以使用TCP,因为TCP传输可靠。接收端用TCP讲话音数据接受完毕后,可以在以后的任何时间进行播放。但假定是实时传输,则必须使用UDP。2.UDP不保证可靠交付,但UCP比TCP的开销要小很多。因此只要应用程序接受这样的服务质量就可以使用UDP。

练习三:TCP 的重传机制

本练习将主机 A 和 B 作为一组,主机 C 和 D 作为一组,主机 E 和 F 作为一组。现仅以主机 A、B 所在组为例,其它组的操作参考主机 A、B 所在组的操作。

  1. 主机 B 上启动“实验平台工具栏中的 TCP 工具”,作为服务端,监听端口设置为2483。
  2. 主机 B 启动协议分析器开始捕获数据并设置过滤条件(提取 TCP 协议)。
  3. 主机 A 启动 TCP 工具连接主机 B。
  1. 主机 A 启动“实验平台工具栏中的 TCP 工具”。
  2. 选中“客户端”单选框。
  3. 在“地址”文本框中填入主机 B 的 IP 地址。
  4. 在“端口”文本框中填入主机 B 的 TCP 监听端口(2483)。
  5. 点击[连接]按钮进行连接。
  1. 主机 A 向主机 B 发送一条信息。
  2. 主机 B 启动实验平台工具栏中的启动“TCP 屏蔽”,过滤掉接收到的 TCP 数据。
  3. 主机 A 向主机 B 再发送一条信息。
  4. 主机 B 刷新捕获显示,当发现“会话分析视图”中有两条以上超时重传报文后,启动实验平台工具栏中的停止“TCP 屏蔽”,恢复正常网络功能。
  5. 主机 A 向主机 B 再发送一条信息,之后断开连接。
  6. 主机 B 停止捕获数据。依据“会话分析视图”显示结果,绘制本练习的数据报交互图。

思考问题:

  1. 根据实验,测试重传时间和重传次数。
  1. TCP 协议在进行流量控制时是以数据包丢失作为产生拥塞的标志。有没有不是因拥塞而引起的数据包丢失的情况?如有,请列举出三种情况。
  • 当IP数据报在传输过程中需要分片,但其中的一个数据报未能及时到达终点,而终点组装IP数据报已超时,因而只能丢失该数据报;IP数据报已经到达终点,但终点的缓存没有足够的空间存放此数据报;数据报在转发过程中经过一个局域网的网桥,但网桥在转发该数据报的帧没有足够的差错空间而只好丢弃。
  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值