• 八股文-TCP的三次握手


    TCP协议是一种面向连接、可靠传输的协议,而建立连接的过程就是著名的三次握手。这个过程保证了通信的双方能够同步信息,确保后续的数据传输是可靠和有序的。本文将深入解析TCP三次握手的步骤及其意义。

    tcp.jpg

    漫画TCP的三次握手

    TCP连接的建立采用了三次握手的机制,确保通信双方都能够正常收发数据。我们通过漫画的形式示例下:
    -2023-11-04-2144b30e777bc73a1a2b.png

    第一次握手(SYN)

    连接的发起方是客户端,它向服务器发起连接请求。这个过程称为“第一次握手”;

    1. 客户端发送SYN(同步序列号)标志的数据包给服务器。

    客户端希望建立连接,于是发送一个包含SYN标志的数据包。这个包中还包含一个随机生成的序列号(ISN,Initial Sequence Number),用于后续数据的顺序传输。

    2. 客户端进入SYN-SENT状态。

    客户端发送完SYN后,进入SYN-SENT状态,等待服务器的响应。

    第二次握手(SYN + ACK)

    服务器收到客户端的SYN后,决定是否接受连接请求。如果服务器愿意接受,就会回应一个包含SYN/ACK标志的数据包;

    1. 服务器发送SYN/ACK标志的数据包给客户端。

    服务器接收到客户端的SYN后,向客户端发送一个包含SYN/ACK标志的数据包,表示已收到连接请求,并同样包含一个随机生成的序列号。

    2. 服务器进入SYN-RECEIVED状态。

    服务器发送完SYN/ACK后,进入SYN-RECEIVED状态,等待客户端的最后确认。

    第三次握手(ACK)

    客户端收到服务器的SYN/ACK后,决定是否接受连接。如果接受,客户端会发送一个带有ACK标志的数据包;

    1. 客户端发送ACK标志的数据包给服务器。

    客户端收到服务器的SYN/ACK后,向服务器发送一个带有ACK标志的数据包,表示连接建立成功。

    2. 客户端进入ESTABLISHED状态。

    客户端发送完ACK后,进入ESTABLISHED状态,连接建立成功。此时,服务器也接收到了客户端的确认,进入ESTABLISHED状态。

    至此,三次握手完成,连接建立成功,双方可以进行正常的数据传输了。

    详细图示如下:

    tcp.png

    为什么是三次握手?

    • 确保双方都具备通信能力

    第一次握手: 服务端可以确认客户端的发送能力,自己的接收能力是正常的;

    第二次握手: 客户端确认服务端的发送能力,自己的接收能力是正常的;服务端可以确认自己的发送能力是正常的;

    第三次握手: 服务端确认客户端的接收能力是正常的;

    • 防止失效的连接请求被误认为是新连接

    如果只有两次握手,会出现以下问题:

    1. 客户端发送连接请求(SYN)。
    2. 服务器收到请求后,发送确认(ACK)。
    3. 客户端在接收到确认前就突然宕机或丢失数据包。

    此时,服务器无法知道是因为连接成功而没有收到客户端的确认,还是客户端的连接请求根本没有到达。如果客户端重新启动并发送一个新的连接请求,而这个新请求的序列号与旧请求一致,服务器可能会误认为是同一个连接请求,导致连接的混乱。

    总结

    通过三次握手,TCP协议在连接建立阶段建立了双方的信任,确保了后续数据传输的可靠性和有序性。这个过程是TCP协议中非常重要的一部分,也是网络通信中的基石之一。

  • 相关阅读:
    Linux 系统调用IO口,利用光标偏移实现文件复制
    volatile关键字理解
    【Discuz】x3.5论坛修改记录
    c++术语大总结
    Maven简介和快速入门
    DSPE-PEG-Silane DSPE-PEG-SIL 磷脂-聚乙二醇-硅烷疏水性18碳饱和磷脂
    数字化 | 智能电子日历
    如何使用react-router v6快速搭建路由?
    聊聊RabbitMQ
    [工业互联-4]:工业有线互联总线之IO-Link
  • 原文地址:https://blog.csdn.net/weixin_44002151/article/details/134431432