一、简介

TCP在通信之前,必须先建立连接,如果无须再传输数据,则需要关闭连接。在建立连接的过程中,存在三次握手阶段,在关闭连接的时候存在四次挥手阶段,本文将总结三次握手和四次挥手的具体过程。

首先需要了解几个概念:

  • 序列号seq:用来标记数据段的顺序,报文段中的第一个字节的数据编号;
  • 确认号ack:指的是期望接收到下一个字节的数据编号,即就是当前报文段最后一个字节的数据编号+1;
  • 确认ACK:表示确认号是否有效,只存在1和0两种取值,当ACK=1时,确认号字段有效,当ACK=0时,确认号无效;
  • 同步SYN(Synchronize Sequence Numbers):同步序列编号,SYN=1表示请求建立一个连接;
  • 终止FIN:请求关闭连接,FIN=1表示此报文段的发送方的数据已经发送完毕,并要求释放连接;

二、三次握手

  • 第一次握手:客户端发送SYN同步序列编号 = 1,请求建立一个链接,此时客户端进入SYN_SENT状态,等待服务器的确认;
  • 第二次握手:服务器端收到客户端的连接请求SYN包,发送ack = x + 1,并且发送ACK确认包给客户端,此时服务器端进入同步收到状态SYN_RECV;
  • 第三次握手:客户端接收到服务器发送过来的SYN + ACK包,自己也发送一个ACK确认给服务器,发送完成,此时客户端与服务器就成功建立了一个连接,此时客户端和服务器端都进入ESTABLISHED连接建立状态;
  • 详细过程如下图所示:

三、四次挥手

  • 第一次挥手:主动关闭一方发送FIN=1请求关闭连接,停止传输数据操作,序列号seq=u即上一次接收的最后一个数据编号+1,此时客户端进入FIN-WAIT-1(终止等待1)状态;
  • 第二次挥手:被动关闭的一方接收到FIN请求关闭信息,发出确认ACK = 1,ack=u+1并且带上序列号seq = v,此时被动关闭的一方就进入了CLOSE-WAIT(关闭等待)状态;
  • 第三次挥手:主动关闭的一方接收到被动方发送过来的确认信号,主动关闭一方进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受被动方发送的最后的数据),被动关闭的一方将最后的数据发送完毕后,就向主动关闭方发送连接释放报文,被动关闭的一方发送FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时被动关闭方就进入了LAST-ACK(最后确认)状态,等待主动关闭方的确认;
  • 第四次挥手:主动关闭方接收到被动方发送过来的释放报文后,自己发出确认信号ACK = 1, ack = w +1,此时主动关闭方就进入了TIME-WAIT(时间等待)状态,注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当主动关闭方撤销相应的TCB后,才进入CLOSED状态,同理,被动关闭一方只要收到了主动发送方发出的确认信号,就立即进入CLOSED状态;
  • 详细过程如下图所示:

面试题之TCP三次握手和四次挥手详解相关推荐

  1. TCP 三次握手和四次挥手详解

    1. TCP 报文格式详解 (1). 源端口和目的端口字段--各占 2 字节,标识了发送方和接收方的应用进程,如2210,80端口 (2). 序号字段--占 4 字节,TCP 连接中传送的数据流中的每 ...

  2. TCP三次握手和四次挥手详解(面试常见问题)

    大概两个月前,一位朋友在面试360集团时,在面试过程中被问及TCP三次握手和四次挥手的相关知识,他当时只知道大概,但当时面试官问他TCP三次握手过程中发送的数字是多少,他一下子就懵住了,因为这也是他第 ...

  3. TCP—三次握手和四次挥手详解

      本文主要介绍TCP连接三次握手和四次挥手的机制. TCP三次握手 剖析三次握手机制   首先Client端发送连接请求报文,Server端接受连接后回复ACK报文,并为这次连接分配资源.Clien ...

  4. TCP三次握手和四次挥手详解

    文章目录 三次握手和四次挥手简述 三次握手的目的 三次握手流程详解 半连接队列和全连接队列 四次挥手的目的 四次挥手详解 为什么客户端需要TIME_WAIT状态 为什么挥手比握手多一次 为什么三次挥手 ...

  5. 面试常问:TCP 三次握手与四次挥手详解

    TCP 三次握手 图解 三次握手过程详解 第一次握手 [客户端]向[服务端]发送连接请求报文,标记 ACK=1 , SYN=1 , 客户端序列号 seq=x ,客户端进入等待状态. 第二次握手 [服务 ...

  6. TCP三次握手,四次挥手详解

    本文是对小林的图解网络的总结 TCP简介 TCP作为一个传输层协议,是一个面向连接的字节流,为应用层提供端到端的传输服务.和UDP不同的是,TCP提供的是可靠的面向连接传输服务,并且提供了流量控制等功 ...

  7. TCP三次握手及四次挥手详解

    此篇文章转载自:http://justim.blog.51cto.com/740099/237548 TCP(Transmission Control Protocol) 传输控制协议   TCP是主 ...

  8. TCP协议---三次握手和四次挥手详解 (不看后悔系列)

    目录 TCP协议简介 TCP报头 TCP工作原理 科来解码详解 wireshark解码详解 三次握手和四次挥手 数据包的大致结构 你不知道的三次握手 为什么需要有三次握手? 为啥只有三次握手才能确认双 ...

  9. 三次握手和四次挥手详解

    详解 TCP 连接的" 三次握手 "与" 四次挥手 " *TCP connection* 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP co ...

  10. TCP的三次握手与四次挥手详解

    文章目录 TCP 协议简述 TCP包首部 TCP 三次握手建立连接 TCP 四次挥手关闭连接 常见面试题: TCP 协议简述 TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连 ...

最新文章

  1. C语言函数集(十四)
  2. opencv检测黑色区域
  3. 配置Memcache服务器并实现主从复制功能(repcached)
  4. CakePHP下使用paginator需要对多个字段排序的做法
  5. java 判断精度_随笔⑦ Java中的比较 ==,equals以及精度对比较的影响
  6. linux守护进程fifo,linux守护进程配置文件
  7. spring mvc 传中文 到controller层乱码的 解决方法
  8. 《统计学习方法》读书笔记——朴素贝叶斯法(公式推导+代码实现)
  9. Mysql主从占用大量cpu_Mysql占用过高CPU时的优化手段
  10. Cortex M3/M4 学习摘要(一)
  11. 测试工具之 LoadRunner WinRunner
  12. uci2019计算机录取,最新!加州大学公布2019年新生录取数据!
  13. 简述x264几种码率控制方式的实现
  14. 在面试时应该如何自我介绍?
  15. Windows XP SP3 笔记本专用版 电脑疯子 2010年巨献
  16. PTA习题【python】 6-8 jmu-python-发牌
  17. 【入门篇】ESP8266直连智能音箱(天猫精灵)控制智能灯
  18. 与MySQL相识的第二天
  19. MAC终端连接服务器问题杂记
  20. 区块链基础与网络安全

热门文章

  1. java.util.list包_Java的Util包总结
  2. 357.计算各个位数不同的数字个数
  3. 2020 VIVO 面经
  4. 【数字图像处理系列五】图像滤波之空间滤波:图像平滑降噪和图像锐化
  5. 浅谈算法和数据结构: 八 平衡查找树之2-3树
  6. hadoop2.6.0的eclipse插件编译和设置
  7. 最新基于高德地图的android进阶开发(2)小试牛刀
  8. 2020-11-17 一道有趣的求极限问题
  9. 服务器lsass占用内存_服务器内存跑满是什么原因造成的呢?
  10. Gargamel:信息安全取证工具