当前位置: 首页 > news >正文

TCP三次握手/四次挥手

TCP三次握手

任何基于TCP的应用,在发送数据之前,都需要由TCP进行“三次握手”建立连接

示意图
在这里插入图片描述
第一次握手:客户端PC发送一个SYN位置1(SYN=1代表请求服务端建立连接)的TCP报文发送给要建立TCP连接的Server,此时Seq序列号值为a(随机值),由于没有收到Server发来的任何报文,所以Ack确认序列号为0
第二次握手:Server收到SYN标置位报文后,会对报文进行应答,发给PC的应答报文不仅有SYN置位(此时Seq的序列号值b为随机值),还会有ACK置位来说明已经收到PC发送的报文(因为PC1发来SYN置位消耗了一个序号为a的TCP数据,因此Server收到后,Ack的序列确认号要使用a+1来进行确认)。
发送的确认报文段包含以下字段:
SYN=1,同意建立新连接(SYN置位)
Seq=b, 服务端给返回确认的报文,加上自己的序列号
Ack_seq=a+1, 表示已经收到seq=a的报文段,并期望后续接收a+1序号的报文
ACK=1 确认收到请求报文(ACK置位)

第三次握手:客户端收到服务器的主动请求建立连接和确认报文时,客户端无需应答服务器的确认报文,但需要对服务器主动请求做应答,所以只是ACK置位,SYN不置位,Seq=a+1(Server期望的序列号值),Ack_seq=b+1(
TCP连接建立
(注意:ACK标志位和ACK确认序列号是两码事,不要混淆)

抓包分析

在这里插入图片描述

第一次握手,SYN置位,Seq=2755731984

在这里插入图片描述

第二次握手,SYN、ACK置位,表示收到了客户端发来的请求,所以,Ack确认序列号=2755731984+1,同时发送自身的序列号Seq=3747234003

第三次握手,ACK置位,Ack的确认序列号=3747234003+1在这里插入图片描述

握手成功后,服务器(12.2)开始发送数据,共发送了四次,第一、二次都是9字节,第三、四次分别是28字节和11字节,所以总共发了9+9+28+11=57字节
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当客户端(12.1)收到服务器发送的数据后,回复一个Ack确认报文,予以确认,发送ACK为57+1

在这里插入图片描述

四次挥手

当数据传输完成,TCP需要通过“四次挥手”机制断开TCP连接,释放系统资源。

在这里插入图片描述

  1. 由PC1发出一个FIN字段置”1 ”的不带数据的TCP段;
  2. PC2收到PC1发来的FIN置位的TCP报文后,会回复一个ACK置位的TCP报文。
  3. 若PC2也没有需要发送的数据,则直接发送FIN置位的TCP报文。假设此时PC2还有数据要发送,那么当PC2发送完这些数据之后会发送一个FIN置位的TCP报文去关闭连接。
  4. PC1收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。

TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。

http://www.lryc.cn/news/41784.html

相关文章:

  • Python程序员看见一个好看的手机壁纸网站,开撸!
  • 浏览器工作原理
  • 对在使用容器HashSet存放自定义对象时重写其类的hashcode和equals方法的几点认识
  • Java集群:单体架构升级到集群架构(二)实现session共享
  • MySQL索引及索引失效的分析(MySQL8.0.19)
  • 第一个 Django 应用
  • 001-ksum 求符合条件的 k 个数 1. Two Sum/15. 3Sum/18. 4Sum/
  • Nginx学习笔记(三)Linux环境下Nginx的安装和部署
  • 【十二天学java】day05--数组和循环高级
  • 用队列实现栈和用栈实现队列(C 语言)
  • albedo开源框架配置多数据源
  • 22张图带你了解IP地址有什么作用
  • 121.Android 简单的人工智能聊天项目,chatAi,AI聊天项目,GPTAi
  • C++ this指针详解
  • CSS 实现六边形柱状图
  • 什么是推挽输出,开漏输出?
  • 【图像分割】Unet系列深度讲解(FCN、UNET、UNET++)
  • list底层的简单实现(万字长文详解!)
  • 学习Linux只要学会这个命令就够了!
  • javascript基础
  • 【游戏逆向】某游戏技能库分析
  • Pytorch深度学习常用预训练网络模型的下载地址
  • 毕业设计 基于51单片机自动智能浇花系统设计
  • 熟悉常用的 Linux 操作和 Hadoop 操作
  • Vue2项目总结-电商后台管理系统
  • 【二】一起算法---队列:STL queue、手写循环队列、双端队列和单调队列、优先队列
  • <Linux>环境变量
  • 【MySQL】下载(超详细教程)
  • 再探pytorch的Dataset和DataLoader
  • 【2023.3.18 美团校招】