TCP 三次握手 四次挥手

article/2025/10/14 10:22:11

三次握手

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tsR4XAu4-1615191779672)(34074ACF1AA548A4BA3DED7E286FDDF6)]

三次握手过程描述

第一次握手: 客户端发送syn标志位和seq num,向服务器申请建立连接,客户端状态由closed变为syn_send

第二次握手: 服务端返回 syn和ack标志位,ack num以及seq num,确认第一次握手的报文段,返回ack num=seq num(第一次握手发送的)+1,同意建立连接,服务器状态由listen变为syn_received

第三次握手: 发送确认报文段,返回ack以及ack num=seq num(第二次握手发送的)+1,客户端状态变为:established(完成连接)

最后: 服务器收到确认报文段,服务器状态由syn_received变为established(完成连接)

三次握手原因

(1) TCP连接的特性决定,一次RT(往返)完成一次TCP的动作。
即客户端一次请求携带的seq num必须得到服务端的ack num才会完成。如果没有返回确认报文段,由于重发机制,定时器经过了一次RTO,客户端就会重发报文。那为什么客户端最后一次发送之后,没有等待服务端发回ack报文段? 这是因为服务端第二次发送的报文段里 包含ack以及请求syc报文,相当于把确认报文和请求报文合并了,所以最后客户端回复一个ack报文即可。

(2) 防止失效的报文创建连接。
因为互联网链路是非常复杂的,发送的报文可能会被互联中的网络设备阻塞,经过了一段时间才到达服务器,时间大于了RTO(Retransmission TimeOut)时间,导致客户端重发syc报文(重新创建新的连接,并丢失超时的连接)。如果只有两次握手,那么服务器每接收到syc报文(包括重发的syc报文),就会创建多余的连接,造成服务器的资源浪费。如果有第三次握手,那么客户端就能够识别出服务端发出的syc和ack报文对应的请求连接在客户端是否存活,如果存活则发送第三次握手ack报文,确认建立连接。

四次挥手

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-81ruHi3k-1615191779674)(263ABC11FDDC4577821ECFDC070BBDBA)]

四次挥手过程描述

第一次挥手: 客户端的应用说要关闭连接,给服务端发送一个含fin标志位的报文,客户端状态由established变为fin-wait-1

第二次挥手: 服务端收到客户端发来的fin报文,回复ack报文,告知服务端的应用要关闭连接,服务端状态由established变为close-wait,而客户端收到ack报文后,状态由fin-wait-1变为fin-wait-2

第三次挥手: 服务端应用说可以关闭连接了,给客户端发送fin报文,服务端状态由close-wait变为last-ack

第四次挥手: 客户端收到服务端发来的fin报文,回复ack报文,客户端状态由fin-wait-2变为time-wait,服务端收到ack报文后,直接关闭连接,状态由last-ack变为closed

客户端经过两次最大的报文存活时间后,关闭连接,状态由time-wait变为closed

四次挥手原因

(1) 假设只有二次挥手
客户端发送fin报文,服务端接收fin后,返回ack报文。客户端接收到ack报文后,断开连接。然而服务器还有没有发送完成的报文,当发送数据报文给客户端,发现客户端已经断开连接。比如说你在浏览器输入一个地址后会跟服务端建立连接,服务端会根据TCP把数据分成很多的报文段一一地发送给客户端,在没有全部发送完成之前,客户端在完成二次挥手就断开连接,服务端还没发送完的报文段就会抛客户端失去连接的异常。

(2) 假设只有三次挥手, 服务端就不能及时地关闭连接,导致连接空闲一段时间,浪费资源。

总结

具体的握手和挥手过程以及报文的内容可以通过wireshark抓包工具分析

握手抓包截图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NtLJ0bCh-1615191779674)(0FF13E7C35FB45DAB601FE1F0953E758)]

挥手抓包截图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2CIHS45I-1615191779675)(4AF0D964C64D483DB25188E8E4A3F237)]


http://chatgpt.dhexx.cn/article/EnoCPjgU.shtml

相关文章

Go_详解TCP协议三次握手四次挥手

三次握手: 三次握手表示建立通信阶段,在TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠,由于这种面向连接的特性, TCP协议可以保证传输数据的安全&#xff0c…

一文读懂TCP的三次握手(详细图解)

在学习TCP三次握手的过程前,首先熟悉几个缩写简称: TCB 传输控制块,打开后服务器/客户端进入监听(LISTEN)状态 SYNTCP报文标志位,该位为1时表示发起一个新连接ACKTCP报文标志位,该位为1时&…

TCP的三次握手与四次挥手的全过程

三次握手 (1)第一次握手:建立连接时,客户端发送syn包(seqj)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号。 (2)服…

简述TCP的三次握手过程

TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(synj)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers) 第二次握…

TCP-三次握手

文章目录 三次握手简单示意图详细分析 一些思考为什么是三次握手?SYN 攻击什么是SYN 攻击?如何防止SYN 攻击?数据包丢失了该怎么办?初始序列号为什么随机产生?为什么 SYN 段不携带数据却要消耗一个序列号呢&#xff1f…

