【某农业大学计算机网络实验报告】实验五 TCP 运输连接管理

news2024/11/26 5:19:23

实验目的:

  1. 熟悉 TCP 通信的三个阶段:通过此次实验,结合理论课知识深入理解并熟悉 TCP 通信的三个主要阶段,即连接建立(SYN-SYN),数据传输(DATA),以及连接释放(FIN-ACK)三个阶段,重点关注报文段信息数据发送的具体信息,包序号、ACK号、数据长度等;
  2. 理解 TCP 连接建立过程和 TCP 连接释放过程:通过此次实验,更为直观的进一步学习理解 TCP 连接建立过程和连接释放过程的细节,在连接建立过程中,掌握三次握手的机制、原理和流程,在连接释放过程中,理解四次挥手的机制、原理和流程,重点理解握手为什么必须是三次,挥手又为什么必须是四次。

实验器材:

一台安装有Cisco Packet Tracer软件的Windows操作系统的PC机。

实验准备:

1.配置网络拓扑:为开展实验内容,首先在 Packet Tracer 7.3.1 模拟器中配置好如下的网络拓扑结构。如下图所示,具体包括一台主机与一台服务器相连:

2. 配置 IP 地址和子网掩码:根据实验要求,为主机与服务器配置IP地址,点击 PC与服务器的【桌面】,打开参数表如下所示,在 PC与服务器 的配置窗口中配置合理的 IP 地址和子网掩码如下图所示:

3. 捕获TCP传输:由于我们此次实验目的主要为理解 TCP 连接建立过程和 TCP 连接释放过程,因此我们只需要观察TCP事件即可,在 Simulation 模式下单击 Edit Filters 按钮,仅选择 TCP 事件:

随后,单击逻辑工作空间中的 PC,在 Desktop 选项卡中打开 Web Browser,在 URL 框中输入服务器的IP 地址,然后单击 Go 按钮,最小化模拟浏览器窗口,可以看到此时在主机上已经预备发送TCP数据包,至此数据准备工作已经全部完毕。

实验内容:

任务一:观察TCP 连接建立的三次握手事件

1.第一次握手:首先我们可以看到在PC0向服务器0正式发送第一个TCP报文进行第一次握手1前,事件列表中已经存在了两次TCP事件,这是因为主机会先在设备上尝试创建一个到目的端口TCP的连接,这两次TCP事件分别在主机的第四、三层与第一、二层,最终结果为根据需要成功生成了一个TCP报文段用以建立TCP连接;

通过在 Simulation 模式下的 Event List 区域中单击 Info 列中的单色框,可以打开 PDU Information 窗口,观察可得此时主机的设置连接状态为SYN_ SENT(同步己发送)TCP可接受的最大窗口值为65535字节,首部中的选项字段 MSS(最大报文段程度)值为 1460字节,连接请求被接受

主机上的TCP报文段生成完毕后,即可向服务器0发送TCP报文段,而当服务器0接收成功后说明连接的第一次握手完毕,具体接收得到的报文段序号为0ACK号为0,数据长度为24

2.第二次握手:服务器0从端口 80 收到 PC 发来的 TCP 同步报文段后,取出首部的选项字段 MSS 的值,同意接收 PC 的连接请求,并将其连接状态设置为 SYN RECEIVED(同步已接收),TCP 将窗口大小设置为 16384B,同时将首部中的选项字段 MSS(最大报文段长度)值设置为 536B服务器0 PC0 发送一个 TCP 的同步确认 (SYN+ACK)报文段,PC0接收成功后完成了第二次握手,PC0具体接收得到的报文段序号为0ACK号为1,数据长度为24

除此之外值得一提的是,在上述的PDU Information 窗口中显示TCP连接成功,但这仅仅只是针对PC0来说TCP连接成功,因此此时PC0就开始缓存(由于端口正在发送另一个帧,因此HTTP数据包被缓存)准备发送HTTP数据包,如下图所示,而HTTP数据包正式开始发送需要等到我们的第三次握手成功:

3.第三次握手:上述两次握手成功后,TCP PC0的窗口大小重置为 536B,此时,PC0 将其连接状态设置为 ESTABLISHED(连接己建立),此时PC0即可向 Server0 发送一个 TCP 确认(ACK)报文段,Server0具体接收得到的报文段序号为1ACK号为1,数据长度为20,因为报文段中具有所期望的对等序号,因此TCP连接成功,Server0同样将其连接状态设置为 ESTABLISHED(连接己建立)

