TCP协议数据传输过程及报文分析

目录

TCP数据的传输过程

建立连接(三次握手)

第一次握手

第二次握手

第三次握手

总结

数据传输

断开连接(四次挥手)

第一次挥手

第二次挥手

第三次挥手

第四次挥手

总结

最后 


TCP数据的传输过程

        TCP(Transmission Control Protocol,传输控制协议)是专门为了在不可靠的互联网络中提供一个可靠的端到端的通信而设计的,是TCP/IP协议体系中运输层的重要协议。TCP为应用层提供面向连接的、可的数据传输服务。发送方应用进程将数据交给TCP,TCP保证将这些数据有序地、无差错地、完整地送达目的应用进程。TCP为应用进程构建了一个可靠的比特流管道,发送方应用进程的报文从一端流人,无差错地、完整地从另一端流出,交给接收方应用进程。

        使用TCP进行数据传输包括三个阶段,依次分别是:建立连接(三次握手)、数据传输、断开连接(四次挥手)。

  • 建立连接:目的是使通信双方在开始传输数据前建立联系,使双方都确定对方愿意与之通信;同时在建立连接的过程中还要相互传递和协商一些必要的参数(如发送字节的起始编号、窗口大小等),为后面的数据传输打下基础。
  • 数据传输:连接建立后,开始传输数据,TCP连接的数据传输是双向的,在数据传输阶段TCP要纠正数据传输中的丢失、错误、乱序等问题,并要进行流量控制和拥塞控制。
  • 关闭连接:在两个通信的应用进程之间的数据传输完毕后,就要关闭它们之间的连接,释放资源。

        整个TCP数据传输如下图所示:

建立连接(三次握手)

        为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话(发送三个数据包),也叫TCP三次握手,进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。如下图:

第一次握手

        最开始的时候客户端和服务器都是处于CLOSED关闭状态。主动打开连接的为客户端,被动打开连接的是服务器。(所以源端口是我们的客户端:56069,目的端口是服务端:8080)

        TCP客户端进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的标志位SYN置1,同时选择一个初始序列号 seq=x(这里seq为0) ,此时,TCP客户端进程进入了 SYN-SENT 同步已发送状态,并正在等待接受方的确认(ACK)以及相应的SYN-ACK回应。

第二次握手

        TCP服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文。确认报文中标志位ACK置1,SYN置1,确认号是ack number=x+1(这里ack number为1),同时也要为自己初始化一个序列号 seq=y(这里为0),此时,TCP服务器进程收到客户端的SYN(同步)请求后,会回复一个SYN-ACK(同步-应答)报文,并进入SYN-RCVD状态。这个状态表示接受方已经收到了发起方的SYN请求,并且正在等待发起方确认(ACK)以完成连接的建立。

第三次握手

        TCP客户端收到确认后,还要向服务器给出确认。确认报文的ACK置1,ack number=y+1(这里ack number为1),自己的序列号seq=x+1(这里seq为1),此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态,触发三次握手。

        当TCP连接的发起方收到接受方的SYN-ACK(同步-应答)报文,并发送了确认(ACK)报文后,连接状态就会从SYN-SENT转变为ESTABLISHED。同样地,当接受方收到发起方的ACK报文后,其连接状态也会从SYN-RCVD转变为ESTABLISHED。所以在第三次握手报文成功发出并收到后,客户端和服务端就成功建立了连接。

总结

  • 第一次握手:客户端向服务器发送一个SYN包,并进入SYN_SEND状态,等待服务器确认。这个SYN包中包含了客户端的初始序列号,用于后续的数据传输。
  • 第二次握手:服务器收到客户端的SYN包后,会发送一个SYN+ACK包给客户端,确认客户端的SYN包(通过ACK=客户端初始序列号+1实现),同时服务器也进入SYN_RECV状态,并发送自己的SYN包,其中包含了服务器的初始序列号。
  • 第三次握手:客户端收到服务器的SYN+ACK包后,会向服务器发送一个ACK包,用来确认收到服务器的SYN包(通过ACK=服务器初始序列号+1实现)。当这个ACK包发送完毕,客户端和服务器都进入ESTABLISHED状态,表示TCP连接已经成功建立。

        所以,在整个握手过程中,双方通过交换SYN和ACK包,确认了彼此的初始序列号,以及双方都能够正常接收和发送数据。这就为后续的数据传输建立了一个可靠的通道。需要注意的是,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。

数据传输

  • 在连接建立之后,客户端和服务器开始进行数据传输。
  • 数据在应用层被拆分成数据段,然后在传输层被进一步拆分成TCP报文段(也称为数据包)。每个TCP报文段都包含源端口号、目标端口号、序列号、确认号、标志位等信息。
  • 客户端发送TCP报文段给服务器,并等待服务器的确认。服务器接收到报文段后,会进行校验和验证,确保数据的完整性,然后发送确认报文段给客户端。
  • 如果客户端在规定时间内未收到确认报文段,会进行重传操作,直到数据被成功接收

