TCP 三次握手四次挥手

目录

TCP 三次握手

1. SYN (Synchronize:同步)

2. SYN-ACK (Synchronize + Acknowledge:同步+确认)

3. ACK (Acknowledge:确认)

为什么是三次而不是两次或四次?

三次握手的作用

TCP 四次挥手

第一次挥手:客户端发送 FIN

第二次挥手:服务器发送 ACK 确认

第三次挥手:服务器发送 FIN

第四次挥手:客户端发送 ACK 确认

为什么需要四次挥手?


TCP 三次握手

TCP三次握手(Three-Way Handshake) 是建立TCP连接时,客户端和服务器之间为了保证可靠的数据传输而进行的三次消息交换。 三次握手的目的是通过交换序列号,确认通信双方都准备好建立连接,并且双方都能进行数据的发送和接收。
注意: 三次握手只在TCP连接建立时进行一次,而不是在每次发送消息时都进行。因为 TCP是一个 面向连接的协议,这意味着在发送数据之前,客户端和服务器 需要建立一个持久的连接。这个连接在数据传输过程中保持开放,直到完成数据交换或者关闭连接。 三次握手是TCP连接建立的过程,一旦连接建立,客户端和服务器之间就可以进行多次数据传输,直到连接关闭。

1. SYN (Synchronize:同步)

  • 客户端向服务器发送一个TCP包,SYN(同步)标志位为1,表示请求建立连接,并告诉服务器自己初始的序列号(seq。seq是一个随机值,这个序列号用于标识数据包的顺序,并且确保数据在传输过程中能够按照正确的顺序重组。使用随机的初始序列号可以防止一些网络攻击(比如猜测攻击),防止攻击者能够伪造合法的TCP连接)。
  • 该包的目的就是告诉服务器:客户端准备建立连接,同时也告诉服务器客户端准备好数据流的初始序列号。
客户端 → 服务器
  • SYN = 1
  • 初始序列号:seq = x

2. SYN-ACK (Synchronize + Acknowledge:同步+确认)

  • 服务器收到客户端的SYN包后,知道客户端要建立连接,于是服务器向客户端发送一个SYN-ACK包,表示服务器同意建立连接,并且确认客户端的序列号。
  • SYN-ACK包包含两个标志位:
    • SYN = 1:表示服务器同意连接。
    • ACK = 1:表示确认收到了客户端的请求包。
  • 同时,服务器会选定自己的序列号seq(如:y)并告知客户端,之后会根据这个序列号继续数据传输。
服务器 → 客户端
  • SYN = 1
  • ACK = 1
  • 确认客户端序列号:ack = x + 1
  • 初始序列号:seq = y
(SYN 是表示服务器同意与客户端建立连接,并且会告诉客户端服务器的初始序列号。ACK是表示确认收到客户端的 SYN请求包,即确认客户端发出的序列号 x,并且ACK中的确认号应是客户端的序列号 x + 1。)

3. ACK (Acknowledge:确认)

  • 客户端收到服务器的SYN-ACK包后,确认服务器同意建立连接,并向服务器发送一个ACK包。此包用于确认服务器的 SYN包。
  • 客户端在该包中会将序列号ack设置为服务器的初始序列号加1(即:ack = y + 1),同时客户端的序列号递增为x + 1。
客户端 → 服务器
  • ACK = 1
  • 确认服务器序列号:ack = y + 1
  • 序列号:seq = x + 1
完成三次握手后,建立TCP连接,客户端和服务器可以开始正常的数据传输。

为什么是三次而不是两次或四次?

两次握手不足以保证服务器是否收到客户端的请求。如果客户端发送了SYN包,但服务器没有响应,客户端就无法知道服务器是否准备好接收连接。四次握手会增加额外的开销和延迟,而实际情况下三次握手就足够保证双方都准备好进行通信了。

三次握手的作用

  • 保证双方准备好通信:通过交换序列号,客户端和服务器可以确保彼此都准备好接收和发送数据。
  • 确认双方的接收能力:三次握手确保连接的两端都能够进行数据的发送和接收。
  • 避免无效连接:如果客户端或服务器没有准备好,就不会建立连接,从而避免了无效连接的浪费。

TCP 四次挥手

四次挥手是 TCP 连接关闭的过程,确保客户端和服务器都能独立且正确地关闭各自的连接。客户端和服务器在关闭连接时需要分别发送 FIN 包,并且每个 FIN(Finish)包都需要对方的 ACK 确认,以保证双方都准备好关闭连接。

