基于 Wireshark 分析 TCP 协议

一、TCP 协议

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议。它在网络通信中扮演着重要的角色,用于保证数据的可靠传输。

TCP协议的特点如下:
1. 面向连接:在通信前需要先建立连接,通信结束后再关闭连接。连接的建立和关闭过程需要进行三次握手和四次挥手。
2. 可靠性:TCP提供可靠的数据传输,通过序列号、确认应答、超时重传、流量控制和拥塞控制等机制来确保数据的正确性和完整性。
3. 字节流传输:TCP将数据流划分为以字节为单位的数据段进行传输,保证了数据的顺序性。
4. 面向字节流:TCP把应用程序交给它的数据看成是一连串无结构的字节流,不关心具体的数据内容和格式。
5. 流量控制:TCP通过滑动窗口机制来控制发送方发送数据的速率,以防止接收方来不及处理过多的数据。
6. 拥塞控制:TCP通过拥塞窗口和慢启动等机制来控制网络拥塞,避免网络过载。
7. 支持全双工通信:TCP连接是全双工的,双方可以同时发送和接收数据。

TCP协议的工作流程如下:
1. 建立连接:客户端向服务器发送连接请求(SYN),服务器回复确认(SYN+ACK),客户端再回复确认(ACK),建立连接。
2. 数据传输:建立连接后,双方可以通过TCP连接进行数据传输。发送方将数据划分为适当大小的数据段,并添加序列号,接收方收到数据后进行确认应答。
3. 连接关闭:当数据传输完成时,任意一方可以发送连接关闭请求(FIN),对方回复确认,然后发送自己的连接关闭请求,对方再回复确认,完成连接关闭。

总结:TCP协议通过面向连接、可靠的数据传输、流量控制和拥塞控制等机制,保证了数据在网络中的可靠传输。它是应用层协议中最常用的一种,广泛应用于互联网中。

二、TCP 报头

以下是TCP报头的详细格式,按照表格形式列出:

字段名称长度(位)描述
源端口号16指示发送端口号
目的端口号16指示接收端口号
序列号32用于对数据进行排序和重组
确认号32用于确认接收到的数据
数据偏移4指示TCP报头的长度
保留6保留字段,暂未使用
控制位6用于控制TCP的各种功能,如SYN、ACK、FIN等
窗口大小16指示发送方的接收窗口大小
校验和16用于检验TCP报头和数据的完整性
紧急指针16指示紧急数据的位置
选项可变可用于在TCP报头中添加一些可选的功能
填充可变用于填充TCP报头,使其长度为32位的整数倍

三、TCP 端口

TCP端口是TCP协议中用于标识不同应用程序或服务的端口号。在TCP/IP协议栈中,每个主机都有65535个端口号可用,它们被分为三个范围:

1. 知名端口(Well-known Ports):范围从0到1023,用于标识一些常见的服务和应用程序。例如,HTTP使用端口号80,HTTPS使用端口号443,FTP使用端口号21等。这些端口号在大多数操作系统中都有预定义的用途。

2. 注册端口(Registered Ports):范围从1024到49151,用于用户注册的应用程序或服务。这些端口号可以被开发人员用于自定义应用程序或服务。

3. 动态/私有端口(Dynamic/Private Ports):范围从49152到65535,用于临时分配给客户端应用程序。当客户端应用程序与服务器建立TCP连接时,操作系统会自动分配一个可用的动态端口。

TCP端口号是一个16位的无符号整数(0到65535),客户端应用程序使用源端口号,服务器应用程序使用目的端口号。通过源和目的端口号的组合,TCP协议可以将接收到的数据包传递给正确的应用程序或服务。

在通信过程中,当客户端向服务器发起连接请求时,客户端应用程序会选择一个空闲的源端口号,并将其包含在请求中。服务器收到连接请求后,会将目的端口号设置为客户端发送的源端口号,以便建立双向通信。

TCP端口号的分配需要遵循相关的规范和标准,以确保端口号的唯一性和正确性。

所有基于 TCP 的通信都是以相同的方式工作:选择一个随机的源端口与一个已知的目的端口通信 

四、TCP 三次握手

