Wireshark_labs TCP
在本实验中,我们将详细研究著名的TCP协议的行为。我们将通过从您的电脑向远程服务器传输一份150KB 的文件(一份Lewis Carrol 的“爱丽丝梦游仙境”文本), 并分析TCP传输内容的发送和接收过程来实现。我们将研究TCP对序列和确认号的使用,以提供可靠的数据传输;我们将看到TCP的拥塞控制算法-慢后动和拥塞避免在过程中,我们将看看TCP的接收器发送流量控制的机制。我们还将简要地观察TCP连线的设置,我们还会研究计算机和服务器之间TCP连线的性能(吞吐量和往返时间)。
在开始本实验之前,您应该先查看课本中的第3.5和3.7节
1. 捕捉从计算机网络到远程服务器的批量TCP传输
在开始探索TCP之前,我们需要使用Wireshark获取从计算机到远程服务器的文件TCP传输的数据包跟踪。为此,您将访问一个Web页面,该页面允许您输入存储在计算机上的一个文件的名称(其中包含《爱丽丝在仙境》的ASCII文本),然后使用HTTP POST方法将该文件传输到Web服务器(请参阅本文中的2.2.3节)。我们使用POST方法而不是GET方法,因为我们希望将大量数据从您的计算机传输到另一台计算机。当然,在此期间,我们将运行Wireshark来获取从您的计算机发送和接收的TCP段的跟踪。
做如下操作:
- 启动浏览器。将这个文件存储在你电脑的某个地方。
- 接下来访问http://gaia.cs.umass.edu/wireshark-labs/TCP-wireshark-file1.html。
- 你会看到类似下面这样的屏幕:
- 在此表单中使用Browse按钮输入包含爱丽丝仙境的计算机上的文件名称(完整路径名称)(或手动执行)。
- 暂时不要点击“上传*alice.txt文件”*按钮。
- 现在启动Wireshark并开始抓包(capture -> start),然后在Wireshark抓包选项屏幕上按OK(我们不需要在这里选择任何选项)。
- 返回浏览器,点击“上传alice*.txt文件”*按钮,将文件上传到gaia.cs.umass.edu服务器。一旦文件上传完成,一个简短的祝贺消息将显示在你的浏览器窗口。
- 停止Wireshark抓包。您的Wireshark窗口应该类似于下面所示的窗口。
如果您无法在实际的网路上运行Wireshark ,则可以下载在作者的计算机上执行上述步骤时捕获的数据包跟踪文件。当您探索下面的问题时,即使您已经捕获了自己的传输内容并使用它来回答下面的问题,您也可能会发现这份下载的跟踪包很有参考价值。
2. 第一眼看到捕捉到的踪迹
在详细分析TCP连接的行为之前,让我们对跟踪进行一个高级视图。
- 首先,在Wireshark窗口顶部的显示过滤器规格窗口中输入“tcp”(小写,不带引号,输入后不要忘记按回车键),过滤Wireshark窗口中显示的数据包。
您应该看到的是计算机和gaia.cs.umass.edu 之间的一系列TCP和HTTP讯息。您应该看到包含SYN讯息的初始三次握手。您应该看到HTTP POST讯息。根据您使用的Wireshark 的版本,您可能会看到从您的计算机向gaia.cs.umass.edu 发送一系列“HTTP Continuation”讯息。回想一下我们在早期的HTTP Wireshark实验室中的讨论,这不是HTTP Continuation 消息-这是Wireshark指示有多个TCP区段用于承载单个HTTP讯息的方式。在Wireshark的最新版本中,您将在Wireshark显示的Info 列中看到“[重新组装的PDU的TCP段]”, 以指示此TCP区段包含属于上层协议讯息的数据(在我们的示例中为,HTTP )。您还应该看到从gaia.cs.umass. edu返回到您的计算机的TCP ACK区段。
利用下载的http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip档案,打开其中的Wireshark捕的数据包文件tcp-ethereal-trace-1来回答以下问题( 即下载跟踪包并打开Wireshark中的跟踪包;见附注2)。 在回答问题时,您应该提交用于回答问题的跟踪内的数据包的列印输出。加上适当的注释以解释您的答案。要印出数据包,请使用文件->列印,选择仅选定数据包,选择数据包摘要行,然后选择回答问题所需的最小数据包详细信息量。
-
将文件传输到gaia.cs.umass.edu的客户端计算机(源)使用的IP地址和TCP端口号是什么? 要回答这个问题,可能最简单的方法是选择一个HTTP消息,并使用“所选包头窗口的详细信息”(如果您不确定Wireshark窗口,请参阅“入门Wireshark”实验室中的图2)来探索用于携带该HTTP消息的TCP数据包的详细信息。
-
gaia.c.s.umass.edu的IP地址是多少?在哪个端口号上发送和接收这个连接的TCP段?
找到POST讯息后,发现目标IP为128.199.245.12 目标端口为80
作者的IP地址为 192.168.1.102 端口号为1161
如果您已经能够创建自己的跟踪,请回答以下问题:
- IP地址和TCP端口号是什么,您的客户端计算机(源)用来传输文件到gaia.cs.umass.edu?
这是我的抓包结果,显示目标IP为128.119.245.12 端口号为80
我的IP为192.168.5.9 端口号为37968
由于这个实验是关于TCP而不是HTTP的,让我们改变Wireshark的“捕获数据包列表”窗口,以便它显示有关包含HTTP消息的TCP段的信息,而不是关于HTTP消息的信息。要让Wireshark执行此操作,请选择“Analyze->Enabled Protocols”。现在你应该看到一个Wireshark窗口,如下所示:
这就是我们要找的——在你的电脑和gaaia.cs.umass.edu之间发送的一系列TCP段。我们将使用您捕获的数据包跟踪(和/或数据包跟踪tcp-ethereal-trace-1在http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip;(参见前面的脚注),以便在本实验的其余部分研究TCP行为。
3. TCP基础知识
请回答以下关于TCP段的问题:
-
用于在客户端计算机和gaia.c.s.umass.edu之间发起TCP连接的TCP SYN段的序号是多少?在段中是什么将段标识为SYN段?
在首个建立连接的TCP请求中,SYN标志位为1。
段中的倒数第2bit设置为SYN标识位。 -
gaia.c.s.umass.edu发送给客户端计算机的SYNACK段的序列号是多少作为对SYN的回应?SYNACK段中的确认字段的值是多少?gaia.cs.umass.edu是如何确定这个值的?在段中是什么将段标识为SYNACK段?
SYNACK的序号为0,确认字段值为1,并且SYN的字段值也为1,说明服务器收到了我的连接请求,并返回SYNACK确认。 -
包含HTTP POST命令的TCP段的序号是多少?注意,为了找到POST命令,您需要挖掘Wireshark窗口底部的数据包内容字段,在其DATA字段中查找带有“POST”的段。
包含POST的字段的TCP序号为151117 -
考虑包含HTTP POST的TCP段作为TCP连接中的第一个段。tcp连接(包括包含HTTP POST的段)的前六个段的序列号是什么?每个片段是什么时候发送的?给定每个TCP报文段发送的时间和接收报文段确认的时间之间的差异,这六个报文段的RTT值是多少?收到每个ACK后,EstimatedRTT的值(见3.5.3节)是多少?假设EstimatedRTT的值等于第一个片段的测量RTT,然后使用第242页上的EstimatedRTT方程计算所有后续片段。
- *注意:**Wireshark有一个很好的功能,允许您绘制每个发送的TCP段的RTT。*在“捕获数据包列表”窗口中选择从客户端发送到gaia.cs.umass.edu服务器的TCP段。选择“统计信息->TCP流图->往返时间图”。
由于我的抓包结果干扰太多,我下面选择用作者的抓包结果。
前六个段的seq分别是:156469,157929,159389,160849,162309,163769
可以看到服务器返回ACK=159389的时间为25.867638 返回ACK=1622309的时间为25.959852
RTT取平均值为0.14134mm -
前六个TCP区段的长度是多少?
Len1,2,3,4,5=1460 Len6=272 -
对于整个跟踪,接收端最小可用缓冲区大小是多少?接收方缓冲空间的不足是否会限制发送方?
最小窗口应该是1460. 包的实际大小小于缓冲区大小,所以不会限制发送方。 -
跟踪文件中是否有重传的片段?为了回答这个问题,你(在跟踪中)检查了什么?
没有重传片段。 发送端IP为192.168.1.102,查看这个IP发送的所有包序号都没有重复。 -
在ACK中,接收方通常要确认多少数据?你能识别接收方正在对其他接收段进行跟踪的情况吗(参见文本中第250页的表3.2)。
接收方累计确认 -
TCP连接的吞吐量(单位时间传输的字节数)是多少?解释一下你是如何计算这个值的。
4. TCP拥塞控制在行动
现在让我们检查从客户端服务器的每单位时间发送的数据量。而不是(繁琐地! )从Wireshark窗口中的原始数据计算这些数值,我们将使用Wireshark的TCP图形工具-时序图( Stevens) - 来绘制数据。
- 在Wireshark的“抓包列表”窗口中选择一个TCP段。然后选择菜单:*统计->TCP流图->时间序列图(史蒂文斯)。你应该会看到一个与下图类似的图,它是根据http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip中数据包跟踪tcp-ethereal-trace-1中捕获的数据包创建的(见前面的脚注):
在这里,每个点表示一个发送的TCP段,绘制出该段的序列号与发送时间的关系。请注意,一组相互堆叠的点代表了一系列由发送方背靠背发送的数据包。
请针对http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip**中数据包跟踪TCP -ethereal-trace-1的TCP段回答以下问题
- 使用*时间序列图(史蒂文斯)*绘图工具来查看从客户端发送到gaia.cs.umass.edu服务器的片段的序列号与时间图。你能确定TCP的慢启动阶段开始和结束的位置,以及拥塞避免接管的位置吗?评论测量数据与我们在课文中研究的TCP的理想行为的不同之处。
看图看不出,我无法确认14. 请回答上面两个问题,了解你将文件从计算机传输到gaia.css.umass.edu时收集到的踪迹
相关文章:

Wireshark_labs TCP
在本实验中,我们将详细研究著名的TCP协议的行为。我们将通过从您的电脑向远程服务器传输一份150KB 的文件(一份Lewis Carrol 的“爱丽丝梦游仙境”文本), 并分析TCP传输内容的发送和接收过程来实现。我们将研究TCP对序列和确认号的使用,以提供…...

Linux程序崩溃调试
一、简单点的 编译时主动带-g,生成的程序带调试信息,而且开启生成dump文件,这时候可以使用core dump来调试程序,定位问题。可以参考:linux 程序crash 调试、原因分析及问题定位-CSDN博客 二、稍微复杂点 假设生成的可执…...

Day37 socket、TCP、UDP
socket类型 流式套接字(SOCK_STREAM) TCP 提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。 数据报套接字(SOCK_DGRAM) UD…...

从 Language Model 到 Chat Application:对话接口的设计与实现
作者:网隐 RTP-LLM 是阿里巴巴大模型预测团队开发的大模型推理加速引擎,作为一个高性能的大模型推理解决方案,它已被广泛应用于阿里内部。本文从对话接口的设计出发,介绍了业界常见方案,并分享了 RTP-LLM 团队在此场景…...

无人机|LQR控制算法及其无人机控制中的应用仿真
前言 LQR全称Linear Quadratic Regulator(线性二次调节器),顾名思义用于解决形如 x ˙ A x B u y C x D u \begin{aligned}\dot{x}&AxBu\\y&CxDu\end{aligned} x˙yAxBuCxDu 线性时不变系统的一种线性控制方法,…...

ubuntu环境下docker容器详细安装使用
文章目录 一、简介二、ubuntu安装docker1.删除旧版本2.安装方法一3. 安装方法二(推荐使用)4.运行Docker容器5. 配置docker加速器 三、Docker镜像操作1. 拉取镜像2. 查看本地镜像3. 删除镜像4. 镜像打标签5. Dockerfile生成镜像 四、Docker容器操作1. 获取…...

vue2源码分析-vue入口文件global-api分析
文章背景 vue项目开发过程中,首先会有一个初始化的流程,以及我们会使用到很多全局的api,如 this.$set this.$delete this.$nextTick,以及初始化方法extend,initUse, initMixin , initExtend, initAssetRegisters 等等那它们是怎么实现,让我们一起来探究下吧 源码目录 global-…...

Javascript原型 ,原型链如何理解使用 ?有什么特点?
文章目录 图解原型原型链总结有需要的请私信博主,还请麻烦给个关注,博主不定期更新,或许能够有所帮助!!请关注公众号 图解 原型 常被描述为 — 种基于原型的语言–每个对象拥有一个原型对象 当试图访问 一个对象的属性…...

Flutter混合栈管理方案对比
1.Google官方(多引擎方案) Google官方建议的方式是多引擎方案,即每次使用一个新的FlutterEngine来渲染Widget树,存在的主要问题是每个引擎都要有比较大的内存等资源消耗,虽然Flutter 2.0之后的FlutterEngineGroup通过在…...

Asp .Net Core 集成 Newtonsoft.Json
简介 Newtonsoft.Json是一个在.NET环境下开源的JSON格式序列化和反序列化的类库。它可以将.NET对象转换为JSON格式的字符串,也可以将JSON格式的字符串转换为.NET对象。这个类库在.NET开发中被广泛使用,因为它功能强大、易于使用,并且有良好的性能。 使用Newtonsoft.Json,…...

GPT对话知识库——ARM-Cortex架构分为哪几个系列?每个系列有几种工作模式?各种工作模式之间的定义和区别?每种架构不同的特点和应用需求?
目录 1,问: 1,答: 2,问: 2,答: Cortex-A系列 Cortex-R系列 Cortex-M系列 3,问: 3,答: ARM Cortex-A架构 ARM Cortex-R架构…...

795. 前缀和(acwing)
文章目录 795.前缀和题目描述前缀和 795.前缀和 题目描述 输入一个长度为n的整数序列。 接下来再输入m个询问,每个询问输入一对l, r。 对于每个询问,输出原序列中从第l个数到第r个数的和。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数&a…...

1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数
1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数 全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 这是教程中的一个函数,通过汇编来实现的。注释部分以及结合后面的讲解部分,可能还是有一点点细节的地方让初学者疑惑。我结合我自己的理解…...
图论练习5
Going Home Here 解题思路 模板 二分图最优匹配,前提是有完美匹配(即存在一一配对)左右集合分别有顶标,当时,为有效边,即选中初始对于左集合每个点,选择其连边中最优的,然后对于每…...

[C++] Volatile 和常量Const优化
Volatile的作用 volatile 表明某个变量的值可能在外部被改变,因此对这些变量的存取不能缓存到寄存器,每次使用时需要重新存取。 Const 和 Volatile的示例 示例1 int main() {const int a 1;int* pa const_cast<int*>(&a);*pa 4;cout &l…...

嵌入式学习day32 网络
htons();//host to network short 将端口号转换为网络通信中的大端存储 eg:htons(50000); ntohs();//host to network short 将大端存储转换为主机端口号 inet_addr();将IP地址转换为二进制 eg:inet_addr(192.168.1.170); inet_ntoa()…...

算法D33 | 贪心算法3 | 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
1005.K次取反后最大化的数组和 本题简单一些,估计大家不用想着贪心 ,用自己直觉也会有思路。 代码随想录 Python: class Solution:def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:nums.sort(keylambda x: abs(x), reverseT…...

html地铁跑酷
下面是一个简单的HTML代码来展示一个地铁跑酷游戏: <!DOCTYPE html> <html> <head><title>地铁跑酷</title><style>#player {position: absolute;top: 0;left: 0;width: 50px;height: 50px;background-color: red;}</style…...

利用GPT开发应用001:GPT基础知识及LLM发展
文章目录 一、惊艳的GPT二、大语言模型LLMs三、自然语言处理NLP四、大语言模型LLM发展 一、惊艳的GPT 想象一下,您可以与计算机的交流速度与与朋友交流一样快。那会是什么样子?您可以创建哪些应用程序?这正是OpenAI正在助力构建的世界&#x…...

Golang Ants 构建协程池
构建的协程池实现两个目标: 1、限制协程池里开启的协程数量 2、当任务数大于协程数时,一个协程可以同时处理多个任务 3、监控是哪个协程ID处理了具体的任务 package mainimport ("fmt""runtime""strconv""string…...

【金三银四】面试题汇总(持续编写中)
Java八股文面试题汇总(持续编写中~) Java基础集合JUCJVM 数据库MySQLRedis 框架篇SSMSpringBoot 数据结构与算法数据结构与算法--汇总篇27道基础算法题,学完让你对算法有豁然开朗的感觉(推荐小白) 消息中间件RabbitMQK…...

Hive的数据存储
Hive的数据存储在HDFS的:/user/hive/warehouse中 The /user folder in HDFS is a directory typically used to store user-specific data and configurations. It serves as the home directory for Hadoop users, analogous to the /home directory in Unix-like …...

ORACLE 如何使用dblink实现跨库访问
dbLink是简称,全称是databaselink。database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是database link是单向的连接。在创建dat…...

Sentinel 面试题及答案整理,最新面试题
Sentinel的流量控制规则有哪些,各自的作用是什么? Sentinel的流量控制规则主要包括以下几种: 1、QPS(每秒查询量)限流: 限制资源每秒的请求次数,适用于控制高频访问。 2、线程数限流…...

Qt在windows编译hiredis依赖库
目录 0 前言1 Qt安装遇到的问题2 hiredis源码下载2.0 redis源码下载2.1 hiredis源码下载2.2 编译hiredis源码2.3 遇到的问题列表参考资料0 前言 当前参与的项目需要用Qt对redis进行操作,以前没玩过这块,顺手记下笔记梳理起来~ 1 Qt安装 安装版本下载:https://download.qt…...

【工作向】protobuf编译生成pb.cc和pb.py文件
序言 首先通过protoc --version查看protoc版本,避免pb文件生成方和使用方版本不一致 1. 生成pb.cc 生成命令 protoc -I${proto_file_dir} --cpp_out${pb_file_dir} *.proto参数: -I表示 proto 文件的路径; --cpp_out 表示输出路径ÿ…...

android 快速实现 垂直SeekBar(VerticalSeekBar)
1.话不多说上源码: package com.example.widget;import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.MotionEvent;/*** Class to create a vertical slider*/ public class VerticalSeekBar…...

算法刷题day23:双指针
目录 引言概念一、牛的学术圈I二、最长连续不重复序列三、数组元素的目标和四、判断子序列五、日志统计六、统计子矩阵 引言 关于这个双指针算法,主要是用来处理枚举子区间的事,时间复杂度从 O ( N 2 ) O(N^2) O(N2) 降为 O ( N ) O(N) O(N) …...

学术论文GPT的源码解读与二次开发:从ChatPaper到gpt_academic
前言 本文的前两个部分最早是属于此旧文的《学术论文GPT的源码解读与微调:从ChatPaper到七月论文审稿GPT第1版》,但为了每一篇文章各自的内容更好的呈现,于是我今天做了以下三个改动 原来属于mamba第五部分的「Mamba近似工作之线性Transfor…...

报表生成器FastReport .Net用户指南:表达式(下)
在上一篇文章《报表生成器FastReport .Net用户指南:表达式(上)》中,我们已经介绍了表达式中的表达式编辑器、引用报告对象、使用 .Net 函数、数据元素参考这四部分,接下来让我们继续介绍表达式中的:引用数据…...