TCP协议 配合 Wireshark 分析数据

        在TCP连接中,无论是客户端还是服务端,都有可能成为发送端或接收端,这是因为TCP是一个全双工协议,允许数据在同一连接中双向流动

  • 客户端(Client)通常是指主动发起连接请求的一方。例如,在Web浏览中,用户计算机上的浏览器软件(客户端)会主动向Web服务器(服务端)发送连接请求。
  • 服务端(Service)是指被动等待连接请求的一方。如上述例子中的Web服务器,它会在某个固定端口监听来自客户端的连接请求。

TCP通讯时讯 :

Wireshark抓包完整通讯:

        下面我们先分析一下TCP是如何建立连接的。 

一、专有名词解析

1.1 序列号(Seq)

         在TCP(传输控制协议)中,序列号是一个32位的数值,用于唯一标识每个数据段中第一个字节的位置。当两个主机之间建立TCP连接时,它们会协商一个初始序列号,这个序列号随着每个数据段的发送而递增。序列号的主要作用在于确保数据包能够按照正确的顺序被接收方接收,即使在网络传输过程中出现了数据包的乱序或丢失,接收端也能够依据序列号将数据重新排列成原始的顺序。此外,序列号还与确认应答(ACKnowledgment)机制紧密相关,接收方通过发送带有特定确认号(即期望接收的下一个字节的序列号)的ACK包来告知发送方哪些数据已被成功接收。这种机制不仅支持数据的可靠传输,还帮助实现流量控制和连接的建立与终止过程。

1.2 窗口大小(Win)

        在TCP(传输控制协议)中,窗口大小(Win)是一个重要的参数,位于TCP报头中,用于实现高效的流量控制。窗口大小是一个16位的字段,它代表接收端当前允许发送端连续发送而不必立即等待确认的最大字节数。这个机制的核心在于,接收端通过告知发送端其缓冲区中可用的空间大小,来控制发送端发送数据的速度。当接收端的缓冲区接近满载时,它可以减小窗口大小甚至将其设为零,指示发送端暂停发送数据,以防数据溢出。相反,当接收端有更大的缓冲区空间可用时,它可以增大窗口大小,允许发送端发送更多的数据。通过这种方式,窗口大小动态调整,确保了数据传输的平滑性和高效性,同时也避免了缓冲区溢出造成的潜在数据丢失问题。此外,窗口大小机制还有助于提高传输效率,因为它允许发送端连续发送多个数据段而不必为每个数据段单独等待确认,从而减少了不必要的等待时间和网络拥塞的可能性。

1.3 长度 Length 与 Len

  • Length这是Wireshark中显示的整个TCP数据段的长度,包括TCP报头和数据部分
  • Len这是TCP数据段中数据部分的长度,以字节为单位。 

        Length的值反映了整个TCP数据段的大小,包括TCP报头和数据部分。在TCP通信的不同阶段,Length的值会根据数据段中包含的数据量和TCP报头的长度(包括任何选项字段)而变化。

        Len的值反映了TCP数据段中实际的数据负载的大小,不包括TCP报头。在TCP通信的不同阶段,Len的值会根据实际传输的数据量而变化。例如,在三次握手阶段,Len的值为0,因为这些数据段中没有实际的数据负载;而在数据传输阶段,Len的值会根据实际传输的数据量而变化。 

二、TCP建立连接(三次握手) 

  • 客户端:192.168.0.2:5000
  • 服务端:192.168.0.30:2021

2.1 第一次握手(SYN) 

源地址:192.168.0.2           目的地址:192.168.0.30
TCP Port numbers reused] 5000 -> 2021 [SYN] Seq=0 Win=4096 Len=0 MSS=1460

        解释:源地址192.168.0.2向目的地址192.168.0.30发送一个SYN包,请求建立连接。源端口是5000,目的端口是2021。序列号(Seq)为0,窗口大小(Win)为4096,最大段大小(MSS)为1460。

2.2 第二次握手(SYN-ACK)

源地址:192.168.0.30           目的地址:192.168.0.2
TCP 2021 -> 5000 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460

        解释:目的地址192.168.0.30向源地址192.168.0.2发送一个SYN-ACK包,确认收到SYN包并同意建立连接。序列号(Seq)为0,确认号(Ack)为1,窗口大小(Win)为8192。

2.3 第三次握手(ACK)

源地址:192.168.0.2           目的地址:192.168.0.30
TCP 5000 -> 2021 [ACK] Seq=1 Ack=1 Win=4096 Len=0

        解释:源地址192.168.0.2向目的地址192.168.0.30发送一个ACK包,确认收到SYN-ACK包,完成三次握手。序列号(Seq)为1,确认号(Ack)为1,窗口大小(Win)为4096。

2.4 综合分析
2.4.1 序列号(Seq): 
  • 在TCP三次握手的第一阶段,客户端向服务器发送一个SYN包,并附带一个初始序列号(Seq=0),这表示客户端希望从序列号0开始发送数据。
  • 服务器接收到SYN包后,回应一个SYN-ACK包,其中包含了自己的初始序列号(Seq=0),并确认了客户端的序列号(Ack=1),表示它已接收到客户端的序列号0,并期待后续的数据从序列号1开始。
  • 最后,客户端发送一个ACK包,确认号(Ack=1)表明客户端收到了服务器的序列号0,并准备接收从序列号1开始的数据。