任务二:观察HTTP数据文件发送过程

1.PC0 ——> Server0PC0Server0 TCP连接建立完成后,设备PC0将从其缓冲区取出之前步骤中缓存的HTTP数据文件并发送给Server0,通过观察显示Server0接收的报文段信息具体为序号为1ACK号为1,数据长度为101TCP PUSH+ACK中的PUSH表示发送方希望接收方立即将缓冲区中的数据交付给上层应用:

2. Server0 ——> PC0Server0接收到PC0发送的 HTTP 请求后,Server0将会生成并发送一个 HTTP 响应给PC0,如下图所示,PC0接收的报文段信息具体为:序号为1ACK号为102,数据长度为471

任务三:观察 TCP 连接释放的四次挥手事件

1.第一次挥手:决定释放连接后,PC0 将首先关闭与 Server0 80 端口之间的 TCP 连接,将连接状态设置为 FIN WAIT 1(关闭等待 1),并且PC0 将向 Server0 发送一个 TCP 关闭确认 (FNN+ACK)报文段,报文段的具体信息为:序号为102ACK号为472,数据长度为20

2.第二、三次挥手:Server0 收到 PC0 的 1025 端口发来的 TCP 关闭确认报文段,该报文段中的序号也正是原先期望收到的,Server0 将其连接状态设置为CLOSE_ WAIT(关闭等待)后,Server0 从其缓存中取出最后一个 TCP 关闭确认(FIN+ACK)报文段发送给 PC报文具体的信息为:序号为472ACK号为103,数据长度为20。此时 Server0 将其连接状态设置为 LAST ACK(最后确认),可以看到在此次报文段传输过程中,第二次挥手与第三次挥手是同时进行的

3.第四次挥手:PC0 收到 Server0 从 80 端口发来的 TCP 关闭确认报文段,该报文段中的序号也正是原先期望收到的。PC0 向 Server0 发送一个 TCP 确认(ACK)报文段,报文的具体信息为:序号为103ACK号为472,数据长度为20。此时 PC 进入 CLOSING(正在关闭)连接状态;Server 收到该报文段后,将其连接状态设置为 CLOSED(己关闭),至此TCP连接的释放过程已经全部结束。

实验结果、分析与结论:

思考题:

1)连接建立阶段的第一次握手是否需要消耗一个序号?其 SYN 报文段是否携带数据?为什么?第二次握手呢?

第一次握手需要消耗一个序号,且其SYN 报文段是不携带数据的。客户端发送的SYN报文段都会携带一个初始序号(ISN,Initial Sequence Number),该序号就是我们此处所说的被消耗的序号,这个初始序号是随机选择的,用于建立连接时同步双方的初始序列号。并且,由于第一次握手的SYN报文段主要用于同步双方的序列号和表明客户端希望建立连接,通常情况不会携带实际的应用层数据。第二次握手的报文段同上所示,也需要消耗一个序号,且不会携带数据。

2)本实验中连接释放过程的第二、三次挥手是同时进行的还是分开进行的?这两次挥手何时需要分开进行?

通过回顾实验内容可以看到,本实验中连接释放过程的第二、三次挥手同时进行的,服务器0收到第一次挥手的FIN后,向PC0发送一个ACK报文段,表示收到了PC0的FIN,并与此同时,服务器0发起自己的关闭过程,向PC0发送了一个FIN,这种同时进行的挥手效率较高。

如果PC希望在发送FIN后继续接收数据,即进入一种“半关闭”状态,在这一状态下,主动关闭方仍然可以接收来自被动关闭方的数据,但主动关闭方不再向被动关闭方发送新的数据,那么第二次与第三次挥手就需要分开进行。

3)本实验中连接释放阶段的第四次挥手,PC Server 发送最后一个 TCP 确认报文段后,为什么不是直接进入 CLOSED(己关闭)连接状态,而是进入 CLOSING(正在关闭)连接状态?

在TCP协议中,当PC发送完最后一个确认报文段后,它会进入“连接正在关闭,但还未完成”的CLOSING 状态。在这个状态下,PC会等待确认来自 Server 的最后一个 ACK 报文段,当 PC 收到 Server 的最后一个 ACK后,设备连接才会进入 CLOSED(己关闭)状态。

