一、知识点介绍

1.什么是三次握手?

三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。

本质:是确认通信双方收发数据的能力 。

2.什么是四次挥手?

建立一个连接需要三次握手,而终止一个连接要经过四次挥手(也有将四次挥手叫做四次握手的)。这由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),客户端或服务器均可主动发起挥手动作。

本质:目的是关闭一个连接。

二、三次握手和四次挥手的过程:

  1.三次握手的过程:

  • 第一次握手: 首先是客户端向服务器发送了报文
    这次的握手是具有重大意义的:它说明了客户端它的发送能力是正常的
  • 第二次握手:然后服务器端接收到了客户端向它发送的报文,并且也同时向客户端发送报文
    这次的握手也很重要:它说明了服务器端自身的接收能力和发送能力都是正常的
  • 第三次握手:客户端再一次向服务器发送了报文
    这次的握手依旧重要:因为证明客户端的接收能力正常

那有的同学可能就有疑问了,为什么最后还要在握一次手?不纯纯多余嘛...

漏漏漏,大漏特漏。我的好基友, 让我这样解释给你听

首先你想想,当你给你的女朋友发了条消息问她在不在(相当于第一次握手

然后你的女朋友看见了,她收到了你的发出的消息,也同时回了你的消息(相当于第二次握手

很快你也收到了她回的信息,但如果你长时间不再发一次消息,她就不清楚你到底看没看到她给你发的信息,让她一直等,那她就很生气,那你就得完蛋。(相当于第三次握手

就是这样,基友们你们懂了吗?没懂可以去找女朋友试试,如此你就会有深刻印象。

说专业点就是:

当客服端和服务端进行通信,客户端发送了一条消息,到达了服务端

对于服务端而言,服务端收到了你发送的内容,同时向客服端发送确认。

对于客服端而言,如果客服端不理睬服务端的这个确认,那么服务端则会一直等待客服端的消息。

这就导致了服务端的时间被浪费(对于服务器而言,CPU等资源是一种浪费),这样是不可行的,

这就是为什么不能两次握手的原因了

图示为三次握手

2.四次挥手的过程

  • 第一次挥手: 
    客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态
  • 第二次挥手:
    服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态
  • 第三次挥手:
    客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  • 第四次挥手:
    客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成

那看到这里依旧有人想问,为什么连接时只要三次,而断开连接时却要四次???

那我再用男女朋友那点事来告诉你,首先你设想这样的场景:

你和你女朋友今天相约一起出去玩,那玩肯定会有个结束。约完会了肯定要各回各家,各找各妈 要互相再见吧!

哈哈哈哈,那重点来了,

你:再见宝贝,你回去吧(第一次挥手

女朋友:好的宝宝,那我走了(第二次挥手

女朋友:那你也回去吧宝宝(第三次挥手

你:好的,那我走了,拜拜宝贝(第四次挥手

就是这样,就像和女朋友说拜拜时那样的不舍。

图示为四次挥手

想看懂三次握手,四次挥手?看这里!!!相关推荐

  1. tcp 二次握手时延_一篇搞懂TCP的三次握手 四次挥手

    TCP的三次握手四次挥手,估计大家都听过.但是真的能把每一步说明白的人比较少.我还记得在之前面试的时候被面试官一顿问,然后一脸懵B... 都是大学没好好上课 ,这篇文章就跟大家讲讲到底这三握四挥是在搞 ...

  2. 在深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP

    如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...

  3. go tcp客户端自动重连_阿里面试: HTTP、HTTPS、TCP/IP、三次握手四次挥手过程?(附全网最具深度讲解)

    前言 这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-.-,蹭蹭就蹭蹭 :) 事实上我在阿里面试的时候确实被问到了这个问题,HTTP.HTTPS.TC ...

  4. 再深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP

    转载地址: https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/network/2015_0708_65.html 如果对网络 ...

  5. 深入浅出TCP三次握手四次挥手

    每每想起TCP三次握手这个问题,就会陷入如下的困惑: var forget = ? while(forget) {百度/Google } 而重点在于forget永远等于true,无情的消耗着我这颗只有 ...

  6. 简单易懂 三次握手 四次挥手

    之前一直在寻找三次握手 四次挥手的资料 发现网上的资料都太过于复杂 于是乎就想自己写一个- 我们平常上网都需要一个url 比如 www.baidu.com .com 为顶级域 还有.net .cn啥的 ...

  7. ssh协议是osi_TCP/IP协议和三次握手四次挥手

    计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的.计算机网络体系结构的抽象概念较多,在学习时要多思考.这些概念对后面的学习很有帮助. 网络协议是什么? 在计算机网络要做到有条不 ...

  8. [计算机网络][总结][常见问题][TCP][三次握手][四次挥手]

    TCP三次握手 四次挥手 三次握手 目的:保证传输的可靠性,为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误.主要防止资源的浪费. 具体过程:当客户端发出第一个连接请求报文段时并没有丢 ...

  9. TCP三次握手四次挥手(三国版)

    TCP的三次握手四次挥手 TCP的三次握手和四次挥手不管是我们自己使用还是面试都是需要掌握的,本文先将原理,然后以三国为例讲个小栗子帮助理解.先来一张图: 标志位 TCP在其协议头中使用大量的标志位或 ...

  10. java 中的网络编程(Socket、TCP三次握手四次挥手、TCP/UDP/URL)

    文章目录 前言 一.网络编程概述 二.网络通信要素概述 1.如何实现网络中的主机互相通信 2.网络通信协议 3.IP和端口号 4.InetAddress类 5.网络协议 6.TCP/IP协议簇 7.T ...

最新文章

  1. 剑指offer-丑数
  2. 又一数据挖掘赛事,在校生专属,翼支付杯来了(直通实习机会)
  3. 15 年来, 程序员升级打怪的路上,这些书始终与你并肩作战
  4. 用cmd运行java程序
  5. Redis 配置连接池,redisTemplate 操作多个db数据库,切换多个db,解决JedisConnectionFactory的设置连接方法过时问题。(转)
  6. LUA Metatables
  7. 多线程TCP的socket通信
  8. 一.第一周golang学习:--string解析成基本数据类型
  9. VC++/MFC学习笔记(二)
  10. Openv Switch 完全使用手册
  11. 计算机连接交换机配置命令,[计算机]交换机配置命令.doc
  12. 【中国互联网江湖30年历史】再无风清扬,再有少年郎
  13. android模拟器 vt,逍遥安卓模拟器VT模式如何设置?VT模式设置流程图文分享
  14. Python的eval函数详解
  15. Double和Float类型的max、min、isNaN、isFinite、isInfinite方法
  16. 阿里云国际站云服务器可以用来做什么业务?
  17. NULL,0,`0`,`\0`,0你分得清吗?
  18. C++ char和uchar区别
  19. 电脑运行内存8g够用吗
  20. 解决苹果手机绑定小米手环4支付宝,蓝牙无法连接问题。

热门文章

  1. 两个周末整理的垃圾回收知识,我要吐血了
  2. 【基于scala语言的spark编程】
  3. 浅谈由土木转行java至今的感想
  4. java中折半查找思想_java折半查找法
  5. Android Hook原理分析--Xposed hook 原理分析
  6. 设计模式-行为型模式
  7. 第130篇 在 OpenSea 上创建自己的 NFT 商店(2)
  8. c语言 switch (choice),c语言while与switch的嵌套
  9. [附源码]计算机毕业设计Python创意摄影交流平台(程序+源码+LW文档)
  10. Vue的生命周期详细介绍