详解TCP的三次握手和四次挥手

菜鸡每日一面系列打卡35

每天一道面试题目

助力小伙伴轻松拿offer

坚持就是胜利,我们一起努力!

题目描述

详解TCP的三次握手和四次挥手

题目描述

谈谈你对TCP三次握手和四次挥手的理解。

题目分析

详解TCP的三次握手和四次挥手

题目分析

关于TCP的三次握手和四次挥手,已经被面试官问烂了。然而,并不是所有人都能很好地回答这个问题,尤其是一些细节上的点,很容易被忽略。

不用担心,接下来,菜鸡将对该问题做一个全面的总结!

题目解答

详解TCP的三次握手和四次挥手

题目解答

????三次握手

开局一张图:

详解TCP的三次握手和四次挥手

这张图展示了建立TCP连接所需的三次握手过程。

首先需要明确,三次握手的目的是建立可靠的通信信道,即双方确认彼此的信息发送与接收是正常的。

其次需要明确,客户端与服务器的身份并不是固定的,在某些情况下的客户端,在另外的情况下可能会承担服务器的角色。

下面我们依次来看三次握手的过程和目的。

第一次握手:客户端向服务端发送SYN。此时客户端什么都不能确认;服务端确认对方发送正常,自己接收正常。

第二次握手:服务端向客户端发送SYN/ACK。此时客户端确认自己发送、接收正常,对方发送、接收正常;服务端确认对方发送正常,自己接收正常。

第三次握手:客户端向服务端发送ACK。此时客户端确认自己发送、接收正常,对方发送、接收正常;服务端确认自己发送、接收正常,对方发送、接收正常。

综上所述,当且仅当三次握手之后,双方都能够确认收发功能正常。

????四次挥手

依然开局一张图:

详解TCP的三次握手和四次挥手

这张图展示了断开TCP连接所需的四次挥手过程。

下面我们依次来看四次挥手的过程和目的。

第一次挥手:客户端向服务端发送FIN。用来关闭客户端到服务器的数据传送。

第二次挥手:服务器向客户端发送ACK。表示服务端收到了客户端的连接释放通知。

第三次挥手:服务器向客户端发送FIN。用来关闭与客户端的数据传送。

第四次挥手:客户端向服务端发送ACK。表示客户端收到了服务端的连接释放通知。

同样,这里所说的客户端和服务器并不是一个固定的概念。事实上,建立TCP连接的任何一方都可以在数据传送结束后发出连接释放通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

另外,值得注意的是,在第四次挥手之后,客户端并非立马进入关闭状态,而是会进入TIME-WAIT状态,在等待2MSL时间后,才会进入关闭状态。这样做的原因主要有以下两点:

第一,防止客户端发送的最后一个ACK报文丢失而引起服务端不能正常关闭。

第二,防止已经失效的连接请求报文段对新连接造成影响。

以上便是菜鸡对TCP三次握手和四次挥手的一些总结,供大家参考。

详解TCP的三次握手和四次挥手

学习 | 工作 | 分享

详解TCP的三次握手和四次挥手

????长按关注“有理想的菜鸡

只有你想不到,没有你学不到