这样的设计是为了应对网络延迟或其它导致的报文段丢失的情况,如果 PC 直接进入 CLOSED 状态,而由于一些原因 PC 没有接收到 Server 的确认,那么 PC 就无法得知连接是否真正关闭,而如果Server没有接收到PC的TCP确认报文段,此时的PC由于已经关闭也无法向Server进行重传。通过先进入 CLOSING 状态,PC 能够等待确认,确保TCP连接释放的可靠性。

4) 本实验中 TCP 连接建立后的数据通信阶段,PC Server 发送了多少数据? Server PC 发送了多少数据?

如下实验结果所示,PC 向 Server 发送的数据长度为101,而Server 向 PC 发送的数据长度为471:

通过上述的实验内容,我们可以总结TCP连接的三个阶段对应的报文信息如下图所示:

实验心得与体会:

  1. 转眼间计算机网络的实验课已经进入尾声,与我们地信专业其它的实验课相比,这门实验课没有复杂的操作,相关软件的使用也不具有很大的难度,但我却认为这是将理论与实际结合的最好的一门实验课程,我认为其根本原因在于:计算机网络中的许多过程对于我们来说都是瞬息之间或者自然而然发生的,让我们具有很好的接收程度,而实验课的内容又可以把这些过程剖析地非常具体与详细的展现在我们的面前
  2. 而以此次实验课的内容为例,在实际生活中,TCP连接的建立与释放过程都是十分迅速的,虽然我们在课堂上深入学习了“三次握手”与“四次挥手”的具体过程,但难免还是会有些不详细清楚了解的地方。而通过实验课的学习,借助一个虚拟的环境与具体的TCP连接的例子,我们不仅可以了解理论课上所说的“三”与“四”的具体含义,甚至可以从OSI模型的角度深入了解设备的连接状态、输出报文段信息与输入报文段信息等等,这样一个从浅入深从简到繁的学习过程,大大加深了我们对学习的印象与理解;
  3. 在整个这一门实验课的学习过程中,如果是对课堂理论知识没有真正理解与深入学习的同学,可能认为实验课程就是在搭建好网络拓扑后随便点几个按钮,截几张图片就能完成的任务,但事实上这只是我们实验课程中需要完成的最基础的部分
  4. 我认为实验课程作为辅助我们理论课程深入理解相关概念的重要方法,我们应该善于利用这一工具中“展现直观”的特点,将理论课中的抽象讲解与我们可以具体应用的例子相结合,并最终将相关知识再转化为我们自己的抽象理解,只有这样才能说是真正完成了一节实验课的任务与内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2219841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文速读】Prompt Tuning:The Power of Scale for Parameter-Effificient Prompt Tuning

arxiv:2104.08691v2 摘要 在这项工作中,我们探索了“prompt tuning(提示调优)”,这是一种简单而有效的机制,用于学习“soft prompts(软提示)”,以条件下冻结的语言模型…

Golang | Leetcode Golang题解之第485题最大连续1的个数

