面试题之TCP三次握手和四次挥手详解
一、简介
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三次握手和四次挥手详解相关推荐
- TCP 三次握手和四次挥手详解
1. TCP 报文格式详解 (1). 源端口和目的端口字段--各占 2 字节,标识了发送方和接收方的应用进程,如2210,80端口 (2). 序号字段--占 4 字节,TCP 连接中传送的数据流中的每 ...
- TCP三次握手和四次挥手详解(面试常见问题)
大概两个月前,一位朋友在面试360集团时,在面试过程中被问及TCP三次握手和四次挥手的相关知识,他当时只知道大概,但当时面试官问他TCP三次握手过程中发送的数字是多少,他一下子就懵住了,因为这也是他第 ...
- TCP—三次握手和四次挥手详解
本文主要介绍TCP连接三次握手和四次挥手的机制. TCP三次握手 剖析三次握手机制 首先Client端发送连接请求报文,Server端接受连接后回复ACK报文,并为这次连接分配资源.Clien ...
- TCP三次握手和四次挥手详解
文章目录 三次握手和四次挥手简述 三次握手的目的 三次握手流程详解 半连接队列和全连接队列 四次挥手的目的 四次挥手详解 为什么客户端需要TIME_WAIT状态 为什么挥手比握手多一次 为什么三次挥手 ...
- 面试常问:TCP 三次握手与四次挥手详解
TCP 三次握手 图解 三次握手过程详解 第一次握手 [客户端]向[服务端]发送连接请求报文,标记 ACK=1 , SYN=1 , 客户端序列号 seq=x ,客户端进入等待状态. 第二次握手 [服务 ...
- TCP三次握手,四次挥手详解
本文是对小林的图解网络的总结 TCP简介 TCP作为一个传输层协议,是一个面向连接的字节流,为应用层提供端到端的传输服务.和UDP不同的是,TCP提供的是可靠的面向连接传输服务,并且提供了流量控制等功 ...
- TCP三次握手及四次挥手详解
此篇文章转载自:http://justim.blog.51cto.com/740099/237548 TCP(Transmission Control Protocol) 传输控制协议 TCP是主 ...
- TCP协议---三次握手和四次挥手详解 (不看后悔系列)
目录 TCP协议简介 TCP报头 TCP工作原理 科来解码详解 wireshark解码详解 三次握手和四次挥手 数据包的大致结构 你不知道的三次握手 为什么需要有三次握手? 为啥只有三次握手才能确认双 ...
- 三次握手和四次挥手详解
详解 TCP 连接的" 三次握手 "与" 四次挥手 " *TCP connection* 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP co ...
- TCP的三次握手与四次挥手详解
文章目录 TCP 协议简述 TCP包首部 TCP 三次握手建立连接 TCP 四次挥手关闭连接 常见面试题: TCP 协议简述 TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连 ...
最新文章
- C语言函数集(十四)
- opencv检测黑色区域
- 配置Memcache服务器并实现主从复制功能(repcached)
- CakePHP下使用paginator需要对多个字段排序的做法
- java 判断精度_随笔⑦ Java中的比较 ==,equals以及精度对比较的影响
- linux守护进程fifo,linux守护进程配置文件
- spring mvc 传中文 到controller层乱码的 解决方法
- 《统计学习方法》读书笔记——朴素贝叶斯法(公式推导+代码实现)
- Mysql主从占用大量cpu_Mysql占用过高CPU时的优化手段
- Cortex M3/M4 学习摘要(一)
- 测试工具之 LoadRunner WinRunner
- uci2019计算机录取,最新!加州大学公布2019年新生录取数据!
- 简述x264几种码率控制方式的实现
- 在面试时应该如何自我介绍?
- Windows XP SP3 笔记本专用版 电脑疯子 2010年巨献
- PTA习题【python】 6-8 jmu-python-发牌
- 【入门篇】ESP8266直连智能音箱(天猫精灵)控制智能灯
- 与MySQL相识的第二天
- MAC终端连接服务器问题杂记
- 区块链基础与网络安全