2.4.2 窗口大小(Win): 
  •         在第一次握手中,客户端(源地址为192.168.0.2)发起了连接请求,发送了一个SYN包,并设置了窗口大小为4096(Win=4096)。这意味着客户端告诉服务器,它目前可以接收最多4096字节的数据。
  •         第二次握手中,服务器(源地址为192.168.0.30)回应了一个SYN-ACK包,它的窗口大小为8192(Win=8192)。这表明服务器愿意接收客户端的数据,并且它的接收缓冲区当前可以容纳最多8192字节的数据。同时,这也意味着服务器向客户端表明它可以处理比客户端所提议的更大的数据量。
  •         最后一次握手中,客户端发送了一个ACK包来确认收到了服务器的SYN-ACK,并且其窗口大小保持为4096(Win=4096)。这表明客户端再次确认它可以接收最多4096字节的数据,并且它准备好了接收后续的数据流。

        通过三次握手过程中的窗口大小信息交换,客户端和服务器协商了彼此的接收能力,并且为后续的数据传输做好了准备。这些窗口大小的值反映了双方在连接建立初期的流量控制策略,确保了数据传输的平稳性和可靠性。在整个握手过程中,窗口大小的动态调整确保了数据传输的效率,同时也防止了由于一方接收能力不足而导致的数据溢出或丢失。 

2.4.3 长度(Len)
  •         在第一次握手中,客户端发起连接请求,发送了一个SYN包,并设置了序列号为0(Seq=0)。这意味着客户端希望从0开始发送数据。由于这是一个SYN包,它并没有携带任何应用层数据,因此Len=0,表明该数据段中没有实际的数据负载。
  •         第二次握手中,服务器回应了一个SYN-ACK包,它的序列号也是0(Seq=0),表示服务器愿意从0开始接收数据,并确认收到了客户端的SYN包,期望接下来接收的序列号为1(Ack=1)。同样地,由于这是一个SYN-ACK包,它也没有携带任何应用层数据,所以Len=0,表示该数据段中也没有实际的数据负载。
  •         最后一次握手中,客户端发送了一个ACK包来确认收到了服务器的SYN-ACK,并且确认号为1(Ack=1),表示客户端已经收到了服务器序列号为0的数据,准备接收序列号为1之后的数据。这个ACK包也没有携带任何应用层数据,因此Len=0,再次表明该数据段中没有实际的数据负载。

        在TCP三次握手过程中,Len字段均为0,这是因为SYN、SYN-ACK和ACK数据段的主要功能是同步序列号、确认号以及连接参数,而不是传输用户数据。因此,在这三个阶段中,Len=0表明这些数据段仅包含控制信息,而没有实际的数据负载。这样的设计使得TCP能够在正式的数据传输之前完成必要的连接建立和参数协商工作,确保后续的数据传输能够顺利进行。 

三、TCP 数据交换

四、TCP 终止连接(四次挥手) 

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

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

相关文章

宠物空气净化器有用吗?为什么养宠家庭要买宠物空气净化器?

身为一个鼻炎患者,却喜欢猫咪,所以毅然决然的养了两只宠物,而且还是长毛猫,不要问为什么鼻炎还买两只猫咪,因为怕一只猫咪孤单,所以养了两只。对于很多人来说,猫咪就像焦虑不安时的精神搭子&…

如何让私域服务赢得用户的心?

私域流量的概念在当今的商业环境中已经变得极为重要,许多品牌和企业都投入大量资源尝试通过各种策略吸引并保留用户。然而,单纯的流量积累并不足以确保商业成功。当面对用户的沉默、缺乏活跃度以及无法变现的困境时,我们必须重新审视私域流量…

语音控制开关的语音识别ic芯片方案

语音控制开关是一种基于语音识别技术的设备,它通过内置的语音识别芯片,将用户的语音指令转化为电信号,从而实现对设备的控制。例如在智能家居设备上的应用,通常需要连接到家庭的Wi-Fi网络上,以便与智能手机或智能音箱等…

Java之初始泛型

1 包装类 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。 1.1 基本数据类型和对应的包装类 基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoub…

FaceFormer嘴形同步论文复现

一、项目地址 https://github.com/EvelynFan/FaceFormer 二、复现过程 1、项目环境 系统:Ubuntu 18.04.1 python版本:Python 3.7 使用conda创建一个虚拟环境,安装requirements.txt中所需要的库 2、安装ffmpeg 教程网址:http…

8个Python编程进阶常用技巧!

介绍 Python 炫酷功能(例如,变量解包,偏函数,枚举可迭代对象等)的文章层出不穷。但是还有很多 Python 的编程小技巧鲜被提及。因此,本文会试着介绍一些其它文章没有提到的小技巧,这些小技巧也是…

Selenium+Python自动化测试环境搭建

