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

【计算机网络笔记】TCP连接管理(图解三次握手和四次挥手)

系列文章目录

什么是计算机网络?
什么是网络协议?
计算机网络的结构
数据交换之电路交换
数据交换之报文交换和分组交换
分组交换 vs 电路交换
计算机网络性能(1)——速率、带宽、延迟
计算机网络性能(2)——时延带宽积、丢包率、吞吐量/率
计算机网络体系结构概念
OSI参考模型基本概念
OSI参考模型中非端-端层(物理层、数据链路层、网络层)功能介绍
OSI参考模型中端-端层(传输层、会话层、表示层、应用层)功能介绍
TCP/IP参考模型基本概念,包括五层参考模型
网络应用的体系结构
网络应用进程通信
网络应用对传输服务的需求
Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)
Cookie技术
Web缓存/代理服务器技术
传输层服务概述、传输层 vs. 网络层
传输层——多路复用和多路分用
传输层——UDP简介
传输层——可靠数据传输原理之Rdt协议
传输层——可靠数据传输之流水线机制与滑动窗口协议
传输层——TCP特点与段结构
传输层——TCP的可靠数据传输


  • 系列文章目录
  • 前言
  • 建立连接——三次握手
  • 关闭(拆除)连接——四次挥手
  • 生命周期


前言

我们知道,TCP是一个面向连接的传输层协议,所以在进行实际的数据传输之前要先进行连接的建立,等到数据都传输完成后还要进行连接的拆除。那这个是怎么实现的?下面一起来看看。


建立连接——三次握手

TCP sender 和receiver在传输数 据前需要建立连接

  • 在建立连接的过程中,会初始化TCP变量,或者说选择自己的序列号,也会分配相应的资源,比如分配缓存、交换流量控制信息等等。

    在这里插入图片描述

  • 一般来说,连接的发起者往往是Client客户端,Server服务器这一端则是等待客户连接请求,并且在有可用资源的时候会接收这个请求并建立连接。

    在这里插入图片描述

在TCP连接建立的过程中,采用了三次握手的机制。这是非常重要的。三次握手是指TCP连接的建立过程分三个阶段(在这个过程中会涉及三个包的传输),基本原理如下:

  • Step1:客户主机向服务器发送一个SYN报文段,这个段中不携带任何数据信息,并且SYN这个标志位要置1,并且要携带所选择的初始的序列号。关于这个初始序列号如何选择是有大量的机制的,一般是随机选。
  • Step2:服务器收到SYN报文段后,如果同意建立这个连接的话就回复一个SYNACK报文段,在这个过程中,服务器会分配缓存以及相应的资源,同时选择自己初始的序列号并告知客户端。这个报文段会告诉客户机连接请求已经收到了。
  • Step3:客户机收到来自服务器的SYNACK报文段之后,会回复一个ACK报文段,这个时候SYN标志位就不再置1了,这个报文段的意思就代表客户机收到了服务器同意建立连接的报文段。并且回复的报文段中可以包含数据。

Q:为什么要有三次握手?而且三次握手机制不仅仅在计算机网络中存在,在很多现实当中也是广泛使用的。

以下解释引用自https://cloud.tencent.com/developer/article/1874945

A:原因:避免重复连接

其实在RFC 793 Transmission Control Protocol里就有指出为什么要三次握手的原因

The principle reason for the three-way handshake is to prevent old duplicate connection initiations from causing confusion.

翻译为中文大致意思是主要原因是为了防止旧的重复连接引起连接混乱问题

比如在网络环境比较复杂的情况,客户端可能会连续发送多次请求。如果只设计成两次握手的情况,服务端只能一直接收请求,然后返回请求信息,也不知道客户端是否请求成功。这些过期请求的话就会造成网络连接的混乱。

所以设计成三次握手的情况,客户端在接收到服务端SEQ+1的返回消息之后,就会知道这个连接是历史连接,所以会发送报文给服务端,告诉服务端。

所以TCP设计成三次握手的目的就是为了避免重复连接

那么可以设计成四次握手?五次握手?不可以?答案是也是可以的,不过为了节省资源,三次握手就可以符合实际情况,所以就没必要设计成四次握手、五次握手等等情况。

下面这幅图展示了三次握手的简单过程:

在这里插入图片描述

ACK number是上一个序列号+1,这是确认前面的报文段收到了,同时告知对方下一个期待的报文段的起始序列号。

如果第三个步骤中客户端的ACK没有成功发给服务器,那服务器再第二个步骤所创建的资源会保留一段时间,一直到确认这个连接不会再建立了,才会释放资源。这种TCP连接管理为经典的 DOS攻击SYN洪泛攻击 提供了环境。在这种攻击中,攻击者发送大量的SYN 请求连接报文段, 而不完成第三次握手 ,也就是不回复ACK确认报文段。 如果服务器不断地响应请求, 为这些半开连接分配资源 ( 但从未使用 ), 就会导致服务器的连接资源被耗尽。

