Loading... # 简述TCP三次握手和四次挥手面试回答 <div class="tip inlineBlock success"> 本文转自 [猿人谷][1] 长期维护版本:[https://yuanrengu.com/2020/77eef79f.html][1] </div> <div class="tip inlineBlock info"> 目前把下面总结好的理解并且牢记完全可以应对面试官。 </div> 三次握手四次挥手是前端常见面试题之一,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。 希望大家带着如下问题进行阅读,收获会更大。 1.请说出三次握手的作用以及过程 2.ISN(Initial Sequence Number)是固定的吗? 3.三次握手过程中可以携带数据吗? 4.什么是半连接队列? 5.三次握手可以携带参数吗? 6.四次挥手的过程 首先看一张图来理解一下整个三次握手过程 ![三次握手](https://typora-1306779837.cos.ap-shanghai.myqcloud.com/d4581f3625bdc2d97c239b899c38d6ba.jpeg) ## 一、三次握手 ### 1.三次握手的作用 作用:确定双方的接收、发送能力是否正常,指定自己的初始化序列号,为后续可靠传输做准备 ### 1.2 三次握手的过程 刚开客户端处于Closed状态,服务端处于Listen状态 第一次握手:客户端向服务端发送SYN报文,并指明客户端初始化序列号ISN(c),此时客户端进入SYN_send状态/等待 第二次握手:服务端收到SYN报文后,会以自己的SYN作为应答,并指明自己的初始化序列号ISN,同时将客户端的ISN+1作为Ack的值,表示收到客户端的SYN,同时进入SYN_RCVD状态/接收 第三次:客户端收到SYN后,发送一个ACK报文,也是将服务端的ISN+1作为ACK的值,表示收到服务端的SYN报文。此时客户端处于established状态,服务端收到ACK后,也处于established状态,此时双方成功建立连接 ### 2.ISN是固定的吗? 答案:不是固定的,三次握手的一个重要功能就是交换双方的ISN,以便让对方知道接收到的输入如何按序列号进行组装,如果ISN是固定的,攻击者很容易推断出后续的确认号,所以ISN是动态生成的 ### 3.什么是半连接队列? 服务端第一次收到SYN后,就会处于SYN_RCVD,此时双方还没完全建立连接,服务端会把这种状态放在一个队列中,我们把这这种队列称为半连接队列,等三次握手完毕后,建立的连接就会放在全连接队列中,如果队列满了就会产生丢包的情况。 ### 4.三次握手可以携带参数吗? 第三次握手时可以携带参数,第一次和第二次不能携带,举例: 第一次就可以携带参数的话,假如有人恶意攻击服务器,攻击者根本不在乎服务器的接收、发送能力是否正常,如果每次都在第一次握手中的SYN报文中携带大量数据,重复的发SYN报文的话,那么服务器会花费大量时间、内存空间接收这些报文。所以得出的结论,如果在第一次握手中携带数据,那么服务器更容易收到攻击 对于在第三次携带数据的话,此时客户端已经处于established状态,对于客户端来说已经建立连接,并且确定服务端的发送和接收能力时正常的,所以携带参数完全没问题。 ## 二、四次挥手 ![四次挥手](https://typora-1306779837.cos.ap-shanghai.myqcloud.com/da90b58b3aaced0edbf89fd5d308d165.jpeg) 第一次挥手:客户端发送一个FIN报文,报文中指定一个序列号,此时客户端进入FIN_WAIT_1状态,表示停止在发送数据 第二次挥手:服务端收到FIN报文后,会回应一个ACK报文,把客户端的序列号+1作为ACK的值,此时服务端处于Close_WAIT状态,表示服务端同意关闭请求,客户端进入FIN_WAIT2状态 等待服务端发出连接释放报文 第三次挥手:如果服务端也想断开连接了,和第一次挥手一样发出FIN报文,此时服务端处于LAST_ACK状态,表示发出连接释放报文,等待客户端确认 第四次挥手:客户端收到FIN报文后,一样发送一个ACK报文,且把服务器的序列号+1作为ACK的值。此时客户端进入TIME_WAIT状态,需要经过等待计时器的时间2MSL后仍然没有回复,才会进入closed状态,而服务端收到ACK报文后直接进入Closed状态 [1]: https://yuanrengu.com/ 最后修改:2022 年 05 月 03 日 © 允许规范转载 END 本文作者: 鼎g 文章标题:简述TCP三次握手和四次挥手面试回答 本文地址:https://zhougewk8.cn/14.html 版权说明:若无注明,本文皆Dg's Blog-专注健康快乐每一天原创,转载请保留文章出处。 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