TCP三次握手详解

目录

什么是TCP

TCP头格式组成

三次握手

第一次握手

第二次握手

第三次握手

三次握手的好处

为什么需要三次握手?


什么是TCP

传输控制协议(TCP)是Internet一个重要的传输层协议。TCP提供面向连接可靠有序字节流传输服务。

  • 面向连接: 应用程序在使用TCP之前,必须先建立TCP连接,而且是一对一的连接。
  • 可靠的:无论网络链路中出现了怎样的变化,TCP都可以保证一个豹纹一定能到达接收端。
  • 有序:TCP报文是有序的,当前一个TCP报文没有接收到的时候,即使接收到了后面的TCP报文,也不能人给应用层去处理。
  • 有序的字节流传输:用户消息通过TCP协议传输时,一条消息可能会被操作系统分组成多个TCP报文。

TCP是处于传输层的一个协议。

image.png

TCP头格式组成

image.png

  • 源端口号和目的端口号:代表连接发起方和连接接收方
  • 序号:在建立连接时,由计算机生产的随机数作为初始值,通过SYN包传给接收端主机,每发送一次数据,就累加一次该数据字节数的大小。用来解决网络包乱序问题。
  • 确认序号:指下一次期望收到的数据的序号,发送端收到这个确认应答以后,可以认为在这个序号以前的数据,都已经被正常接收。 用来解决网络丢包的问题
  • 标志位,如上图,一共6个
    • URG
    • ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1
    • PSH
    • RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。
    • SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。
    • FIN:该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段。
  • 数据:连接需要发送的内容

三次握手

image.png

握手之前主动打开连接的客户端结束CLOSED阶段,被动打开的服务器端也结束CLOSED阶段,并进入LISTEN阶段。

随后开始“三次握手”:

第一次握手

  1. 客户端发起连接请求

image.png

  • 客户端想要与服务器建立连接时,会随机选择一个初始序列号(ISN, Initial Sequence Number)
  • 客户端通过发送一个SYN(Synchronize Sequence Numbers)标志位的TCP报文段(Segment)到服务器。 这个报文包含了客户端初始的ISN,也叫client_isn
  • 此时客户端的状态转变为SYN_SENT,表示发送请求,正在等待服务器的确认

第二次握手

  1. 服务器回应客户端请求,并同步序列号