TCP三次握手是建立TCP连接的过程,用于确保双方能够正常通信。以下是TCP三次握手的详细步骤:

   Client                    Server
     |                         |
     |---- SYN (X) ---------->|
     |                         |
     |<--- SYN-ACK (Y, X+1) ---|
     |                         |
     |---- ACK (Y+1) --------->|
     |                         |
  1. 第一次握手 (SYN):

    • 客户端发送一个 SYN (同步) 报文段to服务器,报文段中指定了客户端的初始序号 X。
    • 客户端进入 SYN_SENT 状态,等待服务器确认。
  2. 第二次握手 (SYN-ACK):

    • 服务器收到客户端的 SYN 报文段后,如果同意连接,就会发送一个 SYN-ACK 报文段,
    • 报文段中包含了服务器的初始序号 Y,同时将客户端的序号 X+1 放在确认号(ACK)字段中。
    • 服务器进入 SYN_RCVD 状态。
  3. 第三次握手 (ACK):

    • 客户端收到服务器的 SYN-ACK 报文段后,再发送一个确认报文段(ACK),
    • 报文段中把服务器的序号 Y+1 放在确认号(ACK)字段中。
    • 此时,TCP 连接建立,客户端进入 ESTABLISHED 状态,服务器也进入 ESTABLISHED 状态。

TCP三次握手过程的目的是确保双方都能收到对方的请求和确认,并建立起可靠的双向通信。通过握手过程,双方交换了初始序列号和窗口大小等重要信息,以便后续的数据传输能够正确进行。

值得注意的是,TCP三次握手是双向的,即客户端向服务器发起握手请求,服务器响应后再向客户端发送确认,确保双方都能同步建立连接。这样的握手过程可以防止已失效的连接请求报文段突然又传到了服务器,导致服务器错误地打开连接。

初始 SYN 数据包

SYN/ACK 响应

最后的 ACK 包

五、TCP 连接断开

TCP 连接的断开是一个四次挥手的过程,用于正常关闭连接。

 客户端                 服务器
   |                      |
   |---- SYN 报文 -------->|
   |<--- SYN-ACK 报文 -----|
   |---- ACK 报文 -------->|
   |          |           |
   |---- 数据报文 -------->|
   |<---- ACK 报文 --------|
   |          |           |
   |---- FIN 报文 -------->|
   |<---- ACK 报文 --------|
   |<---- FIN 报文 --------|
   |---- ACK 报文 -------->|
   |          |           |
  1. 客户端发起连接请求:

    • 客户端选择一个随机的源端口号(通常为大于 1024 的数字)。
    • 客户端向服务器的目标端口号发送一个 SYN 报文,表示请求建立连接。
  2. 服务器响应连接请求:

    • 服务器接收到客户端的 SYN 报文后,会分配一个端口号来作为此次连接的目标端口。
    • 服务器发送一个 SYN-ACK 报文,表示接受了客户端的连接请求。
  3. 客户端确认连接建立:

    • 客户端收到服务器的 SYN-ACK 报文后,会发送一个 ACK 报文,表示确认连接建立。
  4. 数据传输:

    • 在连接建立后,客户端和服务器就可以开始传输数据了。
    • 数据传输过程中,双方会不断地发送 ACK 报文,确认对方发送的数据已经正确接收。
  5. 连接释放:

    • 当通信结束时,任意一方都可以发起连接释放请求。
    • 通常是客户端先发送 FIN 报文,表示自己已经没有数据要发送了。
    • 服务器收到 FIN 报文后,会发送 ACK 报文以确认,然后再发送自己的 FIN 报文。
    • 客户端收到服务器的 FIN 报文后,会发送 ACK 报文以确认,至此连接就释放完毕了。

六、TCP 重置

TCP重置(TCP RST)是一种TCP协议中的控制消息,用于在通信过程中快速终止连接或重置连接状态。TCP重置消息可以由发送方或接收方发送,用于指示对方立即关闭连接。

TCP重置消息的常见用途包括以下几种情况:

1. 异常情况下的连接终止:当通信中发生了无法恢复的错误或异常时,TCP重置消息可以立即终止连接,避免继续传输数据。

2. 拒绝未建立的连接:当接收方收到一个未建立连接的TCP数据包时,可以发送TCP重置消息来拒绝该连接请求。

3. 处理网络拥塞:在网络拥塞情况下,TCP重置消息可以用于快速关闭连接,以减轻网络负载和恢复正常通信。

TCP重置消息的特点如下:

