数通王国历险记之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的建立——三次握手

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

数通王国历险记之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.第一次握手

数通王国历险记之TCP协议的三次握手和四次挥手

我们分析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,第二次握手

数通王国历险记之TCP协议的三次握手和四次挥手

当这个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,第三次握手

数通王国历险记之TCP协议的三次握手和四次挥手

当这个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关闭----四次挥手

数通王国历险记之TCP协议的三次握手和四次挥手

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

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

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

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

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

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

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

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

2.第一次挥手

提前知道:

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

数通王国历险记之TCP协议的三次握手和四次挥手

第一次挥手:

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

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

3.第二次挥手

数通王国历险记之TCP协议的三次握手和四次挥手

 第二次挥手:

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,四次挥手为什么有两次重复的挥手?

数通王国历险记之TCP协议的三次握手和四次挥手

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

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

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

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

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

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

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

5,关于四次挥手细节

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

总结

恭喜你,你通过本章的学习通过了,数通王国的第二个关卡,后面还有很多的关卡,数通王国还有很多宝藏等着你去探险,加油!只为成为更好的自己。文章来源地址https://www.toymoban.com/news/detail-513031.html

到了这里,关于数通王国历险记之TCP协议的三次握手和四次挥手的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++历险记】面向对象|菱形继承及菱形虚拟继承

    个人主页:兜里有颗棉花糖💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【C++之路】💌 本专栏旨在记录C++的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长,共同进步。🍓 单继承:一个子类 只有一个直接父类 时称这个继承

    2024年02月10日
    浏览(39)
  • 【C++历险记】国庆专辑---探索多态迷宫的代码之旅

    🎉博客主页:.小智 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:C++终极篇 🎉代码仓库:小智的代码仓库 多态多态顾名思义就是多种形态,比如我们要完成某一件事情,不同的对象去完成,我们产生的结果是不一样的。 举个栗子我们平时的买火车票,就有这几种分

    2024年02月08日
    浏览(33)
  • 图灵日记之java奇妙历险记--抽象类和接口

    在面向对象的概念中,所有对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息描绘一个具体的对象,这样的类就是抽象类 使用abstract修饰的方法称为抽象方法 使用abstract修饰的类称为抽象类 抽象类是不可以进行实例化的

    2024年02月03日
    浏览(44)
  • 图灵日记之java奇妙历险记--数据类型与变量&&运算符

    看下面这个栗子,宝子们 输出的\\\"cheer up!!!\\\"就是字面变量 字面常量的值在程序的整个生命周期中是不变的 字面常量的分类: 字符串常量 整形常量 浮点数常量 字符常量 布尔常量:只有两种true和false 空常量 注意:字符串,整形,浮点型,字符型以及布尔型,在java中都被叫作数据类型

    2024年02月04日
    浏览(40)
  • 林浩然与杨凌芸的Java时光魔法:格式化历险记

    林浩然与杨凌芸的Java时光魔法:格式化历险记 The Java Time Odyssey of Lin Haoran and Yang Lingyun: A Formatting Adventure 在编程世界的一隅,有一个名叫林浩然的程序员。他是个Java大侠,对代码世界的法则了如指掌,尤其擅长驾驭时间这个变幻莫测的维度。而他的生活伴侣、同样是码界巾

    2024年02月20日
    浏览(37)
  • 振南技术干货集:znFAT 硬刚日本的 FATFS 历险记(9)

    注解目录 1、znFAT 的起源 1.1 源于论坛 (那是一个论坛文化兴盛的年代。网友 DIY SDMP3 播放器激起了我的兴趣。) 1.2 硬盘 MP3 推了我一把 (“坤哥”的硬盘 MP3 播放器,让我深陷 FAT 文件系统不能自拔。) 1.3 我的导师-- 顾国昌教授 (哈军工时期的老教授,德高望重的人生导师

    2024年02月03日
    浏览(40)
  • Hadoop历险记(七 Hive配置和启动hiveservice2服务)

    之前讲了hive的元数据,它存储着hiveSQL映射和hdfs具体文件数据的对应关系。 但是元数据存在单独的mysql中 直接将它暴露给外部是不安全的,所以hive特别增加了一个元数据服务。 它作为元数据和外部客户端之间的一个中间人。 metastore有三种服务配置模式 同时也可以说这是h

    2024年02月03日
    浏览(39)
  • 前台测试转后台优化历险记,应届生薪资8K逆袭,从此扶摇直上九万里!

    优橙教育每一期都会有不少从前台测试转到后台的小伙伴应邀而来,其实每个人的经历都是大致相同的,这时候肯定会有很多小伙伴问,为什么出来花钱出来参加培训而不是在项目上转呢? 或许是因为在项目上摸爬滚打太久了,吃不下领导画的大饼了;也或许是因为确实整天

    2024年02月13日
    浏览(44)
  • K8S历险记-从零开始kubeadm单机安装部署k8s保姆级教程

    1.查看系统版本信息以及修改配置信息 1.1 查看cpu信息 k8s安装至少需要2核2G的环境,否则会安装失败 1.2 安装k8s时,临时关闭swap ,如果不关闭在执行kubeadm部分命令会报错 1.3 安装k8s时,可以临时关闭selinux,减少额外配置 1.4 关闭防火墙 1.5 设置网桥参数 1.6 修改hosts文件

    2024年02月08日
    浏览(48)
  • 【BUG历险记】vivado报错:binding vhdl entity ‘ xxxxx ‘does not have port ‘ xxxxx ‘解决方案

    🏔【BUG历险记】 vivado报错:binding vhdl entity xxxxx \\\' does not have port \\\' xxxxx \\\'解决方案 我在编写雷达的脉冲压缩仿真时,先例化了FFT和复数乘法器,并仿真验证通过了;再例化IFFT,结果仿真时出现错误,前面仿真通过的复数乘法器报错。说是没有aclk引脚,实际上是有的。 更改代

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包