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

news2024/11/28 0:55:45

系列文章目录

什么是计算机网络?
什么是网络协议?
计算机网络的结构
数据交换之电路交换
数据交换之报文交换和分组交换
分组交换 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结束,进入关闭状态。

在这里插入图片描述

服务器:

在这里插入图片描述

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

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

相关文章

SpringBoot开发组件总结

大家好,今天学习了SpringBoot中间件开发,在学习后总结记录下。 在开发的过程中,把一些公共的非业务的代码提炼出来,做成一个公用的组件,减少开发成本和风险,今天学习的是一个白名单控制组件,记…

PHP之getimagesize获取网络图片尺寸、类型信息

[0]:图像宽度(以像素为单位)[1]:图像高度(以像素为单位)[2]:图像类型的标识符[3]:包含字符串的属性,用于布局img元素(例如:width"xxx" …

CSS中calc(80vw - 100px)为什么不加空格会不生效?

问题起因 今天再使用calc时发现无法生效,我的写法是: width: calc(100%-100px);页面无效果,加空格后就发现有效果了: width: calc(100% - 100px);有亿点疑惑,这是为什么? calc是什么? css3的…

基于51单片机土壤湿度检测及自动浇花系统仿真(带时间显示)

wx供重浩:创享日记 对话框发送:单片机浇花 获取完整源码源文件仿真源文件原理图源文件论文报告等 单片机土壤湿度检测及自动浇花系统仿真(带时间显示) 具体功能: (1)液晶第一行显示实际湿度&am…

成员变量为动态数据时不可轻易使用

问题描述 业务验收阶段,遇到了一个由于成员变量导致的线程问题 有一个kafka切面,用来处理某些功能在调用前后的发送消息,资产类型type是成员变量定义; 资产1类型推送消息是以zichan1为节点;资产2类型推送消息是以zi…

python算法例6 快速幂

1. 问题描述 计算,其中a、b和n都是32位的非负整数。 2. 问题示例 例如:。 3.代码实现 计算a的n次幂对b取余,可以使用快速幂算法。这个算法通过减少乘法和取余操作的次数来提高效率。 def pow_mod(a, n, b):result 1while n > 0:if …

园区网真实详细配置大全案例

实现要求: 1、只允许行政部电脑对全网telnet管理 2、所有dhcp都在核心 3、wifi用户只能上外网,不能访问局域网其它电脑 4、所有接入交换机上bpdu保护 5、只允许vlan 10-40上网 5、所有接入交换机开dhcp snoop 6、所有的交换机指定核心交换机为ntp时间服务…

【Unity数据交互】游戏中常用到的Json序列化

ˊˊ 👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏&#xff1…

独创改进 | RT-DETR 引入双向级联特征融合结构 RepBi-PAN | 附手绘结构图原图

本专栏内容均为博主独家全网首发,未经授权,任何形式的复制、转载、洗稿或传播行为均属违法侵权行为,一经发现将采取法律手段维护合法权益。我们对所有未经授权传播行为保留追究责任的权利。请尊重原创,支持创作者的努力,共同维护网络知识产权。 文章目录 YOLOv6贡献RepBi-…

面向网络安全-Python语言

目录 1、变量 2、字符串 3、列表 4、字典 5、网络 6、条件选择语句 7、异常处理 1、变量 变量是指储存在某个内存地址上的数据 主要有:整型数、实数、布尔值、字符串、列表、元组、字典 这些数据在声明后,解释器就会自动确定每个变量的类型&…

【云原生 | Docker】Linux 定时自动化备份Mysql数据到本地 Windows 最佳实践,确定不来看看?

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

C#,数值计算——偏微分方程,Mgfas的计算方法与源程序

1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Mgfas { public int n { get; set; } public int ng { get; set; } public double[,] uj; public double[,] uj1 { get; …

云安全-攻防视角下如何看待堡垒机

0x00 堡垒机简介 堡垒机是种网络安全设备,用于保护和管理企业内部网络与外部网络之间的访问。它作为一种中间节点,提供安全的访问控制和审计功能,用于保护内部网络免受未经授权的访问和攻击。堡垒机通常被用作跳板服务器,即堡垒机…

2023辽宁省数学建模A题铁路车站的安全标线完整原创论文详细讲解(含matlab代码)

大家好呀,从发布赛题一直到现在,总算完成了辽宁省数学建模A题完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 B预计下午两点前更新完毕,A全…

【错误解决方案】TypeError: gca() got an unexpected keyword argument ‘projection‘

1. 错误提示 在 python程序中,使用Matplotlib库中的 gca() 函数出现错误,提示“TypeError: gca() got an unexpected keyword argument projection”。 2. 解决方案 这个错误的原因是 gca() 函数并不接受 projection 这个关键字参数。 gca() 函数是用来…

半导体芯片制造行业MES系统解决方案

半导体产业作为现代电子科技的重要支柱,驱动着电子设备和通信技术的飞速发展。随着技术不断演进,半导体制造企业面临着越来越多的挑战,如高度复杂的工艺流程、全球化的竞争、质量控制的要求以及能源效率等问题。 为了应对这些挑战&#xff0…

学电脑编程零基础,计算机编程入门先学什么

学电脑编程零基础,计算机编程入门先学什么,建议先从容易学习的语言入手,比如中文编程。 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件&…

第六章 Python函数

系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定…

美颜SDK哪家便宜?企业级美颜工具包

在当今竞争激烈的企业宣传领域,一张优质的照片可以为企业带来巨大的价值。然而,由于各种原因,拍摄的照片、视频往往存在一些瑕疵,如肤色不均、背景杂乱等。为了解决这个问题,美摄科技特别推出了面向企业的专业美颜SDK&…