断开连接(四次挥手)

        数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。在这个过程中,每个方向都需要进行关闭操作,因此称为“四次挥手”。通过这个过程,TCP协议能够确保双方都能够优雅地关闭连接,避免数据丢失和连接残留等问题。

第一次挥手

        第一次挥手(即第一个FIN报文的发送)通常是由想要关闭连接的一方发起的,这可以是客户端,也可以是服务端。

        客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。(注意:上面的报文,首先发出断开连接的是服务端,并非是客户端。)

第二次挥手

        服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态。(注意:这里首先发出断开连接申请的是服务端,所以这里发出第二次挥手的是客户端)

第三次挥手

        客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。(注意:这里首先发出断开连接申请的是服务端,所以这里发出第三次挥手的是客户端)

第四次挥手

        客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,至此四次挥手完成。

总结

  1. 当一方(通常是客户端)决定结束连接时,它会发送一个FIN包给另一方(通常是服务器),表示自己没有数据需要发送了。
  2. 服务器收到FIN包后会发送一个ACK包进行确认,并进入CLOSE_WAIT状态,表示收到客户端的关闭请求。
  3. 服务器也会发送一个FIN包给客户端,表示它也没有数据需要发送了,也准备关闭连接。
  4. 客户端收到服务器的FIN包后,会发送一个ACK包进行确认,确认收到服务器的关闭请求然后进入TIME_WAIT状态,等待一段时间后最终进入CLOSED状态,表示连接已经完全关闭。

最后 

        三次握手是TCP协议建立连接时,为了保证连接的可靠性而采取的一种通信机制。这个机制涉及到客户端和服务器之间的三次交互。

        通过这三次握手,客户端和服务器之间可以确认双方的初始序列号,以及对方能够正常接收和发送数据,从而建立起一个可靠的连接。

        而四次挥手是TCP协议在关闭连接时,为了保证数据传输的完整性和连接的可靠性而采取的一种通信机制。这个机制涉及到客户端和服务器之间的四次交互。通过这四次挥手,客户端和服务器之间可以确保双方都能够正常关闭连接,并且数据传输的完整性得到了保证。

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

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

相关文章

SL3043耐压120V降压恒压 降48V 降24V 降12V 降5V 大电流10V芯片

SL3043是一款外驱MOSFET管可设定输出电流的降压型开关稳压器,具有以下特点: 1. 宽工作电压范围:SL3043可以在10V至120V的宽输入电压范围内工作,这使得它适用于多种不同的电源环境。 2. 大输出电流:该芯片能够提供最大…

五年Python从业者,谈谈Python的一些优缺点

前言 Python它是作为年轻的血液,融入到编程语言这个大家庭里面,作为具有年轻人的蓬勃朝气的python,那它同时就会有年轻人的桀骜焦躁。 今天就来谈谈Python的一些优缺点。 先从优点说起,我是把它分为5部分。 1.简单————Pyth…

Win11和WinRAR取消折叠菜单恢复经典菜单

这里写目录标题 前言1. Win11恢复经典右键菜单1.1 修改前1.2 恢复成经典右键菜单1.3 修改后1.4 想恢复怎么办? 2. WinRAR取消折叠菜单恢复经典菜单2.1 修改前2.2 修改恢复为经典菜单2.3 修改后2.4 想恢复怎么办? 前言 最近换回了Windows电脑&#xff0c…

大模型微调之 使用 LLaMA-Factory 微调 Llama3

大模型微调之 使用 LLaMA-Factory 微调 Llama3 使用 LLaMA Factory 微调 Llama-3 中文对话模型 安装 LLaMA Factory 依赖 %cd /content/ %rm -rf LLaMA-Factory !git clone https://github.com/hiyouga/LLaMA-Factory.git %cd LLaMA-Factory %ls !pip install "unsloth…

在Spring Boot应用中实现阿里云短信功能的整合

1.程序员必备程序网站 天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 2.导入坐标 <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.5.0</version></dependency><…

Redis面试题二(数据存储)

目录 1.redis 的数据过期策略 1. 惰性删除&#xff08;Lazy Expiration&#xff09; 2. 定期删除&#xff08;Periodic Expiration&#xff09; 3. 定时删除&#xff08;Timing-Based Expiration&#xff09; 实际应用中的组合策略 2.redis 有哪些内存淘汰机制 volatile&…

GhostNetV3:探索紧凑模型的训练策略

