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

计算机网络知识点复习——TCP协议的三次握手与四次挥手(连接与释放)

TCP协议的三次握手与四次挥手(连接与释放)

    • 一、前言
    • 二、简单的知识准备
        • 1. TCP协议的主要特点
        • 2. TCP报文段
    • 三、TCP连接的建立(三次握手)
    • 四、TCP连接的释放(四次挥手)
    • 五、TCP连接与释放的总结
    • 六、结束语

一、前言

本篇文章主要是介绍TCP连接的建立以及连接的释放过程,也就是我们常说的“三次握手”和“四次挥手”。

二、简单的知识准备

1. TCP协议的主要特点

TCP是在不可靠的IP层之上实现的可靠的数据传输,它是面向连接的传输层协议,提供全双工通信,数据传输是面向字节流的。

2. TCP报文段

TCP传送的数据单元为报文段,一个TCP报文分为首部和数据两部分,其首部的前20B是固定的。TCP的全部功能体现在其首部的各个字段中,这里大家主要注意下面几个字段的意义即可:

  1. 序号(seq):指的是本报文段所发送的数据的第一个字节的序号。
  2. 确认号(ack):表示期待收到对方的下一个报文段的第一个数据字节的序号(seq)。如ack=n+1,那么序号seq=n及之前的数据已经收到,期待收到序号n+1及之后的数据。
  3. 确认位(ACK):仅当ACK=1时,确认位(ack)才有效,若ACK=0时,确认位(ack)无效。
  4. 同步位(SYN):SYN=1时有效,意义有两种:
    ①SYN=1,ACK=0,表示该报文为连接请求报文。
    ②SYN=1,ACK=1,表示该报文为连接同意报文。
  5. 终止位(FIN):用于释放连接,当FIN=1时,表示数据已发送完毕,并要求释放连接。

三、TCP连接的建立(三次握手)

为了能够更好的了解TCP连接的建立过程,我特意画了一幅图:

CSDN风行男孩制作