计算机网络之TCP三次握手

文章目录 计算机网络之TCP三次握手1.TCP三次握手过程2.TCP三次握手原因,而不是两次3.TCP三次握手原因,而不是四次4.TCP三次握手能携带数据吗5.三次握手连接阶段,最后一次ACK包丢失,会发生什么6.TCP 握手为什么是三次,为…

网络通信TCP协议三次握手

TCP是什么? TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。TCP在IP报文的协议号是6。TCP是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。首先来看看OSI的七层模…

栈溢出实例--笔记三(ret2libc)

栈溢出实例--笔记三(ret2libc) 1、栈溢出含义及栈结构2、ret2libc基本思路3、实战3.1、二进制程序如下3.2、查看栈结构3.3、第一次栈溢出3.4、第二次栈溢出 1、栈溢出含义及栈结构 请参考栈溢出实例–笔记一(ret2text) 栈溢出实例–笔记二&a…

ret2libc3

文章目录 ret2libc31.程序分析2.栈帧设计3.exp编写 ret2libc3 当前的ret2libc3:无system,无”\bin\sh“ 1.程序分析 首先file一下,发现是32位程序: checksec一下,发现没有开启pie ida分析程序: 发现有个Se…

PWN题型之Ret2Libc

文章目录 前言0x1 :使用前提条件0x2 :解题思路0x3 :32位程序libc题型模板0x4 :代码的解析0x5 :64位程序实例 前言 菜鸡总结,如有不对,请不吝赐教。 0x1 :使用前提条件 存在溢出条件…

【PWN · ret2libc】[2021 鹤城杯]babyof

Linux_64的经典ret2libc题目,有必要好好整理总结一下其中的流程和注意点 目录 前言 一、题目重述 二、exp(思考与理解在注释) 三、经验总结 攻击步骤: 注意要点 四、疑问 前言 64位Linux和32位Linux确乎有着关于参数传递上的不同&a…

运行不同版本libc

author: Tamako 先上两个美化的链接,不用zsh的 字体 样式,颜色 成品 切换libc 我的工具机是Ubuntu 18.04。 获取libc版本 这个很容易,通过运行libc就可以直接获取,比如buu的Ubuntu16.04 32位机使用的libc 当然有些libc运行…

ret2libc实战

title: ret2libc实战 date: 2021-05-13 22:00:00 tags: binary securitystudy reportret2libc comments: true categories:ctfpwn ret2libc是一个pwner必备的基础知识。 ret2libc为return to libc的缩写,我们需要执行libc函数里面的system("/bin/sh") …

WSL vhdx非root误删除libc.so.6

思路 由于不在root这种情况的特殊性,没有办法使用网上例如LDPRELOAD进行软连接。则使用linux挂载ext4格式的vhdx然后重新进行软链接 挂载vhdx wsl ubuntu 20.04的虚拟磁盘在windows下的这个目录,不同的发行版在package目录下的地址不一样 在Package目…

ret2libc

一、原理 payload padding1 address of system() padding2 address of “/bin/sh” Padding1 随意填充, 长度刚好覆盖基地址 长度与shellcode处的一样的方法 address of system() 是system在内存中的地址,用来覆盖返回地址 system()函数地址在哪里? 从动态库中获取,计…

libc

1. libc (1). libc是Standard C library的简称,它是符合ANSI C标准的一个函数库。 libc库提供C语言中所使用的宏,类型定义,字符串操作函数,数学计算函数以及输入输出函数等。 正如ANSI C是C语言的标准一样,lib…

为什么要避免使用 libc

【CSDN 编者按】libc 是 Linux 下的标准 C 库&#xff0c;也是初学者写 hello world 包时含有的头文件 #include < stdio.h> 定义的地方&#xff0c;后来其逐渐被 glibc 给取代&#xff0c;本文作者列出了为什么要避免使用 libc 的 20 个理由。 作者 |Chris Wellons 译者…

统计学⑤——假设验证

统计学系列目录&#xff08;文末有大奖赠送&#xff09;&#xff1a; 统计学①——概率论基础及业务实战 统计学②——概率分布&#xff08;几何&#xff0c;二项&#xff0c;泊松&#xff0c;正态分布&#xff09; 统计学③——总体与样本 统计学④——置信区间 一、什么是假…

统计基础(四)假设检验

Hypothesis Testing 1.中心极限定理Central Limit Theorem1.1 X ˉ \bar{X} Xˉ的抽样分布1.2 p ^ \hat{p} p^​的抽样分布1.3 二项的正态逼近 2.假设检验概念2.1 零假设与备则假设2.2 如何制定决策规则 3.假设性检验步骤3.1假设检验框架3.2术语定义3.3 proportion test步骤3…

连续性概率

提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 欧拉常数连续型随机变数与概率密度函数正态分布标准正态分步检验t检验t假设 在我们将离散型数据的数值放大到无限&#xff0c;也就是讨论所谓的极限时&#xff0c; …