1. 什么是Selenium? Selenium主要用于web应用程序的自动化测试,但并不局限于此,它还支持所有基于web的管理任务自动化。 2、selenium 自动化流程如下: 自动化程序调用Selenium 客户端库函数(比如点击按钮元素&#xff…

【计算机组成原理】六、总线:3.操作和定时

5.操作和定时 文章目录 5.操作和定时5.1总线传输的四个阶段5.2总线定时5.2.1同步通信5.2.2异步通信5.2.3半同步通信5.2.4分离式通信 2.3按时序控制方式 同步总线异步总线 5.1总线传输的四个阶段 总线周期: 申请分配阶段:由需要使用总线的主模块&#…

计算机组成原理:实验一运算器组成实验

一、实验目的 1.掌握算术逻辑运算加、减、乘、与的工作原理。 2.熟悉简单运算器的数据传送通路。 3.验证实验台运算器的8位加、减、与、直通功能。 4.验证实验台的4位乘4位功能。 5.按给定数据,完成几种指定的算术和逻辑运算。 二、实验电路 图1.1 运算器数据…

约瑟夫环和一元多项式

约瑟夫环 一、问题描述 假设有 n 个人围成一圈,从第一个人开始报数,报数到 m 的人将被淘汰出圈,然后从下一个人开始继续从 1 报数,如此重复,直到最后只剩下一个人。求最后剩下的这个人的编号。 二、问题分析 可…

DDR3详解

1.DDR3简介 DDR3 SDRAM,全称第三代双倍速率同步动态随机存取存储器,简称 DDR3,双倍速率(double-data-rate),是指时钟的上升沿和下降沿都发生数据传输;同步,是指DDR3数据的读取写入是…

使用 nuxi build-module 命令构建 Nuxt 模块

title: 使用 nuxi build-module 命令构建 Nuxt 模块 date: 2024/8/31 updated: 2024/8/31 author: cmdragon excerpt: nuxi build-module 命令是构建 Nuxt 模块的核心工具,它将你的模块打包成适合生产环境的格式。通过使用 --stub 选项,你可以在开发过程中加快模块构建速度…

linux Vim的安装和基本使用

Vim 什么是 Vim Vim是一个高度可定制的文本编辑器,源自Unix系统的vi编辑器。它被广泛用于类Unix系统中,包括Linux、Mac OS和Windows平台。Vim特别受到程序员的青睐,因为它提供了丰富的编程功能,如代码补全、编译及错误跳转等。这…

Kubernetes 上安装 Jenkins

安装 Helm curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash添加 Jenkins Helm 仓库 首先添加 Jenkins Helm 仓库 helm repo add jenkins https://charts.jenkins.io helm repo update安装 Jenkins 使用 Helm 安装 Jenkins 的最新版本&…

产品经理角度分析:朋友圈点赞与评论仅共同好友可见

你有没有在刷朋友圈时,看到某位朋友发了条状态,下面一堆点赞和评论,然后他自己来个“统一回复下,感谢大家”? 这种现象就像是在朋友圈里开了个小型新闻发布会,大家在台下疯狂举手,结果发言人最后…

ip地址变化是什么意思?手机地址ip一直变化怎么办

IP地址作为互联网设备的唯一标识,‌其稳定性对于网络连接至关重要。‌然而,‌手机IP地址频繁变动可能带来一系列问题。‌本文将深入探讨IP地址变化的含义、‌IP地址频繁变动的原因,‌以及提供手机地址IP一直变化的有效应对策略。‌ 一、IP地址…

使用pgdump、pgrestore迁移数据表到docker部署的postgis

将本地数据同步到内网服务器,使用的postgis,表含空间字段 备份 本地使用pgadmin 4进行备份,pgrestore的命令参数找起来麻烦,这个可以界面操作,比较方便 说明 说明的截图来自pgadmin,点击这个打开 …

GitLab私有代码仓库搭建与使用

文章目录 一、安装GitLab1、下载安装2、修改配置3、启动gitlab4、登录 二、使用1、ssh-key 参考资料 一、安装GitLab 1、下载安装 gitlab-ce的rpm包清华源地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/?CN&OD 本次使用gitlab-ce-17.1.1-c…

论文精读:JACS —— Sb2Si2Te6与Sc2Si2Te6热电性能

摘要节选: 本文以层状Sb2Si2Te6和Sc2Si2Te6为模型体系,采用密度泛函理论结合半经典玻尔兹曼输运理论,全面研究和比较了它们的热电性能。 由于较低的散射率和更明显的带色散,Sb2Si2Te6与Sc2Si2Te6相比具有优越的导电性。 在将导带轨道特性从…

【微信小程序】SpringBoot集成微信小程序(多小程序集成)

SpringBoot集成微信小程序 前言一、前置工作1、获取appId和appSecret核心参数 二、SpringBoot集成微信小程序1、引入pom依赖2、yml配置3、java代码文件3.1、Properties 配置类3.2 Configuration 服务类 4、使用示例4.1、获取登录后的session信息:openId4.2、获取当前…