文章目录 摘要1、引言2、相关工作2.1、紧凑模型2.2、训练CNN的技巧包 3、预备知识4、训练策略4.1、重参数化4.2、知识蒸馏4.3、学习调度4.4、数据增强 5、实验结果5.1、重参数化5.2、知识蒸馏5.3、学习策略5.4、数据增强5.5、与其他紧凑模型的比较5.6、扩展到目标检测 6、结论 …

redis和mysql数据一致性方案

请求 A 更新数据 请求B读数据 在高并发情况下&#xff0c;A、B请求过程步骤相互穿插&#xff0c;就会出现图中的问题。 期望redis 的数据是11&#xff0c;最后变成了10 场景&#xff1a;先删除Redis&#xff0c;再更新 MySQL&#xff0c;不主动更新Redis&#xff0c;访问redi…

#ESP32S3R8N8建立工程(VSCODE)

1.参考文档 【立创ESP32S3R8N8】IDF入门手册 - 飞书云文档 (feishu.cn)https://lceda001.feishu.cn/wiki/GOIlwwfbIi1SC3k8594cDeFVn8g 2.建立工程 3.运行效果

2024年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲…

No system certificates available. Try installing ca-certificates.

一、错误重现 Certificate verification failed: The certificate is NOT trusted. No system certificates available. Try installing ca-certificates. 具体如图 系统环境是ubuntu:22.04 ARM架构 二、解决方法 1、先不要更换镜像源 直接设置 apt update apt -y instal…

创新实训2024.04.24日志:RAG技术初探

1. 什么是RAG技术 RAG is short for Retrieval Augmented Generation。结合了检索模型和生成模型的能力&#xff0c;以提高文本生成任务的性能。具体来说&#xff0c;RAG技术允许大型语言模型&#xff08;Large Language Model, LLM&#xff09;在生成回答时&#xff0c;不仅依…

13. Spring AOP(一)思想及使用

1. 什么是Spring AOP AOP的全称是Aspect Oriented Programming&#xff0c;也就是面向切面编程&#xff0c;是一种思想。它是针对OOP(面向对象编程)的一种补充&#xff0c;是对某一类事情的集中处理。比如一个博客网站的登陆验证功能&#xff0c;在用户进行新增、编辑、删除博…

算法设计优化——有序向量二分查找算法与Fibonacci查找算法

文章目录 0.概述1.语义定义2. 二分查找&#xff08;版本A&#xff09;2.1 原理2.2 实现2.3 复杂度2.4 查找长度 3.Fibonacci查找3.1 改进思路3.2 黄金分割3.3 实现3.4 复杂度分析3.5 平均查找长度 4. 二分查找&#xff08;版本B&#xff09;4.1 改进思路4.2 实现4.3 性能4.4 进…

YOLOv8常见水果识别检测系统(yolov8模型,从图像、视频和摄像头三种路径识别检测)

1.效果视频&#xff08;常见水果识别&#xff08;yolov8模型&#xff0c;从图像、视频和摄像头三种路径识别检测&#xff09;_哔哩哔哩_bilibili&#xff09; 资源包含可视化的水果识别检测系统&#xff0c;可识别图片和视频当中出现的六类常见的水果&#xff0c;包括&#xf…

【redis】非关系型数据库——Redis介绍与安装(windows环境)

目录 数据库架构的演化单体架构缓存(Memcached)MySQL集群缓存(Memcached可以)MySQL集群垂直拆分&#xff08;主从复制&#xff0c;读写分离&#xff09;缓存(Redis)MySQL集群垂直拆分分库分表 NoSQLNoSQL产生的背景性能需求MySQL的扩展性瓶颈方面什么是NoSQLNoSQL的特点主流的N…

下级平台级联EasyCVR视频汇聚安防监控平台后,设备显示层级并存在重复的原因排查和解决

视频汇聚平台/视频监控系统/国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时…

C语言进阶|单链表的实现

✈链表的概念和结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表 中的指针链接次序实现的。 链表的结构跟火车车厢相似&#xff0c;淡季时车次的车厢会相应减少&#xff0c;旺季时车次的车厢会额外增加几节。…

BSV区块链协会上线首个版本的ARC交易处理器

​​发表时间&#xff1a;2024年3月28日 BSV区块链协会近期上线了首个版本的ARC交易处理器。ARC是一项区块链交易处理服务&#xff0c;能在通过P2P网络广播交易之前验证并存储相关的交易。一旦新区块被挖出&#xff0c;一条与该交易相关的Merkle路径将被发回给交易发起者作为确…

长效静态代理IP如何改变你的SEO和网络营销策略?

长效静态代理IP为SEO和网络营销专家提供了一个强大的工具&#xff0c;通过这种技术&#xff0c;可以突破传统的限制&#xff0c;以全新的视角和方法优化其在线策略。这不仅增强了企业的市场竞争力&#xff0c;也为实现更高效、更精准的营销目标提供了可能。 一、长效静态代理IP…