通过抓包研究TCP的连接、传输、断开

1-建立连接TCP三次握手

 

建立一个 TCP 连接需要“三次握手”,缺一不可 :

  • 一次握手:客户端发送带有 SYN(SEQ=x) 标志的数据包 -> 服务端,然后客户端进入 SYN_SEND 状态,等待服务器的确认;
  • 二次握手:服务端发送带有 SYN+ACK(SEQ=y,ACK=x+1) 标志的数据包 –> 客户端,然后服务端进入 SYN_RECV 状态
  • 三次握手:客户端发送带有带有 ACK(ACK=y+1) 标志的数据包 –> 服务端,然后客户端和服务器端都进入ESTABLISHED 状态,完成TCP三次握手

TCP连接建立包

9718为Client,8888为Server。

SYN和ACK是TCP包的标志位。SYN为建立连接请求标志位,FIN为断开请求标志位。

Seq和Ack都是相对序列号,实际序列号如下:

 2-断开连接TCP的四次挥手

  1. 第一次挥手 :客户端发送一个 FIN+ACK(SEQ=X) 标志的数据包->服务端,用来关闭客户端到服务器的数据传送。然后,客户端进入 FIN-WAIT-1 状态。
  2. 第二次挥手 :服务器收到这个 FIN+ACK(SEQ=X) 标志的数据包,它发送一个 ACK (ACK=X+1)标志的数据包->客户端 。然后,此时服务端进入CLOSE-WAIT状态,客户端进入FIN-WAIT-2状态。
  3. 第三次挥手 :服务端关闭与客户端的连接并发送一个 FIN+ACK (SEQ=y)标志的数据包->客户端请求关闭连接,然后,服务端进入LAST-ACK状态。
  4. 第四次挥手 :客户端发送 ACK (ACK=y+1)标志的数据包->服务端并且进入TIME-WAIT状态,服务端在收到 ACK (ACk=y+1)标志的数据包后进入 CLOSE 状态。此时,如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后,客户端也可以关闭连接了。

TCP抓包过程

 3-数据传输

首先我们要明白TCP是面向字节流的可靠连接,UDP是面向报文的不可靠连接。TCP是如何保证可靠性的。

  1. 基于数据快传输 :应用数据被分割成 TCP 认为最适合发送的数据块,再传输给网络层,数据块被称为报文段或段。
  2. 对失序数据包重新排序以及去重:TCP 为了保证不发生丢包,就给每个包一个序列号,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据就可以实现数据包去重。
  3. 校验和 : TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  4. 超时重传 : 当发送方发送数据之后,它启动一个定时器,等待目的端确认收到这个报文段。接收端实体对已成功收到的包发回一个相应的确认信息(ACK)。如果发送端实体在合理的往返时延(RTT)内未收到确认消息,那么对应的数据包就被假设为已丢失open in new window并进行重传。
  5. 流量控制 : TCP 连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议(TCP 利用滑动窗口实现流量控制)。
  6. 拥塞控制 : 当网络拥塞时,减少数据的发送。

TCP数据传输包

 其中PSH代表数据包,Win代表窗口,Len为数据的长度(不包括TCP首部),Client发送数据到Server后,确认收到之后发送一个ACK给Client代表已经收到,确认块的Ack为 client发送包中的Ack=Seq+Len,代表Server确实收到了。详细的包内容如下:

固定首部长度为20字节,可变部分0~40字节,各字段解释:

  1. 源端口,16bits,范围0~65525。
  2. 目的端口,16bits,范围同上。
  3. sequence number: 数据序号,32bits,TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
  4. acknoledgement number: 确认号,32bits,期望收到对方的下一个报文段的数据的第一个字节的序号。
  5. 数据偏移,4bits,单位为4字节,它指出报文数据距TCP报头的起始处有多远(TCP报文头长度)。
  6. 保留字段 6bits,保留今后使用,目前置0处理。
  7. URG:紧急比特,1bit,当 URG=1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)
    ACK:确认比特,1bit,只有当 ACK=1时确认号字段才有效。当 ACK=0 时,确认号无效
    PSH:推送比特,1bit,接收方 TCP 收到推送比特置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付
    RST:复位比特,1bit,当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
    SYN:同步比特,1bit,同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文
    FIN:终止比特,1bit,用来释放一个连接。当FIN=1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接
  8. 窗口大小,16bits,窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
  9. 检验和,16bits,检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
  10. 紧急指针字段,16bits,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。
  11. 选项字段,长度可变。TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。 这部分最多包含40字节,因为TCP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)
    选项的第一个字段kind说明选项的类型。有的TCP选项没有后面两个字段,仅包含1字节的kind字段。第二个字段length(如果有的话)指定该选项的总长度,该长度包括kind字段和length字段占据的2字节。第三个字段info(如果有的话)是选项的具体信息. kind=0是选项表结束选项
    kind=1是空操作(nop)选项,没有特殊含义,一般用于将TCP选项的总长度填充为4字节的整数倍
    kind=2是最大报文段长度选项,TCP连接初始化时,通信双方使用该选项来协商最大报文段长度(Max Segment Size,MSS)。TCP模块通常将MSS设置为(MTU-40)字节(减掉的这40字节包括20字节的TCP头部和20字节的IP头部)。这样携带TCP报文段的IP数据报的长度就不会超过MTU(假设TCP头部和IP头部都不包含选项字段,并且这也是一般情况),从而避免本机发生IP分片。对以太网而言,MSS值是1460(1500-40)字节。