第一次挥手:客户端发送 FIN

客户端 -> 服务器:FIN(Finish)客户端向服务器发送一个 FIN 包(带有 FIN 标志),表示客户端没有数据要发送了,但仍然能够接收来自服务器的数据。此时客户端进入 FIN_WAIT_1 状态。

第二次挥手:服务器发送 ACK 确认

服务器 -> 客户端:ACK服务器收到客户端的 FIN 包后,确认客户端的关闭请求,发送一个 ACK 包(带有 ACK 标志)给客户端,确认号为客户端发送的序列号 + 1。此时,服务器进入 CLOSE_WAIT 状态,等待关闭其发送通道(即它需要先发送完自己未发送的数据)。客户端进入 FIN_WAIT_2 状态。

第三次挥手:服务器发送 FIN

服务器 -> 客户端:FIN(Finish)当服务器没有数据可发送并准备关闭连接时,服务器向客户端发送一个 FIN 包(带有 FIN 标志),表示服务器也没有数据要发送了。此时,服务器进入 LAST_ACK 状态。

第四次挥手:客户端发送 ACK 确认

客户端 -> 服务器:ACK
客户端收到服务器的 FIN 包后,发送一个 ACK 包(带有 ACK 标志)给服务器,确认号为服务器发送的序列号 + 1。此时,客户端进入 TIME_WAIT 状态,等待 2MSL(Maximum Segment Lifetime,最大报文生存时间),确保服务器收到了确认包。如果客户端在此时间段内没有收到重复的 FIN 包,它将彻底关闭连接。TIME_WAIT 状态也是为了防止网络延迟或丢包等问题,避免导致数据包的重发。)
服务器收到客户端的确认包后,进入 CLOSED 状态,连接完全关闭。

为什么需要四次挥手?

  • TCP 是全双工的协议,即通信的双方(客户端和服务器)可以同时发送和接收数据。因此,关闭连接时,双方需要各自关闭自己的一条发送通道,才能完成连接的正常关闭。
  • 每个方向上的数据传输都需要确认,确保数据不会丢失或错乱。

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

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

相关文章

C语言初阶牛客网刷题—— HJ34 图片整理【难度:中等】

1. 题目描述 牛客网在线OJ链接 Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过C语言解决。 输入描述:Lily使用的图片包括 “A…

MVCC底层原理实现

MVCC的实现原理 了解实现原理之前,先理解下面几个组件的内容 1、 当前读和快照读 先普及一下什么是当前读和快照读。 当前读:读取数据的最新版本,并对数据进行加锁。 例如:insert、update、delete、select for update、 sele…

python实现http文件服务器访问下载

//1.py import http.server import socketserver import os import threading import sys# 获取当前脚本所在的目录 DIRECTORY os.path.dirname(os.path.abspath(__file__))# 设置服务器的端口 PORT 8000# 自定义Handler,将根目录设置为脚本所在目录 class MyHTT…

Cpp::静态 动态的类型转换全解析(36)

文章目录 前言一、C语言中的类型转换二、为什么C会有四种类型转换?内置类型 -> 自定义类型自定义类型 -> 内置类型自定义类型 -> 自定义类型隐式类型转换的坑 三、C强制类型转换static_castreinterpret_castconst_castdynamic_cast 四、RTTI总结 前言 Hell…

2024年终总结:技术成长与突破之路

文章目录 前言一、技术成长:菜鸟成长之路1. 学习与实践的结合2. 技术分享与社区交流 二、生活与事业的平衡:技术之外的思考1. 时间管理与效率提升2. 技术对生活的积极影响 三、突破与展望:未来之路1. 技术领域的突破2. 未来规划与目标 四、结…

ComfyUI实现老照片修复——AI修复老照片(ComfyUI-ReActor / ReSwapper)解决天坑问题及加速pip下载

AI修复老照片,试试吧,不一定好~~哈哈 2023年4月曾用过ComfyUI,当时就感慨这个工具和虚幻的蓝图很像,以后肯定是专业人玩的。 2024年我写代码去了,AI做图没太关注,没想到,现在ComfyUI真的变成了工…

思科交换机telnet配置案例

目录 1.telnet简述2.网络拓扑3.设备说明4.网络配置4.1 电脑PC ip设置4.2 网络交换机telnet配置 5.小结 1.telnet简述 Telnet是远程登录服务的一个协议,该协议定义了远程登录用户与服务器交互的方式。它允许用户在一台联网的计算机上登录到一个远程分时系统中&#…