- TCP重置消息是一个独立的TCP数据包,它不承载任何应用数据。
- TCP重置消息中的标志位被设置为RST。
- TCP重置消息可以在连接建立前或连接建立后发送。
- TCP重置消息会立即中断连接,终止数据传输。
- TCP重置消息不需要等待对方的确认,可以单方面发送。

需要注意的是,TCP重置消息的使用应谨慎,不当的使用可能导致连接中断或通信中断。在正常情况下,应该使用TCP的正常关闭过程来终止连接,以确保数据的完整性和可靠性。

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

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

相关文章

阿赵UE引擎C++编程学习笔记——GameMode和生命周期

大家好&#xff0c;我是阿赵。   之前在介绍HelloWorld的时候&#xff0c;我们很创建了一个MyGameModeBase的c类&#xff0c;然后就可以在BeginPlay函数里面写打印的HelloWorld。这一篇主要是说一下&#xff0c;GameMode究竟是一个什么东西&#xff0c;然后UE里面的生命周期是…

瑞_Windows环境下使用bat重启jar包等服务

文章目录 命令示例重启ray-project.jar重启redis服务 &#x1f64a; 前言&#xff1a;经验分享——Windows环境下使用.bat批处理文件重启 jar 包等服务。在学习或者工作日常中&#xff0c;有时候会需要在 Windows 系统环境下去启动 jar 包或其它服务&#xff0c;此时如果使用关…

RSC英国皇家化学学会文献查找下载

