一文彻底搞定TCP协议的三次握手和四次挥手

简介: 通过本章的探险,你将学会如何TCP协议的三次握手和四次挥手

系列文章目录

数通王国历险记(2)


目录

前言

一、TCP我们称之为可靠的传输层协议,为什么称它为可靠呢?

二、TCP的建立——三次握手

1,提前知道TCP协议报文中都有些啥?

2.第一次握手

总的来说:就是PC1向PC2发出一个同步报文说,我想和你建立连接

3,第二次握手

总的来说:就是PC2同意和PC1建立连接,同时确认告诉PC1自己也想和PC1建立连接和的自己已经收到了PC1的同步报文的这件事

4,第三次握手

总的来说:就是PC1对PC2发送消息说:我已经收到你的同步报文和确认报文了,关系就此建立。

三,TCP关闭----四次挥手

1,为什么是四次挥手呢?

2.第一次挥手

提前知道:

因为四次挥手有两次是重复的,只不过是方向不同,所以我们在此就介绍从左到右方向的一来一回的挥手,而且挥手是建立在三次握手之后的事情,握手里面提到的标识符什么意思为我们就不多概述了,我们就以大家已经理解了为前提去介绍四次挥手。

3.第二次挥手

4,四次挥手为什么有两次重复的挥手?

5,关于四次挥手细节

总结


前言

随着华为公司的不断发展,数据通信这门技术也越来越重要,很多人都开启了数据通信学习,本文就介绍了存在TCP协议的三次握手和四次挥手,是我们通过数通王国的第二站(我们在文章中使用的是华为的ENSP软件)。


一、TCP我们称之为可靠的传输层协议,为什么称它为可靠呢?

因为它的建立经历了三次握手,它的关闭经历了四次挥手。

总而言之就是它的每一个步骤都需要确认,不确认就不能经行下一步操作,所以非常可靠

这就是TCP为什么称之为可靠性的协议

二、TCP的建立——三次握手

先看图了解一下,并且我们的讲解是根据这个图进行讲解的:

image.gif编辑

1,提前知道TCP协议报文中都有些啥?

首先我们看到的有IP头部和TCP头部

1,IP头部里面存放的是源IP和目的IP

源IP:就是发送方的IP地址

目的IP:就是接收方的IP地址

2,TCP头部里面存在

Seq代表是发送数据大小,是随机的

Flags标志位,指示当前报文是什么类型

解释: 就是这个标志位可能填充的是怎么一个字段

Flags的报文类型有两种1,SYN 2,ACK

SYN:   就是同步的意思

解释: 就是PC1想和PC2建立连接,这就是同步,是由PC1主动发起的,PC2接受进行。

ACK:就是确认的意思

解释:PC1刚刚给PC2发报文说建立连接吗,PC2同意了,并且要表达自己已经知道PC1要跟自己建立连接这个事情,所以,给PC1的回复报文里面就要有一定的确认,让PC1知道自己已经接收到了请求建立的报文。

发给PC1的确认分为两种:一种是隐藏的,另一种是明文的。

2.第一次握手

image.gif编辑

我们分析PC1发送的TCP头部当中的信息:

总的来说:就是PC1向PC2发出一个同步报文说,我想和你建立连接

Seq=a:是什么意思呢:就是PC1会发送一个数据,序列号等于a(Seq=a),可以理解为PC1给PC2发了一个a大小的数据。

Ack=0:是什么意思呢?:可以理解为PC1当前的一个确认等于0

Flags:SYN置位:表示的要同步,什么意思呢,就是PC1要和PC2建立联系

通俗来说就是pc1和pc2说,我要和你建立TCP的连接

PC2接到来自PC1的请求建立报文就表示第一次握手结束了。

3,第二次握手

image.gif编辑

当这个pc2收到了pc1的建立连接的请求之后

总的来说:就是PC2同意和PC1建立连接,同时确认告诉PC1自己也想和PC1建立连接和的自己已经收到了PC1的同步报文的这件事

我们分析PC2发送的TCP头部当中的信息:

Seq=b:pc2会发送一个随机大小的序列号等于b,也可以理解为大小为b的数据

Ack=a+1:是什么意思呢?:

就是说,PC1刚刚不是给PC2发了一个大小为a的数据了,所以PC2收到之后就要告诉PC1,我已经收到这个大小为a的数据了,接下来你可以从a+1这个大小开始发。

举个例子:

就好比如果pc1之前发的数据是5,pc2接受到后和pc1说你下次从6开始给我发报文,下一次PC1可以从6开始给PC2发报文

Flags:SYN置位:表示也是要同步,就是PC2要和PC1建立联系

通俗来说就是pc2和pc1说,我要也要和你建立TCP的连接

Flags:ACK置位:PC2主动向PC1发起连接,同时PC2对PC1之前从左到右发过来的请求做一个确认。

通俗来说就是:

PC1刚才发报文给PC2说要建立连接,PC2说我也要跟你建立连接,并且我已经知道你想和我建立连接l就是Ack确认的意思

4,第三次握手

image.gif编辑

当这个pc1收到了pc2的建立连接和确认的报文之后

我们分析PC1发送的TCP头部当中的信息:

总的来说:就是PC1对PC2发送消息说:我已经收到你的同步报文和确认报文了,关系就此建立。

Seq=a+1:因为刚刚PC2发过来想请求想和PC1建立连接的时候的Ack里面和pc1说了,下一次你给我发数据的时候,可以从a+1开始发,因为PC1之前发的是a,pc2已经全部收到了,那pc1就从a+1开始发

隐含的含义:从侧面暗示着,pc1已经收到了pc2的主动发过来的这个握手报文

Ack=b+1:是什么意思呢:

并且PC2刚刚是不是也给PC1发了一个数据啊,大小是b啊,所以PC1也会对这个数据进行确认,是b+1代表PC1已经收到了PC2从右往左发送的这个报文,这个数据大小为b,所以下次PC2可以从b+1开始给PC1发数据,

Flags:ACK置位

因为这个报文是对它的第二次握手的报文的一个确认,所以标志位只有确认,也就是Ack,因为pc2已经向pc1同步过,pc1也向pc2同步过,最后pc1回复一个报文告诉pc2,我收到你的,同步报文和确认报文了

所以PC1和PC2连接到此正式建立

三,TCP关闭----四次挥手

image.gif编辑

1,为什么是四次挥手呢?

因为它是有从左到右,PC1要跟PC2断开连接,PC2要给PC1回复确认,同意PC1的断开连接这是从左到右反向的

从右到左呢,也是一样的,PC2也要和PC1断开连接,然后PC1同意断开连接、

两次的一来一回刚好是四次,所以叫四次挥手

TCP这个协议必须有确认机制的,没有确认没办法正常的完成交互

刚才通过TCP的三次握手之后建立之后,就可以正常通信了

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

我们刚才所说的有两个方向,一共需要两次,一个是右到左需要两次,一个是左到右需要两次,所以2+2刚好就是4,所以我们称之为四次挥手

2.第一次挥手

提前知道:

因为四次挥手有两次是重复的,只不过是方向不同,所以我们在此就介绍从左到右方向的一来一回的挥手,而且挥手是建立在三次握手之后的事情,握手里面提到的标识符什么意思为我们就不多概述了,我们就以大家已经理解了为前提去介绍四次挥手。

image.gif编辑

第一次挥手:

突然pc1主动向pc2发起断开连接请求,请求断开的一个标志位叫FIN,FIN就是结束的意思,并且还带了一个ACK确认,因为什么呢?,PC1在发送请求跟pc2断开的连接之前,pc2肯定有发数据给你,这些数据PC1你收到了没有,所以PC1是不是要对这个行为做一个确认,所以我PC1不但要请求断开,并且请求断开的前提是我PC1已经收到PC2发过了的所有数据,这也是为什么PC1发的报文里面的标志位,带有的这两个字段

Flags:FIN 就是断开连接的意思

3.第二次挥手

image.gif编辑

第二次挥手:

PC1跟PC2请求断开,一般来说,PC2确定,也可以跟PC1断开,所以PC2就回复了,PC1刚发过来的数据要确认PC2收到了Ack301,也就是下一次PC2可以从301的大小开始给pc1发数据,所以pc2就从301给PC1发数据大小,Ack等于102,为什么因为PC1之前发过来的数据是101,那pc2就从102给pc1发,代表着pc2已经收到101了,pc1下一次就可以从102,给pc2发,

确认pc1下一次从102给pc2发了,然后它的标志位就是Flags:ACK,表示PC2对pc1刚才发过来的请求断开的连接表示同意

4,四次挥手为什么有两次重复的挥手?

image.gif编辑

左边向右边断开之后,不代表右边的和左边断开了,双向的所以才需要四次挥手

右边和左边类似,所以需要四次挥手才能彻底断开连接

从右到左就轮到了pc2向pc1发送请求断开连接的报文请求,标志位和pc1发送的标志位是相同的

那我发这个请求带断开之前,我一定要对你,之前发过来的数据进行一个确认,因为数据没有发完之前,

你请求断开就不合理了,要跟你进行一个确认,那之后在对你进行请求断开,接着我们pc1对它进行回复,

所以一来一回,一来一回,一共两次,就是变成了四次挥手

完成四次挥手PC1和PC2就断开连接了

5,关于四次挥手细节

    1. 主动发起的断开连接里面会包含对断开之前的接收数据的确认。flags:fin+ack
    2. 被请求方在收到主动提出断开的请求后,会对该请求单独回复确认报文(第二次挥手
    3. 截止到目前这个位置从左到右的连接断开。
    4. 右边到左边类似,所以一共需要四次挥手才能彻底断开连接。

    总结

    恭喜你,你通过本章的学习通过了,数通王国的第二个关卡,后面还有很多的关卡,数通王国还有很多宝藏等着你去探险,加油!只为成为更好的自己。

    相关实践学习
    通过Ingress进行灰度发布
    本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
    容器应用与集群管理
    欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
    相关文章
    |
    5月前
    |
    负载均衡 网络协议 算法
    TCP 三次握手和四次挥手详解
    TCP 三次握手和四次挥手详解
    65 3
    |
    7月前
    |
    网络协议
    TCP三次握手和四次挥手
    TCP三次握手和四次挥手
    |
    7月前
    |
    网络协议
    |
    网络协议 安全
    网络:TCP协议三次握手与四次挥手
    网络:TCP协议三次握手与四次挥手
    80 0
    |
    7月前
    |
    缓存 网络协议 数据处理
    TCP中的三次握手和四次挥手
    我们知道TCP是运输层的面向连接的可靠的传输协议。**面向连接的**,指的就是在两个进程发送数据之前,必须先相互“握手”,确保两进程可以进行连接。并且这个传输是点对点的,即一个TCP连接中只有一个发送方和接收方;**可靠的**,指的是在任何网络情况下,在TCP传输中数据都将完整的发送到接收方。
    72 0
    TCP中的三次握手和四次挥手
    |
    7月前
    |
    网络协议 算法
    TCP 三次握手和四次挥手
    TCP 三次握手和四次挥手
    85 0
    TCP 三次握手和四次挥手
    |
    7月前
    |
    网络协议 网络架构
    🔥🔥TCP协议:三次握手、四次挥手,你真的了解吗?
    这篇面试文章主要介绍了TCP协议的网络分层以及TCP的三次握手和四次挥手的原理。TCP协议的分层结构和三次握手、四次挥手的原理确保了数据的可靠传输和连接的可靠建立与断开。这些概念和原理在网络工程中起着重要的作用,并且是网络面试中常见的考点。
    135 1
    |
    7月前
    |
    存储 网络协议 算法
    TCP协议的三次握手与四次挥手
    TCP协议的三次握手与四次挥手
    61 2
    |
    网络协议 数据安全/隐私保护
    TCP协议握手挥手
    TCP握手挥手
    52 2
    |
    网络协议 安全
    TCP协议为什么需要三次握手和四次挥手?
    TCP协议为什么需要三次握手和四次挥手?
    180 0