TCP报文Win和ACK

区别Client报文和Server报文的ACK!!当Cilent与Server建立连接后,ACK就会一直被置为1,Client发送数据到Server时,Ack将会一直不变,relative ack number =1;Server发送确认消息到Client时,ack= Seq+Len;Client根据ack判断数据是否被成功接收。

滑动窗口动态调整#

主要是根据接收端的接收情况,动态去调整Window Size,然后来控制发送端的数据流量

客户端不断快速发送数据,服务器接收相对较慢,看下实验的结果

a. 包175,发送ACK携带WIN = 384,告知客户端,现在只能接收384个字节

b. 包176,客户端果真只发送了384个字节,Wireshark也比较智能,也宣告TCP Window Full

c. 包177,服务器回复一个ACK,并通告窗口为0,说明接收方已经收到所有数据,并保存到缓冲区,但是这个时候应用程序并没有接收这些数据,导致缓冲区没有更多的空间,故通告窗口为0, 这也就是所谓的零窗口,零窗口期间,发送方停止发送数据

d. 客户端察觉到窗口为0,则不再发送数据给接收方

e. 包178,接收方发送一个窗口通告,告知发送方已经有接收数据的能力了,可以发送数据包了

f. 包179,收到窗口通告之后,就发送缓冲区内的数据了.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Winpcap进行抓包,分析数据包结构并统计IP流量

2020年华科计算机网络实验 文末有完整代码,仅限参考 一.实验目的 随着计算机网络技术的飞速发展,网络为社会经济做出越来越多的贡献,可以说计算机网络的发展已经成为现代社会进步的一个重要标志。但同时,计算机犯罪、黑客攻击、…

HttpCanary抓包断网问题解决方式

以上操作步骤完成,即可完成抓包操作

原生JS实现代码高亮功能

实现步骤 分析如何实现该功能了解词法结构Javascript的产生式少废话,上代码 分析如何实现该功能 平时我们在使用一些代码编辑器或者Markdown时很好奇它的代码高亮是如何 实现的。其实原理也挺简单的,就是区分代码内容的不同token并加以颜色标识。 我们将以js规则为例…

从六个维度来分析:代码、无代码、低代码、AI提示代码、AI低代码

IT行业最不缺少概念,再多几个也无妨,反正大部分的概念大部分人都不会真正弄懂。AI低代码是我们新创的,AIGC低代码、AI低代码、智能开发、AI生成式开发、AIGS(AI生成软件)等等,这些概念已经呼之欲出了,不过还是觉得AI低…

Transformer:一种图灵完备的神经网络

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【Transformer】微信技术交流群 作者:张晨珩(北京大学23级博士生)已授权 https://zhuanlan.zhihu.com/p/611257510 论文: Attention is Tu…

什么是元宇宙?元宇宙在 2023 年将走向何方

2023 年,元宇宙是当今技术领域的热门话题。除了新兴的人工智能和物联网技术,元宇宙服务提供商也在争先恐后地进行创新,以提供企业和消费者解决方案。 元宇宙曾经是技术先驱和数据科学家的专属,现在正在扩大到影响每个人。这种环…

Midjourney|文心一格prompt教程[技巧篇]:生成多样性、增加艺术风格、图片二次修改、渐进优化、权重、灯光设置等17个技巧等你来学

Midjourney|文心一格prompt教程[技巧篇]:生成多样性、增加艺术风格、图片二次修改、渐进优化、权重、灯光设置等17个技巧等你来学 1.技巧一:临摹 我认为学习图片类的 prompt,跟学习画画是类似的,最好的学习方法不是直接用模板。…