在连接建立前,服务器处于LISTEN(监听)状态,等待连接:
第①次握手:客户机A发送请求连接报文,报文段首部中同步位SYN=1,第一个数据字节初始序号seq=x,客户机A进入SYN-SENT(同步已发送)状态。(注:SYN报文段不能携带数据,但消耗一个序号,下面第②次握手一样)
.
第②次握手:服务器B收到连接请求报文,同意连接,发送接受连接报文,报文段中SYN=1,ACK=1,ack=x+1(序号x的数据已收到,期待接收seq=x+1数据),seq=y,服务器B进入SYN-RCVD(同步收到)状态。(在这里分配了服务器的资源)
.
第③次握手:客户机收到连接接受报文后,还需向服务器发送确认报文,报文段首部中ACK=1,ack=y+1,seq=x+1,客户机A进入连接已建立状态,可以开始传送数据。(注:在第③次握手发出的报文可以携带数据了,这里很容易被忽视
以上就是TCP三次握手的主要过程。

四、TCP连接的释放(四次挥手)

同样的,这里用一个例图来进行介绍,毕竟图文结合能够让我们更好的理解。

风行男孩制作

参与TCP连接的两个进程都能终止该连接,连接释放的过程通常也被称为四次挥手:
.
第①次挥手:客户机A数据发送完成,主动关闭TCP连接,发送连接释放报文,报文段首部终止位FIN=1,同样的该报文需要消耗一个序号,设序号seq=u,客户机A进入FIN-WAIT-1(终止等待1)状态。
.
第②次挥手:服务器B收到连接释放报文后随即发出确认报文,报文段首部字段中ACK=1,ack=u+1序号seq=v(这里的v等于前面已传送数据的最后一个字节的序号加1),服务器进入CLOSE-WAIT(关闭等待)状态,就此,从客户机A到服务器B的连接就释放了(半关闭状态)。( 注:TCP是全双工的,可以看成TCP连接有两条通路,在客户机A成功发送FIN报文并确认后,A就不能发送数据了,但是服务器B还可以发送数据,这里对应图中中间的数据传送标志
.
第③次挥手:若服务器没有数据发送了,就发出连接释放报文,报文首部字段中FIN=1,注意这里需要重复上次已发送的确认号ack=u+1,ACK=1,而由于在半关闭状态服务器B可能向客户机A发送了数据,所以序号需设为seq=w****而不是seq=v+1,然后服务器B进入LAST-ACK(最后确认)状态。
.
第④次挥手:客户机收到连接释放报文后,还需发出确认,因此确认报文中的ACK=1,确认号ack=w+1,序号seq=u+1。但此时TCP连接还需要等待2MSL(最长报文段寿命)后,客户机才进入最后的CLOSED(连接关闭)状态。

五、TCP连接与释放的总结

这里简单的对TCP三次握手与四次挥手的过程进行总结,主要记住每个阶段中的主要字段的状态即可:
(1)TCP连接的建立(三次握手):
① SYN=1,seq=x。
② SYN=1,ACK=1,seq=y,ack=x+1。
③ ACK=1,seq=x+1,ack=y+1。
.
(2)TCP连接的释放(四次挥手):
① FIN=1,seq=u。
② ACK=1,seq=v,ack=u+1。
③ FIN=1,ACK=1,ack=u+1,seq=w
④ ACK=1,seq=u+1,ack=w+1

六、结束语

好了,对于TCP的三次握手以及四次挥手的介绍就到这里了,我是风行男孩,咱们有缘再见!(码字不易,如本篇文章若有帮助,留个赞当痕迹就好)

相关文章:

计算机网络知识点复习——TCP协议的三次握手与四次挥手(连接与释放)

TCP协议的三次握手与四次挥手(连接与释放) 一、前言二、简单的知识准备1. TCP协议的主要特点2. TCP报文段 三、TCP连接的建立(三次握手)四、TCP连接的释放(四次挥手)五、TCP连接与释放的总结六、结束语 一、…...

SpringDataJPA系列(7)Jackson注解在实体中应用

SpringDataJPA系列(7)Jackson注解在实体中应用 常用的Jackson注解 Springboot中默认集成的是Jackson,我们可以在jackson依赖包下看到Jackson有多个注解 一般常用的有下面这些: 一个实体的示例 测试方法如下: 按照上述图片中的序号做个简…...

【Spring Boot 3】【Web】统一封装 HTTP 响应体

【Spring Boot 3】【Web】统一封装 HTTP 响应体 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总…...

Linux如何做ssh反向代理

SSH反向代理是一种通过SSH协议实现的安全远程访问方式,它允许客户端通过SSH连接到一台具有公网IP的代理服务器,然后这台代理服务器再将请求转发给内部网络中的目标主机。以下是实现SSH反向代理的步骤: 一、准备工作 确保服务器配置&#xff…...

Verilog语法+:和-:有什么用?

Verilog语法:和-:主要用于位选择,可以让代码更简洁。 一、位选择基础 在Verilog中,位选择可以通过直接索引来实现,例如: reg [7:0] data; wire select_a; wire [2:0] select_b; assign select_a data[3]; assign select_b …...

stm32F103 串口2 中断 无法接收指定字符串 [已解决]

stm32F103 串口2中断接收指定字符串 USART 初始化和中断配置示例中断处理函数示例关键点总结 确保在串口配置中正确使能空闲中断 ( USART_IT_IDLE) 是关键。这个中断可以帮助你在串口接收一帧数据完成后,进行相应的处理和分析。 为了确保你在串口配置时能避免类似问…...

Matlab/Simulink和AMEsim联合仿真(以PSO-PID算法为例)

目录 安装软件和配置环境变量 Matlab/Simulink和AMEsim联合仿真详细流程 非常重要的一点 Simulink模型和AMEsim模型用S-Function建立连接 从AMEsim软件打开Matlab Matlab里的设置 Matlab的.m文件修改(对于PSO-PID算法) 运行程序 我印象中好像做过…...

超声波测距模块HC-SR04(基于STM32F103C8T6HAL库)

超声波测距模块参考资料 1.电路连接及引脚配置 触发信号PA3只需要输出10us的高电平,所以直接设置成 普通的GPIO端口即可;回响信号使用外部中断,上升沿信号产生外部中断,打开定时器,下降沿再产生一次中断,读…...

Go语言结构体和元组全面解析

Go语言中的复合类型与其应用 在编程中,标准类型虽然方便,但无法满足所有需求。Go通过支持结构体和元组类型,为开发者提供了自定义数据类型的能力。本文将介绍如何定义结构体、如何使用指针操作结构体、如何通过元组返回多个值等内容&#xf…...

集成电路学习:什么是SDK软件开发工具包

SDK:软件开发工具包 SDK,即Software Development Kit(软件开发工具包),是一套由软件提供商或其他组织提供的开发工具集合。这些工具旨在帮助开发者更快速、更便捷地创建、测试和部署软件应用程序。以下是对SDK的详细解…...

java后端如何发送http请求

用java后端发送请求需要用到的一个工具包为HttpClient。HttpClient是Apache的一个子项目&#xff0c;是高效的、功能丰富的支持HTTP协议的客户端编程工具包。 引入依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&…...

装WebVideoCreator记录

背景&#xff0c;需要在docker容器内配置WebVideoCreator环境&#xff0c;配置npm、node.js WebVideoCreator地址&#xff1a;https://github.com/Vinlic/WebVideoCreator 配置环境&#xff0c;使用这个教程&#xff1a; linux下安装node和npm_linux离线安装npm-CSDN博客 1…...

【编程底层思考】什么是GC Roots

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;GC Roots是垃圾收集&#xff08;Garbage Collection&#xff0c;GC&#xff09;过程中的起点&#xff0c;用于确定对象是否可被回收。GC Roots集合是一组必须活跃的&#xff08;即必须保留在内存中的&#xff09;引用&am…...

[STL --stack_queue详解]stack、queue,deque,priority_queue,容器适配器

stack stack介绍 1、stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。 2、stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作为其底层的容器&#xff0c;并提供…...

240907-Gradio插入Mermaid流程图并自适应浏览器高度

A. 最终效果 B. 示例代码 import gradio as grmermaid_code """ <iframe srcdoc <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width" />…...

ubuntu 安装python3 教程

本篇教程,主要介绍如何在Ubuntu上安装python3教程。 1、查看是否有python 在安装前,首先看看自己系统上,是否存在python环境,可能有些系统,默认就安装过python,如果已经有python了,可以直接跳过安装教程。 2、安装步骤 apt update && apt install -y python3 p…...

NOR Flash、NAND Flash……

存储类型描述Compact Flash一种用于便携式电子设备的数据存储设备&#xff0c;于1994年由SanDisk公司推出。SRAM静态随机存取存储器&#xff0c;不需要刷新电路即能保存数据&#xff0c;速度快但集成度低、功耗大。PSRAM伪静态随机存取存储器&#xff0c;结合了SRAM和DRAM的特点…...

【高性能代码】提高代码的性能有哪些方式,如何写出高性能代码,一段代码如何提高这段代码的执行性能,高性能代码开发

【高性能代码】提高代码的性能有哪些方式&#xff0c;如何写出高性能代码&#xff0c;一段代码如何提高这段代码的执行性能&#xff0c;高性能代码开发 提高代码的性能是软件开发中一个重要的方面&#xff0c;尤其是在处理大数据、高并发或实时性要求较高的应用时。以下是一些提…...

2024整理 iptables防火墙学习笔记大全_modepro iptables

Iptables名词和术语 2iptables表&#xff08;tables&#xff09;和链&#xff08;chains&#xff09; 2表及其链的功能 2  Filter表 2  NAT表 2  MANGLE表 2iptables的工作流程 3iptables表和链的工作流程图 3 二、 iptables实战应用 4iptables命令参数详解 4  iptable…...

实验记录 | 点云处理 | K-NN算法3种实现的性能比较

引言 K近邻&#xff08;K-Nearest Neighbors, KNN&#xff09;算法作为一种经典的无监督学习算法&#xff0c;在点云处理中的应用尤为广泛。它通过计算点与点之间的距离来寻找数据点的邻居&#xff0c;从而有效进行点云分类、聚类和特征提取。本菜在复现点云文章过程&#xff…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...