【计算机网络】lab7 TCP协议

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光

目录

1. 实验目的

2. 实验环境

3. 实验过程

3.1 Capture a Trace 捕获

3.2 Inspect the Trace 检查捕获

3.3 TCP Segment Structure

3.4 TCP三次握手

3.5 TCP四次挥手

 3.6 TCP数据传输 

4. 问题回答

5. 自我探索

6. 总结 


本系列重点针对山东大学-软件学院-计算机网络实验的任务。

希望通过实验,一方面加强大家对理论知识的认识,另一方面提升大家的动手能力。

也希望我的博客能够给学弟学妹们的学习提供一些帮助。

1. 实验目的

  1. 熟悉使用wireshark软件进行抓取TCP数据包 ;
  2. 分析抓取到的TCP数据包,掌握TCP数据包结构、TCP数据包各字段的含义;
  3. 掌握TCP连接建立和释放的步骤;
  4. 掌握TCP数据传输过程;

2. 实验环境

· wireshark;· wget :获取web资源。
· Browser:本次实验用web浏览器获得页面作为工作负载,查找、获取页面。

3. 实验过程

3.1 Capture a Trace 捕获

1.使用一个中等大小的资源URL,且是HTTP(非HTTPS):提供的资源URL(http://p4.qhimg.com/bdm/0_0_100/t010fae11f356641191.jpg)

2.命令行下载资源
使用 wget 命令来下载该资源。输入以下命令:

wget http://p4.qhimg.com/bdm/0_0_100/t010fae11f356641191.jpg

这条命令会使用 HTTP 协议从指定的 URL 下载该 JPEG 图片。

3. 打开 Wireshark 并设置过滤器:

在 Wireshark 中,设置一个过滤器以捕获与该 URL 相关的 TCP 流量。您可以使用以下过滤器:

tcp and host p4.qhimg.com

该过滤器会显示所有与 p4.qhimg.com 主机进行 TCP 通信的网络包。

4. 开始捕获数据包

  • 打开 Wireshark。
  • 选择合适的网络接口进行数据包捕获。
  • 在 Wireshark 的过滤框中输入 tcp and host p4.qhimg.com,然后按回车键应用过滤器。
  • 点击“开始捕获”按钮,Wireshark 将捕获和显示所有与 p4.qhimg.com 的 TCP 连接相关的数据包。

  

3.2 Inspect the Trace 检查捕获

选取一个TCP报文,检查结果如下:

  

可以知道:

  • source port 源端口 2B:很有可能是80,因为web服务器的端口号是80;
  • destination port 目的端口 2B:source port 和 destination port是TCP在IP地址以外添加的地址。
  • sequence number 序号4B:保证TCP可靠性传输的关键,记录第一个有效负载字节在字节流中的位置;
  • acknowledge number 确认号 4B:每一个ACK对应一个确认号,指明下一个期待收到的字节序号,同时表明该序号之前的所有数据都已经正确接收。只有当ACK位=1时有效。建连时SYN报文的ACK位=0;
  • TCP header length TCP首部长度 4b:TCP header 有多少个4B,例如这个TCP数据包的TCP header length显示为0101,说明这个TCP header长度为5(0101)*4 = 20B。TCP报文默认大小为20B。
  • flags 标志位 6b:CWR、ECE用于IP header的ECN字段;
  •         URG:标志紧急指针是否有效;
  •         ACK标志确认号是否有效;
  •         PSH提示接收端应用程序立即将接收缓冲区数据取走;
  •         RST处理异常连接,告知连接不一致的一方连接还没有建立好要求重新建连,RST=1复位报文段
  •         SYN用于同步,SYN=1 称为同步报文段;(1、2握手)
  •         FIN通知对方要关闭连接,FIN=1称为结束报文段。(1、3挥手)
  • window size 窗口大小 2B:流量控制,发送方发送大量数据时,接收方利用滑动窗口进行缓冲。
  • checksum 校验和 2B:和UDP检验相同;
  • options选项:建连时用于协调双方支持的内容;

3.3 TCP Segment Structure

在跟踪中间的任何地方选择一个协议列为TCP的长包。在中间面板中展开TCP协议部分(通过使用“+”扩展器或图标)。除HTTP响应的第一个HTTP GET包和最后一个HTTP响应包外,所有的报文都应该被列为TCP。选择一个长数据包可以确保我们看到的是从服务器到你的计算机的下载数据包。查看协议层,在TCP块之前看到一个IP块。这是因为TCP段是在IP中携带的。下表是TCP部分的各字段解释。  

  

3.4 TCP三次握手

记sequence number为Seq;acknowledge number为Ack;

  • 第一次握手:客户端发送一个SYN同步报文段(SYN=1的TCP数据包,包含初始序列号Seq=J),请求与服务器建立连接;
  • 第二次握手:服务器发送SYN+ACK段(SYN=ACK=1的TCP数据包,序列号Seq=K,确认号Ack=J+1),确认号=J+1表明前J+1之前的0~J都已经正确接收,已经接收了客户端发来的SYN段;
  • 第三次握手:客户端发送一个ACK段给服务器(ACK=1,Ack=K+1),表示已经正确接收服务器发来的SYN+ACK段;

具体图如下:

 在WireShark中如下:

3.5 TCP四次挥手

四次挥手的过程:

  • 第一次挥手:客户端发送结束报文段(FIN=1,Seq=U)给服务器。
  • 第二次挥手:服务器收到第一次挥手的数据包之后,向客户端发送确认报文(ACK=1,Seq=V,Ack=U+1),允许断开连接;
  • 第三次挥手:服务器发送确认报文之后,继续发送结束报文段(FIN=1,ACK=1,Seq=V,Ack=U+1)给客户端;
  • 第四次挥手:客户端接收到FIN结束报文段之后,发送确认报文(ACK=1,Seq=U+1,Ack=W+1)给服务器,告知服务器已经接收到结束报文。

服务器接收到这条ACK确认报文之后,释放TCP连接的相关资源(缓存和变量),客户端等待一段时间之后,释放处于客户端的缓存和变量。
等待一段时间TIME-WAIT:① 保证第四次挥手。客户端不确认第四次挥手时发送给服务器的ACK确认报文是否顺利到达服务器。如果没有顺利到达,服务器会重新进行第三次挥手,直到正确接收客户端第四次挥手的ACK确认报文段。所以不可以立即释放客户端资源,这会导致服务器重新进行的第三次挥手失败。② 防止新连接中出现旧连接的报文段。四次挥手完成之后,不代表之前通过这个连接发送的所有数据都已经处理完了,有些可能在网络中传输。如果立即释放资源,然后再在用一对源端口、目的端口建立TCP连接,可能导致上一次连接中遗留在网络中的报文在新连接中到达,会被当成是新连接的数据进行处理,这就产生了错误。所以需要等待2MSL时长,确保旧连接的报文都从网络中消失。
四次挥手:TCP是全双工的,当客户端要关闭连接时,服务器要发送的数据不一定发完了,所以第二、三次挥手都是服务器完成的,第二次确认知道要关闭连接,第三次告知客户端服务器数据也发送完毕可以断开;CLOSE-WAIT等待服务器发送完数据;第四次挥手返回ACK报文段完才进入TIME-WAIT。因为结束时涉及数据有没有传送完这个问题,所以不同于建立连接时只用三次握手。

 3.6 TCP数据传输 

在wireshark里面点击统计-IO图标。弹出界面如下:  

接下来依次进行以下操作

  1.  间隔选择1分钟
  2. Y轴单位改为Bits
  3. Display Filter:填入tcp.srcport==80
  4. 点击“+”,在新的条目的Display Filter里面填入tcp.dstport==80。最终得到两条线,青色的表示下载速率,红色的表示上传速率,如下所示: 

4. 问题回答

问题1:在SYN数据包上,TCP包含了哪些选项字段以供跟踪。
答:ACK字段和SYN字段。

问题2:当TCP连接正常的时候,下载方向的粗略数据速率(以包/秒或位/秒为单位)是多少?

答:大约是50000bps

问题3:内容占下载率的百分比是多少?展示你的计算。

答:使用tcp.srcport==80 进行过滤,找到任意一个中间位置的大型包。可以看到,总的数据量为1514B=12112bits。而TCP携带的内容占1460B。所以内容占下载率的96.43%。

问题4:由于ACK报文,上传方向的粗略速率(比特/秒)是多少?
答:缩放坐标轴后可以看到,速率大约为21.7Kbps。

问题5:如果最近从服务器接收到的TCP段的序列号是X,那么下一个传输的TCP段携带的ACK号是什么?

答:下一个报文ACK号是X加上这个报文的长度segment length。

5. 自我探索

TCP拥塞控制:拥塞窗口cwnd(congestion window):发送方维护一个状态变量(即拥塞窗口),大小取决于网络的拥塞程度且动态变化。发送方自己的发送窗口=拥塞窗口;如果要考虑接收方的接受能力,发送窗口可能<拥塞窗口。
原则:只要网络没有出现拥塞(发送方没有按时收到ACK确认报文),就增大窗口;若出现拥塞减少拥塞窗口。

探索TCP可靠性机制:
1. 超时重传机制:超过时间还未收到ACK则重新发送。
2. 校验和:校验和错误时重传。
3. 序列号:序列号能够确认缺少了哪个位置的数据,保证按序到达,同时筛除重复数据。
4. 确认应答机制:ACK标志位=1时,检查Ack=U+1,说明前U个数据包都正确接收。

SACK: TCP的一个选项,允许TCP单独确认非连续片段,用于告知真正丢失的包,只重传丢失的片段。options字段中:SACKpermitted 当发送序列中某个数据包丢失,可通过SACK报文通知发送方这个丢了,发送方于是重新传丢失的包,而不是全部重发。

6. 总结 

本文到这里就结束啦~~
如果觉得对你有帮助,辛苦友友点个赞哦~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker中jenkins流水线式部署GitLab中springboot项目

本质就是将java项目拉取下来&#xff0c;并自动打包成docker镜像&#xff0c;运行 首先启动一个docker的jenkins 如果没有镜像使用我的镜像 通过网盘分享的文件&#xff1a;jenkins.tar 链接: https://pan.baidu.com/s/1VJOMf6RSIQbvW_V1zFD7eQ?pwd6666 提取码: 6666 放入服…

【初识扫盲】厚尾分布

厚尾分布&#xff08;Fat-tailed distribution&#xff09;是一种概率分布&#xff0c;其尾部比正态分布更“厚”&#xff0c;即尾部的概率密度更大&#xff0c;极端值出现的概率更高。 一、厚尾分布的特征 尾部概率大 在正态分布中&#xff0c;极端值&#xff08;如距离均值很…

小程序租赁系统

内容概要 小程序租赁系统&#xff0c;听起来很复杂&#xff0c;但其实就是为那些想要快速搭建业务的人提供一个便捷的工具。随着移动互联网的迅猛发展&#xff0c;越来越多的企业和创业者开始寻找效率和灵活性&#xff0c;而小程序正好满足了这种需求。据统计&#xff0c;过去…

高可用虚拟IP-keepalived

个人觉得华为云这个文档十分详细&#xff1a;使用虚拟IP和Keepalived搭建高可用Web集群_弹性云服务器 ECS_华为云 应用场景&#xff1a;虚拟IP技术。虚拟IP&#xff0c;就是一个未分配给真实主机的IP&#xff0c;也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个…

工厂人员定位管理系统方案(二)人员精确定位系统架构设计,适用于工厂智能管理

哈喽~这里是维小帮&#xff0c;提供多个场所的定位管理方案&#xff0c;如需获取工厂人员定位管理系统解决方案可前往文章最下方获取&#xff0c;如有项目合作及技术交流欢迎私信我们哦~撒花 在上一篇文章中&#xff0c;我们初步探讨了工厂人员定位管理系统的需求背景以及定位方…

虚假星标:GitHub上的“刷星”乱象与应对之道

在开源软件的世界里&#xff0c;GitHub无疑是最重要的平台之一。它不仅是一个代码托管平台&#xff0c;也是一个社交网络&#xff0c;允许开发者通过“点赞”&#xff08;即加星&#xff09;来表达对某个项目的喜爱和支持&#xff0c;“星标”&#xff08;Star&#xff09;则成…

RK3568 Android 13 内置搜狗输入法小计

问&#xff1a;为什么写&#xff1f; 答&#xff1a;网上搜出来的都试过了&#xff0c;不行&#xff01;下面直接上代码和注意事项&#xff01; 首先到这个目录&#xff08;/RK3568/Rockchip_Android13_SDK_Release/device/rockchip/rk356x/tl3568_evm/preinstall&#xff09…

GO语言实现KMP算法

前言 本文结合朱战立教授编著的《数据结构—使用c语言&#xff08;第五版&#xff09;》&#xff08;以下简称为《数据结构&#xff08;第五版&#xff09;朱站立》&#xff09;中4.4.2章节内容编写&#xff0c;KMP的相关概念可参考此书4.4.2章节内容。原文中代码是C语言&…

基于springboot的疫情网课管理系统

作者&#xff1a;学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”&#xff0c;支持远程部署调试、运行安装。 项目包含&#xff1a; 完整源码数据库功能演示视频万字文档PPT 项目编码&#xff1…

FFmpeg硬件解码

使用FFmpeg进行硬件解码时&#xff0c;通常需要结合FFmpeg的API和硬件加速API&#xff08;如CUDA、VAAPI、DXVA2等&#xff09;。以下是一个简单的C代码示例&#xff0c;展示如何使用FFmpeg进行硬件解码。这个示例使用了CUDA作为硬件加速的后端。 1. 安装FFmpeg和CUDA 确保你…

unity如何在urp管线下合并spine的渲染批次

对于导入unity的spine来说,他会对每个spine生成独有的材质,虽然他们使用的是同一个shader,但由于附带独有的贴图,这样在项目使用中会由于材质贴图不同而导致无法合批. 而为什么选用urp,因为在built-in管线中,对于GPU-instancing,即使通过使用图集的方式统一了贴图,也会由于spi…

【Elasticsearch】批量操作:优化性能

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探…

深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比

众所周知&#xff0c;不管是什么框架&#xff0c;在前端 UI 渲染时&#xff0c;都会有构造出一套相关的渲染树&#xff0c;并且在 UI 更新时&#xff0c;为了尽可能提高性能&#xff0c;一般都只会进行「差异化」更新&#xff0c;而不是对整个 UI Tree 进行刷新&#xff0c;所以…

Docker 的安装和基本使用[SpringBoot之Docker实战系列] - 第535篇

历史文章&#xff08;文章累计530&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

介绍下不同语言的异常处理机制

Golang 在Go语言中&#xff0c;有两种用于处于异常的机制&#xff0c;分别是error和panic&#xff1b; panic panic 是 Go 中处理异常情况的机制&#xff0c;用于表示程序遇到了无法恢复的错误&#xff0c;需要终止执行。 使用场景 程序出现严重的不符合预期的问题&#x…

车联网安全--TLS握手过程详解

目录 1. TLS协议概述 2. 为什么要握手 2.1 Hello 2.2 协商 2.3 同意 3.总共握了几次手&#xff1f; 1. TLS协议概述 车内各ECU间基于CAN的安全通讯--SecOC&#xff0c;想必现目前多数通信工程师们都已经搞的差不多了&#xff08;不要再问FvM了&#xff09;&#xff1b;…

【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 &#x1f380;&#x1f380;&#x1f380; .NET开源 ORM 框架 SqlSugar 系列 &#x1f380;&#x1f380;&#x1f380; 文章目录 系列文章目录前言 &#x1f343;一、实体对象更新1.1 单条与批量1.2 不更新某列1.3 只更新某列1.4 NULL列不更新1.5 无主键/指定列…

51单片机入门基础

目录 一、基础知识储备 &#xff08;一&#xff09;了解51单片机的基本概念 &#xff08;二&#xff09;掌握数字电路基础 &#xff08;三&#xff09;学习C语言编程基础 二、开发环境搭建 &#xff08;一&#xff09;硬件准备 &#xff08;二&#xff09;软件准备 三、…

22、PyTorch nn.Conv2d卷积网络使用教程

文章目录 1. 卷积2. python 代码3. notes 1. 卷积 输入A张量为&#xff1a; A [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ] \begin{equation} A\begin{bmatrix} 0&1&2&3\\\\ 4&5&6&7\\\\ 8&9&10&11\\\\ 12&13&14&15 \end{b…

Python爬虫-汽车之家各车系周销量榜数据

前言 本文是该专栏的第43篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者在文章《Python爬虫-汽车之家各车系月销量榜数据》中,有详细介绍,如何爬取“各车系车型的月销量榜单数据”的方法以及完整代码教学教程。 而本文,笔者同样以汽车之家平台为例,…