TCP的三次握手、四次挥手!就像打电话一样简单!

目录

学前必会

三次握手详解

和打电话一样

为什么必须要三次?

四次挥手详解

和挂电话一样

为什么要四次挥手?

第四次为何要等待 2*MSL?


相关面试题:

  • 说一下三次握手、四次挥手的过程
  • 三次握手四次挥手的目的是什么?
  • 为什么要三次握手?两次不行吗?
  • 为什么挥手要四次?
  • 每次的状态是什么样的?

学前必会

三次握手四次挥手的作用

在TCP/IP模型中,我们都知道在传输层的TCP协议是面向连接的能保证可靠的数据传输,而学习三次握手、四次挥手其实就是学习TCP协议的连接断开过程

三次握手四次挥手需要标志位

而学习三次握手四次挥手,我们需要用到的有标志位的几个内容

  • ACK:acknowledgement 确认报文
  • seq:sequence 顺序
  • SYN:synchronous 建立联机
  • FIN:finish 结束

三次握手详解

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

第一次:客户端发送一个带有SYN( sql=x )标志的数据包给服务端,客户端状态变为syn_sent状态。

第二次:服务端接收成功后,回传一个带有SYN(sql=y)/ACK(sql=x+1)标志的数据包传递确认信息。其中syn代表询问你能否收到我的信息,ack应答我收到了你的信息。

第三次:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。

和打电话一样

三次询问可以确定我们都能说话,且都能听到对方说话。

其实三次握手就是确定客户端和服务区能收能发的过程。

为什么必须要三次?

从打电话那个图我们也可以很好理解

三次握手就能确认双方收发功能都正常,缺一不可。

若缺少第三次握手,服务器是无法确定自己可以发送信息的,而四次又没有必要,所以三次刚好,即能完成任务又不浪费资源~

四次挥手详解

挥手其实就是断开连接的过程!

第一次挥手:客户端发送一个FIN(seq=x)的数据包给服务器,告诉对方我发完了,自己进入FIN-WAIT-1状态。

第二次挥手:服务区收到后,发送一个ACK(ack=x+1)的数据包给客户端,然后服务器变为CLOSE-WAIT状态,客户端收到后进入FIN-WAIT-2状态。

第三次挥手:服务器发送一个FIN(seq=y)的数据包给客户端,服务器变为LAST-ACK状态。

第四次挥手:客户端收到服务器的FIN后,返回给服务器一个ACK(seq=y+1)的数据包,客户端进入TIME-WAIT状态,服务器收到ACK后进入CLOSE状态。如果客户端等到2msl后依旧没有收到信息则默认服务器已正常关闭,然后自己也进入关闭状态。

和挂电话一样

为什么要四次挥手?

TCP 是全双工通信,可以双向传输数据。

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。

当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。

和三次握手一样,但是挥手多了一次就是因为 中间可能还有信息没有发完,所以第二次和第三次的ACK和FIN不能合并发送!没有发完的信息在这两次回收之前发完!

这就好像打电话时候的 "你等我把话说完" "巴拉巴拉巴拉~~" "好了,挂了吧"

第四次为何要等待 2*MSL?

第四次挥手时,客户端发送给服务器的 ACK 有可能丢失,如果服务端因为某些原因而没有收到 ACK 的话,服务端就会重发 FIN,如果客户端在 2*MSL 的时间内收到了 FIN,就会重新发送 ACK 并再次等待 2MSL,防止 Server 没有收到 ACK 而不断重发 FIN。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java拦截器(Interceptor)和过滤器(Filter)实例详解

一、Java过滤器和拦截器 1.1、过滤器(Filter) Filter过滤器,是Servlet(Server Applet)技术中的技术,开发人员可以通过Filter技术,管理web资源,可以对指定的一些行为进行拦截,例如URL级别的权限…

Mysql创建视图中文乱码修改docker里的配置

问题现象: 创建的视图查询无数据,查看创建语句得知,where条件里的中文变成了“???”。 在客户端里查询字符编码: show VARIABLES like %char%;就是character_set_server导致的,它配置的竟然不是utf8,…

【数据结构】线性表(十)队列:循环队列及其基本操作(初始化、判空、判满、入队、出队、存取队首元素)

文章目录 队列1. 定义2. 基本操作 顺序队列循环队列1. 头文件和常量2. 队列结构体3. 队列的初始化4. 判断队列是否为空5. 判断队列是否已满6. 入队7. 出队8. 存取队首元素9. 获取队列中元素个数10. 打印队列中的元素9. 主函数10. 代码整合 堆栈Stack 和 队列Queue是两种非常重要…

结构体学习

struct是结构体关键字 我们用C语言中通常都是用关键字来定义类型变量。例如我们的整型变量,int book;是用整型关键字定义出来的。同样的,struct book同样是一个类型,不过我们叫他结构体。我认为的结构体的作用,无外乎是将一些毫…

文件打包下载excel导出和word导出

0.文件下载接口 请求 GET /pm/prj/menu/whsj/download/{affixId} 文件affixId多个id以逗号隔开。多个文件会以打包得形式。 1.Excel导出 1.0接口 POST 127.0.0.1:8400/pm/io/exportExcel/year-plan-table-workflow/report 参数 [{"org":"011","re…

JSX看着一篇足以入门

JSX 介绍 学习目标: 能够理解什么是 JSX,JSX 的底层是什么 概念: JSX 是 javaScriptXML(HTML) 的缩写,表示在 JS 代码中书写 HTML 结构 作用: 在 React 中创建 HTML 结构(页面 UI 结构) 优势&a…

HarmonyOS开发:Log工具类源码分析

前言 一转眼就十月中旬了,国庆的劲真大,到现在还未缓过来,以至于要更新的文章迟迟未发布,大家可以看到,最近一段时间的文章,都是关于HarmonyOS相关的,两个原因吧,一是我司有这样的任…

操作系统——死锁及其解决方案(p38-p41王道视频、课本ch6)

1.死锁的“知识框架”: 2.“预防死锁”——破坏死锁的4个必要条件: 3.避免死锁!!!!——必考:银行家算法 安全性算法描述: 4.“死锁的检测和解除”:

CVer从0入门NLP(一)———词向量与RNN模型

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊专栏推荐:深度学习网络原理与实战 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、…

h5的扫一扫功能 (非微信浏览器环境下)

必须在 https 域名下才生效 <template><div><van-field label"服务商编码" right-icon"scan" placeholder"扫描二维码获取" click-right-icon"getCameras" /> <div class"scan" :style"{disp…

鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统项目背景

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…

2-MySQL的基本操作记录

1 数据库相关 -- --------------------表相关的---------- -- 查看字符集 show variables like %character%;show databases;# 创建数据库 create database test2;# 删除数据库 drop database test2; show databases;#查看当前使用的数据库 select database(); 2 用户相关 -…