WPS数据分析000006

一、排序 开始→ 排序 同文件→选项→自定义序列→输入序列 二、筛选 高级筛选 条件区域要与列表区域一样。 三、条件格式

vofa++使用方法

控件区可以添加控件用来啊多样显示 点击一个控件然后右键可以选择要添加显示的数据,点all表全部显示, 点auto可以自动布局 要用控件需要选择协议,不知道协议具体格式可以点击问号看看,并且最好用printf重定义来实现 比如我要实现F…

达梦拷贝DM_HOME的复制安装

近期一个项目需求,需要在没有安装包的情况下,将达梦数据库安装到虚机上(生产机上安装了达梦),故采用直接打包生产机DM_HOME的方式拷贝至虚机,再依次执行达梦的部分指令完成安装。以下为验证的步骤&#xff…

ui文件转py程序的工具

源博客连接: PyCharm中利用外部工具uic转成的py文件,里面全是C代码,并非python类型的代码,导致大量报错。。。_pyside6-uic为什么把ui转为了c-CSDN博客 如果想把ui文件转为py文件,首先设置pycharm的外部工具&#xf…

hedfs和hive数据迁移后校验脚本

先谈论校验方法,本人腾讯云大数据工程师。 1、hdfs的校验 这个通常就是distcp校验,hdfs通过distcp迁移到另一个集群,怎么校验你的对不对。 有人会说,默认会有校验CRC校验。我们关闭了,为什么关闭?全量迁…

61,【1】BUUCTF WEB BUU XSS COURSE 11

进入靶场 左边是吐槽,右边是登录,先登录试试 admin 123456 admiin# 123456 admin"# 123456 不玩了,先去回顾下xss 回顾完就很尴尬了,我居然用SQL的知识去做xss的题 重来 吐槽这里有一个输入框,容易出现存储型…

海外问卷调查如何影响企业的经营?在品牌建设中有何指导意义?

市场调查的定义:通过科学的方法,有目的地、系统地搜集整理一些市场信息,其目的在于了解当下市场现状和发展前景,为企业生产和品牌打造提供一些科学的指导意见,这是任何大企业、中小企业、初创企业都必须重视的一个重要…

STM32新建不同工程的方式

新建工程的方式 1. 安装开发工具 MDK5 / keil52. CMSIS 标准3. 新建工程3.1 寄存器版工程3.2 标准库版工程3.3 HAL/LL库版工程3.4 HAL库、LL库、标准库和寄存器对比3.5 库开发和寄存器的关系 4. STM32CubeMX工具的作用 1. 安装开发工具 MDK5 / keil5 MDK5 由两个部分组成&#…

idea maven本地有jar包,但还要从远程下载

idea 中,java 工程执行 maven reimport,报jar报无法下载。 我奇了个怪,我明明在本地仓库有啊,你非得从远程下载? 我从供应商那里拿来的,远程当然没有了。 这太奇葩了吧,折腾好久不行。 后来…

250125-package

1. 定义 包就是文件夹,作用是在大型项目中,避免不同人的编写的java文件出现同名进而导致报错;想象一个场景,在一个根目录中,每一个人都有自己的一个java文件夹,他可以将自己编写的文件放在该文件夹里&…

系统思考—动态问题分析

“不是解决问题,而是根本改变它的方式,才能真正创造持久的成功。”——彼得德鲁克 在很多情况下,企业面对问题时,总会急于寻找解决方案,但这些方案往往只是暂时的“应急措施”。它们看似有效,却难以从根本…

系统架构设计师教材:信息系统及信息安全

信息系统 信息系统的5个基本功能:输入、存储、处理、输出和控制。信息系统的生命周期分为4个阶段,即产生阶段、开发阶段、运行阶段和消亡阶段。 信息系统建设原则 1. 高层管理人员介入原则:只有高层管理人员才能知道企业究竟需要什么样的信…

Golang Gin系列-5:数据模型和数据库

在这篇Gin教程的博客中,我们将探索如何将模型和数据库与Gin框架无缝集成,使你能够构建健壮且可扩展的web应用程序。通过利用流行的库并遵循最佳实践,你将学习如何定义模型、建立数据库连接、执行CRUD操作以及确保基于gin的项目中的数据完整性…