你是否曾在面试时听到过类似的提问:“三次握手与四次挥手你了解多少?”这似乎是一种标配的问题,然而,在这个简单的问题背后,隐藏着一系列关键的网络通信机制。这是一场挑战,一场要求我们不仅仅了解表面知识,更要深入理解背后原理的挑战。

从图中不难看出,TCP在网络通信中扮演着重要的角色。它位于传输层,负责确保数据的可靠性和有序性。在这篇文章中,我们将逐一剖析TCP协议的三次握手和四次挥手机制,不仅深入挖掘每个步骤背后的逻辑,更探讨了解这一过程为何如此关键。
三次握手和四次挥手讲个小故事,让我们快速理解下三次握手和四次挥手过程其实也是建立连接和断开连接的过程,我们可以通过一个小故事来形象化地简述一下:(小明和小芳的爱情史...)
小明打算追求小芳...
三次握手(建立关系):
小明主动追求:“小芳,我一直觉得你很特别,我们能不能试着在一起?”(SYN包)小芳心动回应:“嗯,我也有同样的感觉,我们试试看吧”(SYN+ACK包)小明开心确认:“你同意了,太好了!”(ACK包)开始聊天、发送消息,一段时间后...
四次挥手(结束关系):
小明想结束这段关系,提出分手:“我觉得我们之间不如以前了,或许我们结束比较好”(发送FIN包)小芳表示理解:“好吧,我理解,但有些事情我还想和你说说”(回复ACK包)小芳也提出分手:“或许你说得对,我们结束吧,希望你未来能够找到更适合你的幸福”(再次发送FIN包)小明接到分手消息:“好吧,我知道了。但我后悔了,能给我们一个重新开始的机会吗?”(再次发送ACK包)小明事后后悔了,希望可以重新开始。小芳表示可以,但是必须重新追求...
TCP 每次握手和挥手,都是建立关系和结束关系的过程,我们先来说说在建立关系和结束关系的过程,常见的标志位、序列号和确认号。
标志位、序列号和确认号当涉及到TCP连接的建立和断开时,请求报文(传递数据)是关键的一环。以下是一个综合的描述,包含了标志位、序列号、确认号的简要介绍:
1、标志位:
SYN(同步): 发送方使用SYN标志发起新连接。ACK(确认): 表示确认号字段有效,用于确认接收到的数据。FIN(结束): 发送方发送,表示请求关闭连接,在数据传输完成后使用。2、序列号(seq):
用于标识TCP数据流中每个数据段的顺序。发送方为每个数据段分配唯一序列号,接收方通过序列号重新组装数据。3、确认号(ack):
表示期望下一次接收的数据包序列号。接收方通过发送带有确认号的ACK数据包,通知发送方哪些数据已成功接收。综合这些概念,TCP连接的建立通常以发送SYN标志的请求报文开始。接收方通过发送带有SYN和ACK标志的响应报文进行确认。序列号和确认号的正确使用确保了数据的有序传输和可靠接收。断开连接时,FIN标志的使用表明发送方请求关闭连接,而接收方通过发送带有确认号的ACK响应来确认关闭请求。
下面让我们继续看看具体的实现过程,其中ACK=1 表示确认,SYN=1 表示同步,FIN=1 表示关闭。
TCP三次握手: 建立连接

2MSL 指报文段的最长生存时间,通常用来等待在网络中被丢弃或产生的延迟、重复数据包被清除。
TCB 指TCP连接的状态和控制信息,每个TCP连接都有一个对应的TCB。
为什么需要三次握手和四次挥手?保证连接的可靠性和完整性在网络通信中,保证连接的可靠性和数据的完整性很重要。通过三次握手,双方可以建立起可靠的连接。而通过四次挥手,双方可以安全地关闭连接,保证数据的完整传输。
处理网络异常和延迟情况在实际网络环境中,存在各种可能导致通信异常的情况,比如网络延迟、丢包等。三次握手和四次挥手的目的就是为了保持连接的稳定性和可靠性。
处理网络延迟:通过三次握手,可以减少因网络延迟而导致的连接建立问题,双方都确认。处理丢包情况:在网络通信中,数据包可能会因为各种原因丢失。通过四次挥手过程,可以保证数据完整,这其中序列号起了很大作用。处理半开连接问题:如果没有四次挥手过程,可能会导致半开连接的情况,即一方已经关闭连接,但另一方仍然在发送数据。处理连接复用问题:在一些场景下,需要复用已经建立的连接来提高效率。四次挥手可以避免这一类的问题发生。总结综合来说,三次握手和四次挥手的过程是TCP通信的基础。更是保证了连接的稳定性和数据的完整传输,同时也能够处理各种网络异常情况,提升通信的可靠性和稳定性。
作者:Sailing链接:https://juejin.cn/post/7310561432395251764