题目: 题解: func findMaxConsecutiveOnes(nums []int) (maxCnt int) {cnt : 0for _, v : range nums {if v 1 {cnt} else {maxCnt max(maxCnt, cnt)cnt 0}}maxCnt max(maxCnt, cnt)return }func max(a, b int) int {if a > b {return a}return …

矩阵matrix

点积 在 NumPy 中,dot 是矩阵或向量的点积(dot product)操作。 假设有两个向量a和 b,它们的点积定义为对应元素相乘,然后求和。公式如下: 例子: 点积的计算步骤是: 因此&#xf…

【动态规划】【路径问题】下降路经最小和、最小路径和、地下城游戏

4. 下降路径最小和 931. 下降路径最小和 算法原理 确定状态表示 dp[i][j] 表示:到达 [i, j] 位置,最小的下降路径 状态转移方程 dp[i][j] 从 [i-1, j-1] 到达 [i, j] > dp[i-1][j-1] m[i][j]从 [i-1, j] 到达 [i, j] > dp[i-1][j] m[i][j]从 …

leetcode_887_鸡蛋掉落___循序渐进的分析

分析:对于一组[n,k] 在一次尝试中选择了在dep层测试 其可以分为 如果在dep层炸了: 则变成了[dep-1,k-1]读作在dep-1层用k-1个鸡蛋来找鸡蛋的极限所需次数如果在dep层没炸: 则变成了[n-dep,k]读作在n-dep层用k个鸡蛋来找鸡蛋的极限所需次数可以发现这都是子问题的…

【Javaee】网络编程-TCP Socket

前言 前文中我们介绍了UDP Socket相关的构造方法和方法,并实现了UDP的回显服务器和客户端。 本篇将介绍TCP Socket,并使用TCP Socket api实现服务器和客户端的通信 一.TCP Socket的常见方法 1.ServerSocket ServerSocket是创建TCP服务端Socket的API …

线程池:高效管理并发任务的利器

线程池:高效管理并发任务的利器 什么是线程池? 线程池(Thread Pool)是Java并发编程中的一种设计模式,旨在通过重复利用线程资源,来提高程序执行效率。线程池的主要思想是提前创建一组可供使用的线程&#…

归一化输入

当输入的不同的特征取值范围差异过大,取得对应参数差别也会很大,在对参数进行优化的过程中,参数小的维度步长较小,参数大的维度步长较大,优化过程中路径曲折,将输入归一化,使特征取值范围差别小…

相控阵雷达电特性matlab模拟与仿真,带GUI界面,对比有限扫描阵,稀疏阵,多波束阵,共形阵等

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 相控阵雷达作为一种先进的雷达技术,具有高分辨率、多功能、快速扫描等优点,在军事和民用领域都有着广泛的应用。相控阵雷达的天线系统是其核心组成部分…

C#线性变换——缩放

前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在C#开发中经常需要对平面中的坐标进行一些变换,比如缩放、旋转等&…

数据结构:二叉树、堆

目录 一.树的概念 二、二叉树 1.二叉树的概念 2.特殊类型的二叉树 3.二叉树的性质 4.二叉树存储的结构 三、堆 1.堆的概念 2.堆的实现 Heap.h Heap.c 一.树的概念 注意,树的同一层中不能有关联,否侧就不是树了,就变成图了&#xff…

PCL 点云配准 Trimed-ICP算法(精配准

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 perform_standard_icp 函数 2.1.2 perform_trimmed_icp 函数 2.1.3 visualize_registration 函数 2.2完整代码 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算…

国庆旅游高峰期,如何利用可视化报表来展现景区、游客及消费数据

国庆黄金周,作为国内旅游市场的年度盛宴,总是吸引着无数游客的目光。今年,随着旅游市场的强劲复苏,各大景区又再次迎来游客流量的高峰。全国国内出游7.65亿人次,同比增长5.9%,国内游客出游总花费7008.17亿元…

大型企业软件开发是什么样子的? - Web Dev Cody

引用自大型企业软件开发是什么样子的? - Web Dev Cody_哔哩哔哩_bilibili 一般来说 学技术的时候 我们会关注 开发语言特性 ,各种高级语法糖,底层技术 但是很少有关注到企业里面的开发流程,本着以终为始(以就业为导向…

界面控件Telerik UI for WPF 2024 Q3亮点 - 支持禁用数据过滤等

Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等,创建的应用程序可靠且结构良好,非常容易维护,其直观的API将无缝地集成Visual Studio…

[Linux网络编程]03-TCP协议

一.TCP协议数据通信的过程 TCP数据报如下,数据报中的标志位双端通信的关键。 三次握手: 1.客户端向服务端发送SYN标志位,请求建立连接,同时发送空包 2.服务端向客户端回发ACK标志位(即确认标志位,任何一端发送数据后都需要另一端…

asyn驱动示例-int32driver

驱动程序源代码int32Driver.c&#xff1a; #include <stddef.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <ctype.h>#include <cantProceed.h> #include <epicsStdio.h> #i…

官龙村捐赠图书整理有感

今天&#xff08;2024年10月20日&#xff09;&#xff0c;我有幸参加了在深圳南山区西丽官龙村举行的义工活动&#xff0c;主要任务是整理捐赠的图书&#xff0c;并根据小学和中学的需求进行分类打包。这次活动不仅让我体会到了劳动的辛苦&#xff0c;更让我感受到了助人为乐的…

【AIGC】第一性原理下的ChatGPT提示词Prompt设计:系统信息与用户信息的深度融合

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;第一性原理与ChatGPT提示词Prompt设计应用第一性原理于ChatGPT提示词Prompt设计系统信息和用户信息的融合实际应用结论 &#x1f4af;系统信息与用户信息的定义和重要性系…

鸿蒙中富文本编辑与展示

富文本在鸿蒙系统如何展示和编辑的&#xff1f;在文章开头我们提出这个疑问&#xff0c;带着疑问来阅读这篇文章。 富文本用途可以展示图文混排的内容&#xff0c;在日常App 中非常常见&#xff0c;比如微博的发布与展示&#xff0c;朋友圈的发布与展示&#xff0c;都在使用富文…