关于TCP连接的建立就介绍到这里,下面介绍如何关闭或者说拆除连接。


关闭(拆除)连接——四次挥手

TCP连接的拆除是客户机和服务器都可以发起的。但多数情况下是客户机发起关闭的请求。

客户机的socket执行一个close函数,意味着客户机声明想要关闭连接。接下来会有四个步骤(在这个过程中会涉及四个包的传输):

  • Step1:客户机向服务器发送一个FIN控制报文段。FIN和SYN一样,是TCP报文段里一个标志位。这个标志位用于关闭连接。
  • Step2:服务器收到FIN控制报文段后,回复一个ACK报文段,关闭连接。接下来服务器会发送一个FIN报文段。
  • Step3:客户机收到FIN,回复ACK。回复之后会进入等待状态,这是为了确保服务器那端能够正确的关闭连接并且释放资源。等待的过程中,如果重复收到了FIN,说明回复的ACK出错了,那客户机就重新发送ACK,以确保服务器那端收到ACK消息。
  • Step4:当服务器收到ACK后,真正地关闭连接。

在这里插入图片描述


生命周期

TCP协议在不同的状态之间来回切换。下面展示了典型的TCP客户端和服务器的生命周期,也就是状态的变化过程。

客户端:初始的时候,TCP客户端处于关闭状态。当上层也就是应用层有一个应用需要TCP连接的时候,TCP客户端会尝试建立连接,向服务器发送SYN报文段。这时会进入SYN已发送的状态。然后等待SYN & ACK报文段,收到之后会回复ACK,这时会进入已经建立连接的状态。这个时候就可以为上层应用可靠的传输数据了。当上层应用使用完连接后并想要关闭连接,这时TCP客户端会发送FIN报文段并进入FIN_WAIT_1状态。如果收到ACK的话,进入FIN_WAIT_2状态,等待服务器端发来的FIN报文段。收到后发送一个ACK,这时再进入等待状态,一般来说会等待30s,这个过程如果又收到FIN ,会重新发送ACK,否则30s结束,进入关闭状态。

在这里插入图片描述

服务器:

在这里插入图片描述

相关文章:

【计算机网络笔记】TCP连接管理(图解三次握手和四次挥手)

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...

C++ 初阶 类和对象(中)

前言:C初阶系列,每一期博主都会使用简单朴素的语言将对应的知识分享给大家,争取让所有人都可以听懂,C初阶系列会持续更新,上学期间将不定时更新,但总会更的 目录 一、构造函数 1.1为什么要有构造函数&…...

【漏洞复现】Metinfo5.0.4任意文件包含漏洞复现

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1、蚁剑直接连接图片马2、读取敏感目录3、读取php源码4、执行PHP命令5、包含木马写Shell (图片马制作新方法) 以 metinfo_5.0.4为例 该环境的文件上传…...

【计算机网络实验/wireshark】tcp建立和释放

wireshark开始捕获后,浏览器打开xg.swjtu.edu.cn,网页传输完成后,关闭浏览器,然后停止报文捕获。 若捕获不到dns报文,先运行ipconfig/flushdns命令清空dns缓存 DNS报文 设置了筛选条件:dns 查询报文目的…...

STM32:I²C通信原理概要

一、IIC通信原理 IIC通信和串口通信有一定的相似之处,都有一根共地线和两根数据线。但是传递外部信息,串口有两根数据线可以进行双向通信,也就是全双工通信。而在IIC通信下,其中一条数据线是用于提供同步时钟脉冲的时钟线(SCL)&am…...

【开题报告】基于 Spring Boot 的在线预约导游系统的设计与实现

1.引言 在旅游行业中,导游起到了重要的作用,他们为游客提供了专业的旅游服务和相关信息。然而,传统的导游预约方式可能存在一些问题,如信息不透明、预约流程繁琐等。因此,我们计划开发一个基于 Spring Boot 的在线预约…...

如何使用ps制作ico图标文件

如何使用ps制作ico图标文件 Chapter1 如何使用ps制作ico图标文件Chapter2 ICOFormat.8bi(Photoshop Ico、Cur插件)的下载使用1. ICOFormat.8bi的作用2. ICOFormat.8bi使用 Chapter3 ps手机计算机图标教程,手绘设计精美手机APP软件图标的PS教程步骤 01 制…...

【Linux】logrotate实现“日志文件定时分割“