新旧iphone短信转移,苹果旧手机短信导入新手机

短信携带重要信息内容,新旧iphone短信转移?您可能知道,iOS设备上不支持导出iPhone简讯,更不用说打印iPhone上的短信了。幸运的是,有一些可行的方法可以将iPhone短信导入到另一个iPhone,继续阅读以获得更多帮…

苹果手机怎么发语音短信?

说到语音,大家最熟悉的就是用微信发语音了,但是微信发语音的前提是必须是好友, 对于企业来说,使用范围还是受限,其实比微信语音应用范围广的就是语音短信,通过语音通知的新式,只要用户手机能正常…

iPhone苹果手机短信如何批量删除苹果iPhone手机短信?

iPhone苹果手机短信如何批量删除苹果iPhone手机短信? 1、iPhone苹果手机短信较多,如何才能快捷的批量删除苹果iPhone手机短信。 2、打开苹果iPhone手机设置; 3、在iPhone苹果手机设置内找到通用并点击进入; 4、在苹果iPhone手机设…

苹果手机短信如何转入Android手机,苹果手机怎么将短信备份导入到安卓手机?...

iPhone手机的短信无法直接导入安卓手机,在将苹果手机换为安卓手机时,短信往往无法迁移,这让我们很苦恼。小编试了QQ同步助手,百度网盘等同步类软件,往往只能备份通讯录,而无法备份短信。本文将介绍怎么样通…

小智AI教你制造业中如何应用ChatGPT实现智能化生产

制造业是现代社会经济发展的关键行业之一。然而,在制造业的生产过程中,存在着许多的瓶颈和问题,比如人力资源不足、生产线效率低下、生产成本高昂等等。这些问题导致制造业在生产效率、生产质量等方面面临着诸多挑战,因此&#xf…

ChatGPT Creator 刚刚启动了一个 AI 检测器,我们最终能否检测到 AI 编写的内容?

在过去的几个月里,我们看到许多工具都在尝试检测 AI 编写的文本。 然而,就在昨天,ChatGPT 背后的公司 OpenAI 推出了自己的文本分类器,旨在区分人工智能编写的文本和人类编写的文本。这是一个有一些限制的免费工具,但它仍然可以帮助您检测某些内容是否由 AI 编写。 我已…

Meta带头甩卖 VR头显打起价格战

新春三月,准备入手VR头显的“等等党”终于迎来降价利好。以Meta为首的一众VR厂商们纷纷打折,无论是为了清理库存、回收成本还是让步硬件新品,普通消费者都喜闻乐见。 上周五,Meta 率先官宣Meta Quest Pro与Meta Quest 2 的256GB版…

【青少年编程】【三级】打气球游戏

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

android 儿童 游戏,7-10岁儿童游戏大全

亲子游戏是亲子之间交往的重要形式。目的是培养小孩的认知和自理能力。最好的亲子教育,莫过于和宝宝一起玩丰富多彩的亲子游戏了。亲子游戏不仅让宝宝能玩得高兴,也能拉近你和宝宝的距离,何乐而不为? 7-10岁儿童游戏大全top1:春夏秋冬 春夏秋…

小朋友做游戏

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 牛牛是一个幼儿园老师,他经常带小朋友们一起做游戏。 现在,牛牛的班里有AAA个安静的小朋友和BBB个闹腾的小朋友,牛牛想要从中选出恰好nnn个人来做…

益智app游戏 android,儿童宝宝益智游戏

儿童宝宝益智游戏app是一款游戏型的幼儿启蒙教育软件,宝宝们在这里可以通过玩游戏的方式学习到各种基础知识,很好地激发他们的学习兴趣。详细内容请感兴趣的朋友前来西西下载体验! 应用简介 儿童宝宝系列教育应用是根据教育部新颁布的《3-6岁…

推荐几款适合孩子玩的编程游戏

在上一篇文章《孩子喜欢玩iPad等电子产品怎么办》中,我们鼓励家长合理控制孩子的屏幕时间,与此同时,为孩子挑选合适的电子消费内容同样重要。 今天就给大家推荐几款可以鼓励孩子玩的游戏,让孩子们在玩游戏的过程中学习编程。 1. k…

ChatGPT4已经来了,30秒做一个弹球游戏!

前两周写了关于ChatGPT的文章, 折腾了一晚!终于开通了ChatGPT plus版本! ChatGPT_Plus的功能有多强!3分钟写一个贪吃蛇游戏! 然后果断的注册了Plus, 事实证明这个决定是对的,现在只有plus 可以抢先尝鲜GPT4…