英国皇家化学学会(Royal Society of Chemistry&#xff0c;简称RSC)是以促进全球化学领域研究发展与传播为宗旨的国际权威学术机构&#xff0c;是化学信息的一个重要宣传机关和出版商。RSC出版的期刊是化学领域的核心期刊&#xff0c;大部分被SCI和MEDLINE收录&#xff0c;如An…

详解 Scala 的变量、标识符、数据类型

一、注释 Scala 注释与 Java 一致 // 单行注释/** 多行注释*//*** 文档注释*/二、变量与常量 1. 语法 // 变量&#xff0c;类型可以省略 var varName:varClass value // 常量&#xff0c;类型可以省略 val valName:valClass value2. 案例 // 使用 var/val 才会在类中声明属…

系统架构设计师【第1章】: 绪论 (核心总结)

文章目录 1.1 系统架构概述1.1.1 系统架构的定义及发展历程1.1.2 软件架构的常用分类及建模方法1.1.3 软件架构的应用场景1.1.4 软件架构的发展未来 1.2 系统架构设计师概述1.2.1 架构设计师的定义、职责和任务1.2.2 架构设计师应具备的专业素质1.2.3 架构设计师的知识…

自适应星空背景个人导航单页(附带源码)

自适应星空背景个人导航单页 效果图部分源码领取源码下期更新预报 效果图 部分源码 function Star(id, x, y) {this.id id;this.x x;this.y y;this.r Math.floor(Math.random() * 2) 1;var alpha (Math.floor(Math.random() * 10) 1) / 10 / 2;this.color "rgba(…

pip install pytorch-quantization error

一 报错信息 最近安装pytorch-quantization报错&#xff0c;安装失败报错信息如下&#xff1a; Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com Collecting pytorch-quantizationDownloading pytorch-quantization-2.2.1.tar.gz (6.8 kB)Prepari…

Kali : 安装Google Chrome 浏览器和ChromeDriver

一、安装Google Chrome 浏览器 1、下载Google Chrome 执行如下命令&#xff0c;下载最新版Chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 执行下载截图 2、安装Chrome 使用dpkg安装下载的deb包 sudo dpkg -i google-chrome-st…

美业系统SaaS收银系统源码-顾客在系统付款了但系统未显示怎么办?美业系统实测

美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 活动促销 PC管理后台、手机APP、iPad APP、微信小程序 1. 提供门店名称、付款凭证和会员手机号 2. 到订单明细查询&#xff0c; 按门店名称和会员手机号查询看是否有相…

IDEA社区版创建并运行maven管理的web项目的基本流程

一、前言 注意&#xff0c;这是社区版&#xff0c;旗舰版可以绕路。 二、过程 1、下载安装社区版 2、安装jdk&#xff0c;tomcat&#xff0c;maven 3、创建并启动项目 注意选择的骨架是maven-archetype-webapp&#xff0c;然后next&#xff0c;设置项目名&#xff0c;存放…

家政预约小程序07服务分类展示

目录 1 创建服务分类页面2 侧边栏选项卡配置3 配置数据列表4 从首页跳转到分类页总结 上一篇我们开发了首页的服务展示功能&#xff0c;本篇我们讲解一下服务分类功能的开发。在小程序中通常在底部导航栏有一个菜单可以展示所有服务&#xff0c;侧边选项卡可以展示分类信息&…

Android 11 触摸小圆点显示流程

在开发者选项中&#xff0c;打开 “显示点按操作反馈” 开关&#xff0c;当我们在触摸屏幕时&#xff0c;会显示一个小圆点&#xff0c;来分析下小圆点的显示流程。 操作这个开关时&#xff0c;其实就是操作Settings数据库中的 SHOW_TOUCHES //packages\apps\Settings\src\com…

数据大屏vue3+ts+axios+MockJS+dataV+echarts

一、官网/文档 vue3&#xff1a;https://cn.vuejs.org/api/TypeScript&#xff1a;https://www.tslang.cn/docs/handbook/basic-types.htmlaxios&#xff1a;http://www.axios-js.com/zh-cn/docs/MockJS&#xff1a;http://mockjs.com/dataV&#xff1a;http://datav.jiamingh…

马斯克xAI融资60亿美元,宣布打造世界第一超算中心,10万张H100GPU

昨天&#xff0c;埃隆马斯克的xAI初创公司宣布获得60亿美元的巨额融资&#xff0c;主要用于打造一台巨大的超级计算机&#xff0c;马斯克称之为“超级计算工厂”。 从创立OpenAI到如今的xAI&#xff0c;技术和算力的发展历经了几个时代&#xff0c;但似乎马斯克的吸金能力一直…

CISCN --EzHeap

当时有点着急了&#xff0c;这题没写出来&#xff0c;结束后在ctfshow上做了一下。 使用的方法是environ泄露栈地址&#xff0c;然后在栈上构造orw的rop链。 以下是过程&#xff1a; 只能orw。 堆体开沙盒模式会在heap和bin一开始构造很多垃圾堆。所以分配和free的时候要注意…

nuxt3+Element Plus项目搭建过程记录

背景 本文只记录项目搭建过程中遇到的一些问题和关键点&#xff0c;nuxt框架的说明和API请参照官网学习 官网&#xff1a;https://nuxt.com/docs/getting-started/introduction 1. 初始化项目 指令如下: npx nuxilatest init <project-name>我在安装过程中出现报错&a…

玻璃加工生产线液压比例控制器

玻璃加工生产线广泛应用于自动化中空玻璃的生产、清洗、磨边、上片、除膜、打胶等各个环节&#xff0c;体现了高度的专业化和自动化水平。在玻璃制造过程中&#xff0c;液压升降机用于玻璃板材的升降和定位&#xff0c;确保玻璃在加工过程中的稳定性。液压系统提供的强大而平稳…

2024-05-28 服务器开发-不同vs版本的std::string的访问出错问题-记录

摘要: 有一个dll库是使用vs2010编译的, 使用这个dll动态库的工程是vs2019. 这个dll动态库返回一个结构体&#xff0c;其中有个成员使用了std::string。但是遇到了std::string的成员显示被赋值为NULL的情况。 本文对进行分析, 重点在于追踪问题的思路。 问题描述: dll使用vs20…

盐城市大数据集团携手百望云 以MaaS推进数字经济跃迁

随着ChatGPT的爆火&#xff0c;大模型、人工智能、大数据等技术&#xff0c;被快速推向市场最前沿。如何通过创新技术提升企业的数字化能力&#xff0c;助力数据要素资产沉淀&#xff0c;推动企业及所在行业、区域实现数智化转型&#xff0c;是大家关注的核心问题。 “携手共建…

电商API接口助力直播带货选品||助力电商平台搭建选品

如今&#xff0c;直播带货如火如荼。直播带货的核心是卖货、品牌盈利&#xff0c;那想要带货效果更好&#xff0c;选品及定价是最关键的环节。 事实上&#xff0c;品牌企业可以直接使用API接口工具来辅助自身选品及定价&#xff0c;这主要是因为比价工具在直播带货选品环节能起…