问题背景 项目部署的过程中,经常会需要查看程序的执行日志。我之前的做法都是用nohup ... > xxx.log 2>&1 &将日志保存到xxx.log文件中的。但是问题是,程序有时会运行很长时间,一直保存在一个文件里,文件会越来越大…...

Android可绘制资源概览(背景、图形等)

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、drawable 分类3.1 Bitmap fileXML …...

力扣2095.删除链表的中间节点(java快慢指针)

Problem: 2095. 删除链表的中间节点 文章目录 思路解题方法复杂度Code 思路 利用快慢指针,快指针每次走两步,慢指针每次走一步(循环退出条件是fast指针不为空同时fast.next不为空),但是我们容易发现这样到最后slow指针…...

【Vue-Element-Admin】table添加自定义索引

通过给 typeindex 的列传入 index 属性&#xff0c;可以自定义索引。该属性传入数字时&#xff0c;将作为索引的起始值。也可以传入一个方法&#xff0c;它提供当前行的行号&#xff08;从 0 开始&#xff09;作为参数&#xff0c;返回值将作为索引展示。 <el-table:data&q…...

0008Java安卓程序设计-ssm基于Android平台的健康管理系统

文章目录 **摘要**目录系统实现开发环境 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,…...

Mac 禁用一些高占用cup的进程

什么是CrashReporter&#xff1f; CrashReporter在应用程序崩溃的任何时候都会运行&#xff0c;它旨在保存应用程序状态&#xff0c;以帮助开发人员找出应用程序崩溃原因。基本上&#xff0c;一个进程是启动、崩溃&#xff08;并调用CrashReporter&#xff09;&#xff0c;然后…...

layui form表单 调整 label 宽度

这个可以调整所有label .layui-form-label {width: 120px !important; } .layui-input-block {margin-left: 150px !important; }情况是这样的&#xff0c;表单里有多个输入框&#xff0c;只有个别label 是长的&#xff0c;我就想调整一下个别长的&#xff0c;其它不变 <di…...

轻量封装WebGPU渲染系统示例<12>- 基础3D对象实体(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/main/src/voxgpu/sample/PrimitiveEntityTest.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 细节请见&#xff1a;引擎系统设计思路 - 用户态与系统态隔离-CSDN博客 2. 高频调用与低频调用隔…...

[ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决

业务需求&#xff1a;需要做到table表格中某些行数据不能被选中&#xff0c;比如在审核一些记录数据时&#xff0c;已经被审核的数据就不能再次提交审核&#xff0c;特别是批量多选的情况&#xff0c;列表中既有已经审核的&#xff0c;也有未审核的&#xff0c;只要求选中未审核…...

【PY】倒计时日历

大家有时候会不会觉得时间记不住呢&#xff1f;PY倒计时日历可以满足你。 main.py&#xff1a; from tkinter import Tk,Canvas from datetime import date,datetime def get_events():list_events[]with open(events.txt)as file:for line in file:lineline.rstrip(\n)curre…...

windows mysql安装

1、首先去官网下载mysql安装包&#xff0c;官网地址&#xff1a;MySQL :: Download MySQL Community Server 2&#xff1a;把安装包放到你安装mysql的地方&#xff0c;然后进行解压缩&#xff0c;注意&#xff0c;解压后的mysql没有配置文件&#xff0c;我们需要创建配置文件 配…...

【蓝桥杯省赛真题42】Scratch舞台特效 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

目录 scratch舞台特效 一、题目要求 编程实现 二、案例分析 1、角色分析...

Kafka(二)消息系统设计

文章目录 前言整体设计时序图时序图解释 最后 前言 当多个系统之间通过Kafka来解耦时&#xff0c;在系统设计初期&#xff0c;基本的要求都是相似的&#xff0c;只不过是消费消息时的业务逻辑可能不同。 本文以业务系统和邮件系统解耦作为示例。业务系统需要发送邮件时&#…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

使用 uv 工具快速部署并管理 vLLM 推理环境

uv&#xff1a;现代 Python 项目管理的高效助手 uv&#xff1a;Rust 驱动的 Python 包管理新时代 在部署大语言模型&#xff08;LLM&#xff09;推理服务时&#xff0c;vLLM 是一个备受关注的方案&#xff0c;具备高吞吐、低延迟和对 OpenAI API 的良好兼容性。为了提高部署效…...

PostgreSQL 对 IPv6 的支持情况

PostgreSQL 对 IPv6 的支持情况 PostgreSQL 全面支持 IPv6 网络协议&#xff0c;包括连接、存储和操作 IPv6 地址。以下是详细说明&#xff1a; 一、网络连接支持 1. 监听 IPv6 连接 在 postgresql.conf 中配置&#xff1a; listen_addresses 0.0.0.0,:: # 监听所有IPv4…...