系列文章目录
数通王国历险记(2)
目录
总的来说:就是PC1向PC2发出一个同步报文说,我想和你建立连接
总的来说:就是PC2同意和PC1建立连接,同时确认告诉PC1自己也想和PC1建立连接和的自己已经收到了PC1的同步报文的这件事
总的来说:就是PC1对PC2发送消息说:我已经收到你的同步报文和确认报文了,关系就此建立。
前言
随着华为公司的不断发展,数据通信这门技术也越来越重要,很多人都开启了数据通信学习,本文就介绍了存在TCP协议的三次握手和四次挥手,是我们通过数通王国的第二站(我们在文章中使用的是华为的ENSP软件)。
一、TCP我们称之为可靠的传输层协议,为什么称它为可靠呢?
因为它的建立经历了三次握手,它的关闭经历了四次挥手。
总而言之就是它的每一个步骤都需要确认,不确认就不能经行下一步操作,所以非常可靠
这就是TCP为什么称之为可靠性的协议
二、TCP的建立——三次握手
先看图了解一下,并且我们的讲解是根据这个图进行讲解的:
编辑
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.第一次握手
编辑
我们分析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,第二次握手
编辑
当这个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,第三次握手
编辑
当这个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关闭----四次挥手
编辑
1,为什么是四次挥手呢?
因为它是有从左到右,PC1要跟PC2断开连接,PC2要给PC1回复确认,同意PC1的断开连接这是从左到右反向的
从右到左呢,也是一样的,PC2也要和PC1断开连接,然后PC1同意断开连接、
两次的一来一回刚好是四次,所以叫四次挥手
TCP这个协议必须有确认机制的,没有确认没办法正常的完成交互
刚才通过TCP的三次握手之后建立之后,就可以正常通信了
当数据传输完成之后,TCP需要通过四次挥手机制断开TCP连接,释放系统资源
我们刚才所说的有两个方向,一共需要两次,一个是右到左需要两次,一个是左到右需要两次,所以2+2刚好就是4,所以我们称之为四次挥手。
2.第一次挥手
提前知道:
因为四次挥手有两次是重复的,只不过是方向不同,所以我们在此就介绍从左到右方向的一来一回的挥手,而且挥手是建立在三次握手之后的事情,握手里面提到的标识符什么意思为我们就不多概述了,我们就以大家已经理解了为前提去介绍四次挥手。
编辑
第一次挥手:
突然pc1主动向pc2发起断开连接请求,请求断开的一个标志位叫FIN,FIN就是结束的意思,并且还带了一个ACK确认,因为什么呢?,PC1在发送请求跟pc2断开的连接之前,pc2肯定有发数据给你,这些数据PC1你收到了没有,所以PC1是不是要对这个行为做一个确认,所以我PC1不但要请求断开,并且请求断开的前提是我PC1已经收到PC2发过了的所有数据,这也是为什么PC1发的报文里面的标志位,带有的这两个字段
Flags:FIN 就是断开连接的意思
3.第二次挥手
编辑
第二次挥手:
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,四次挥手为什么有两次重复的挥手?
编辑
左边向右边断开之后,不代表右边的和左边断开了,双向的所以才需要四次挥手
右边和左边类似,所以需要四次挥手才能彻底断开连接
从右到左就轮到了pc2向pc1发送请求断开连接的报文请求,标志位和pc1发送的标志位是相同的
那我发这个请求带断开之前,我一定要对你,之前发过来的数据进行一个确认,因为数据没有发完之前,
你请求断开就不合理了,要跟你进行一个确认,那之后在对你进行请求断开,接着我们pc1对它进行回复,
所以一来一回,一来一回,一共两次,就是变成了四次挥手
完成四次挥手PC1和PC2就断开连接了
5,关于四次挥手细节
- 主动发起的断开连接里面会包含对断开之前的接收数据的确认。(flags:fin+ack)
- 被请求方在收到主动提出断开的请求后,会对该请求单独回复确认报文(第二次挥手)
- 截止到目前这个位置从左到右的连接断开。
- 右边到左边类似,所以一共需要四次挥手才能彻底断开连接。
总结
恭喜你,你通过本章的学习通过了,数通王国的第二个关卡,后面还有很多的关卡,数通王国还有很多宝藏等着你去探险,加油!只为成为更好的自己。