暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

有理想的菜鸡 2020-06-14
187

菜鸡每日一面系列打卡35

每天一道面试题目

助力小伙伴轻松拿offer

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




题目描述



题目描述

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



题目分析



题目分析

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


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



题目解答



题目解答

🔹三次握手


开局一张图:

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


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


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


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


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


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


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


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


🔹四次挥手


依然开局一张图:

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


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


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


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


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


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


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


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


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


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


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



学习 | 工作 | 分享

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

只有你想不到,没有你学不到
文章转载自有理想的菜鸡,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论