image.png

  • 服务器收到客户端的SYN报文后,确认收到了连接请求
  • 服务器会为这个新的连接分配资源,并为自己也初始化一个序列号ISN,也叫server_isn 
  • 服务器回应客户端,它会返回一个SYN的报文段,并且把ACK(Acknowledgment)标志位也置位,同时在ACK字段填入client_isn + 1作为对客户端SYN的确认
  • 服务器发送的SYN报文中,也包含了自己的ISN(server_isn
  • 此时服务器状态转变为SYN_RECEIVED,表示已经接受了客户端的请求

第三次握手

  1. 客户端确认连接建立

image.png

  •  客户端接收到服务器发来的SYN+ACK报文段后,验证ACK字段中的序列号是否正确(即client_isn + 1
  • 客户端会再次发送一个ACK报文段给服务器,其ACK字段填写server_isn + 1,表示对服务器SYN的确认。
  • 此时客户端状态转变为ESTABLISHED
  • 当服务器收到客户端的ACK报文段后,确认连接建立成功,此时双方都可以开始发送数据。(只有到第三次握手,才能携带数据) 
  • 此时服务器的状态也转变为ESTABLISHED

三次握手的好处

通过这三次握手,双方不仅完成了对彼此接收和发送能力的确认,还同步了双方的初始序列号,这对于后续的数据传输来说至关重要,因为它可以确保数据的有序到达,并能检测到丢失或重复的数据包。同时,三次握手还能防止旧的连接请求被服务器误认为是新的连接请求,提高了连接的可靠性。

为什么需要三次握手?

1. 确认双方意愿与接收能力:

  • 第一次握手:客户端发送一个SYN(同步序列编号)包到服务器,请求建立连接。这个包中包含了客户端选择的一个随机序列号A。
  • 第二次握手:服务器收到SYN后,回复一个SYN+ACK(同步+确认)包,表示同意建立连接。该包中包含确认号(确认收到客户端的序列号A+1)以及服务器自己的随机序列号B。
  • 第三次握手:客户端收到服务器的SYN+ACK后,再发送一个ACK(确认)包,确认号为服务器的序列号B+1。至此,客户端和服务器都确认了对方的接收能力和建立连接的意愿。

2. 防止旧的连接请求报文段被服务端接收并建立连接:

假设采用两次握手,客户端发送SYN请求,服务器回应ACK确认。此时,如果客户端的SYN请求在网络中滞留,之后才到达服务器,而服务器依然会认为这是一个新的连接请求,并发送ACK确认。这样,即使客户端已经关闭了连接,服务器仍可能误以为连接已成功建立,造成资源浪费和数据混乱。三次握手则可以避免这个问题,因为只有当服务器收到客户端对SYN+ACK的确认(第三次握手)时,才会真正建立连接。

3. 同步双方初始序列号:

三次握手过程中的前两次交互完成了双方初始序列号(ISN)的交换。客户端通过SYN包告知服务器自己的ISN(序列号A),服务器通过SYN+ACK包告知客户端自己的ISN(序列号B)。客户端在第三次握手时确认收到服务器的ISN(序列号B+1),这样双方就达成了对初始序列号的共识,为后续数据传输的有序性和可靠性提供了基础。

综上所述,TCP握手之所以不能简化为两次,主要是因为它需要确保双方都具备连接意愿和接收能力、防止因旧连接请求报文段导致的错误连接,以及同步双方初始序列号以保证数据传输的有序性和可靠性。通过三次握手,TCP能够有效地建立起一个可靠、有序的数据传输通道,符合其作为面向连接、提供可靠服务的传输层协议的设计目标。

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

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

相关文章

AI时代的GPU集群网络算力分析

浅谈GPU集群网络、集群规模和集群算力 引言在生成式AI(GenAI)和大模型时代,不仅需要关注单个GPU卡的算力,更要关注GPU集群的总有效算力。单个GPU卡的有效算力可以通过该卡的峰值算力来测算,例如,对于Nvidia…

力扣HOT100 - 98. 验证二叉搜索树

解题思路&#xff1a; class Solution {public boolean isValidBST(TreeNode root) {return recur(root,Long.MIN_VALUE,Long.MAX_VALUE);}public boolean recur(TreeNode root,long lower,long upper){if(rootnull) return true;if(root.val<lower||root.val>upper) re…

Linux系统-服务器硬件及RAID配置

目录 一.服务器 1.服务器与普通计算机的区别 2.功能 3.分类&#xff08;按照产品形态分&#xff09; 4.架构&#xff08;按照指令集类型&#xff09; 5.相关指令 5.1.查看服务器CPU的信息 5.2.查看服务器内存的信息 二.RAID磁盘阵列&#xff08;Redundant Array …

C++ 二叉搜索树

文章目录 二叉搜索树的概念二叉搜索树的性质二叉搜索树的模拟实现封装框架添加操作查找操作删除操作 二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都…

编程基础“四大件”

基础四大件包括&#xff1a;数据结构和算法,计算机网络,操作系统,设计模式 这跟学什么编程语言,后续从事什么编程方向均无关&#xff0c;只要做编程开发&#xff0c;这四个计算机基础就无法避开。可以这么说&#xff0c;这基础四大件真的比编程语言重要&#xff01;&#xff0…

【打工日常】云原生之使用Docker部署开源云笔记工具Leanote

一、Leanote蚂蚁笔记介绍 1.Leanote简介 Leanote 蚂蚁笔记是一款国产开源的私有云笔记工具。它支持普通格式笔记、Markdown语法、专业数学公式编辑、和思维导图&#xff0c;并且支持vim&emacs等编辑模式。 2.Leanote功能 拥有Markdown 语法支持、无干扰写作模式、Vim和Ema…

2024年深圳杯东三省数学建模联赛A题论文首发第二种思路

深圳杯A题论文代码分享资料链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1L2NVgoefSW-yuqZjEB3wcw 提取码&#xff1a;sxjm 问题一 数据转换&#xff1a; 首先&#xff0c;我们将监测站的经纬度坐标转换为基于米的笛卡尔坐标系。这是因为在地面上的大尺度距离…

【设计模式】使用中介者模式优化表单交互

我们想象一下机场的指挥塔&#xff0c;如果没有指挥塔的存在&#xff0c;每一架飞机要和方圆 100 公里内的所有飞机通信&#xff0c;才能确定航线以及飞行状况&#xff0c;后果是不可想象的。现实中的情况是&#xff0c;每架飞机都只需要和指挥塔通信。指挥塔作为调停者&#x…

go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控

有关包的安装 我们要实现go语言对第三方包的操作需要我们下载第三方包go.etcd.io&#xff0c;下载命令&#xff1a; go get go.etcd.io/etcd/client/v3 ectd的put与get操作 相关函数说明与示例 我们想实现对etcd进行简单的操作的步骤还是比较简单的&#xff0c;在我上一篇文…

AI+BI第二弹:QuickBI已支持智能搭建智能问数

缘起&#xff1a;一场主题分享 吴恩达&#xff08;Andrew Ng&#xff09;教授&#xff0c;DeepLearning.AI和AI Fund的创始人&#xff0c;在美国红杉资本于2024年3月26日举办的AI Ascent活动中&#xff0c;谈到了人工智能代理工作流程的未来及其潜力&#xff0c;这些工作流程有…

跑腿业务和支付业务的具体实现流程

校园云项目 跑腿业务的具体业务分析 该流程适用于很多接单相关的业务场景&#xff0c;或多或少都可以从中得到启发&#xff1b; 整个流程描述&#xff1a; 任务发布&#xff1a; 用户在平台上发布任务&#xff0c;描述需要完成的任务内容&#xff0c;包括取件地址、送达地址…

typedef 定义函数指针

typdef int(*FUNC_TYPE)(int,int) FUNC_TYPE p NULL; 定义了一个函数指针 函数指针作为函数的参数的用法demon

HarmonyOS开发案例:【音乐播放器】

介绍 使用ArkTS语言实现了一个简易的音乐播放器应用&#xff0c;主要包含以下功能&#xff1a; 播放应用中的音频资源文件&#xff0c;并可进行上一曲、下一曲、播放、暂停、切换播放模式&#xff08;顺序播放、单曲循环、随机播放&#xff09;等操作。结合后台任务管理模块&…

python实现钉钉通讯录导出Excel表

Python工具开源专栏 Py0004 python实现钉钉通讯录导出Excel表 Python工具开源专栏前言目录结构部分演示完整代码已在GitHub上开源 前言 需求来源于公司&#xff0c;需要将钉钉通讯录以Excel表的形式导出到本地&#xff0c;方便定期备份。导出的Excel需要处理钉钉用户兼任多部门…

AppleWatch是真的能够减少我iPhone的使用时长

我应该是比较专情的果粉了&#xff0c;我有一台MacBook Pro、iPad Pro、airpods pro 2和iPhone 15 Pro Max。但我还从来没有用过苹果手表。 然后&#xff0c;我就去买了AppleWatchSeries9蜂窝款&#xff0c;并试用了一周&#xff0c;我想知道它是否能帮助我减少使用iPhone的时间…

Sectigo证书申请流程及价格介绍

Sectigo 是一家全球知名的数字证书颁发机构&#xff08;Certificate Authority, CA&#xff09;&#xff0c;自1998年起就开始提供 SSL 证书服务&#xff0c;是全球最早的 CA 机构之一。 一 Sectigo证书申请流程 1 确定证书类型 根据自身的需求确定证书的类型&#xff0c;一…

源码篇--Nacos服务--中章(5):Nacos客户端启动-实例注册-grpc连接建立

文章目录 前言一、 前奏&#xff1a;二、客户端连接的建立&#xff1a;2.1 NacosNamingService 创建&#xff1a;2.2 NacosNamingService 初始化&#xff1a;2.3 NamingClientProxyDelegate 长连接建立&#xff1a;2.3.1 grpc 代理对象创建&#xff1a;2.3.2 NamingGrpcClientP…

Meta Llama 3本地部署

感谢阅读 环境安装收尾 环境安装 项目文件 下载完后在根目录进入命令终端&#xff08;windows下cmd、linux下终端、conda的话activate&#xff09; 运行 pip install -e .不要控制台&#xff0c;因为还要下载模型。这里挂着是节省时间 模型申请链接 复制如图所示的链接 然后…

每周一算法:多起点最短路

题目描述 有一天&#xff0c;琪琪想乘坐公交车去拜访她的一位朋友。由于琪琪非常容易晕车&#xff0c;所以她想尽快到达朋友家。 现在给定你一张城市交通路线图&#xff0c;上面包含城市的公交站台以及公交线路的具体分布。 已知城市中共包含 n n n个车站&#xff08;编号 …

Adobe Firefly Image 3:创新步伐与挑战并存的AI图像生成技术升级

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…