作者信息:https://home.cnblogs.com/u/huangjiabobk

在Linux中,如何理解Tcp/ip协议三次握手?

在Linux(以及其他支持TCP/IP协议的操作系统)中,TCP(Transmission Control Protocol,传输控制协议)为了建立一个可靠的数据传输连接,采用了三次握手(Three-way Handshake)的过程来初始化连接。以下是TCP三次握手的详细步骤和解释:

  1. 第一次握手(SYN)

    • 客户端(Client)想要与服务器(Server)建立连接时,它会随机生成一个初始序列号(ISN),并发送一个SYN(同步)段给服务器,请求建立连接。此消息中包含了客户端的初始序列号(ISN_C)。
    Client -> Server: SYN (ISN_C)
    

    这个阶段客户端的状态变为SYN_SENT

  2. 第二次握手(SYN+ACK)

    • 服务器接收到客户端的SYN消息后,会回复一个SYN+ACK消息。服务器会确认客户端的SYN(即ACK(Acknowledgment)字段填入ISN_C + 1),同时也会生成自己的初始序列号(ISN_S),并将其包含在SYN消息中发送给客户端。
    Server -> Client: SYN (ISN_S), ACK (ISN_C + 1)
    

    此时,服务器进入SYN_RECEIVED状态。

  3. 第三次握手(ACK)

    • 客户端收到服务器的SYN+ACK消息后,确认服务器的SYN(ACK字段填入ISN_S + 1),并向服务器发送一个ACK消息,表示客户端同意建立连接。
    Client -> Server: ACK (ISN_S + 1)
    

    客户端收到服务器的ACK确认后,连接正式建立,客户端和服务器的状态都转变为ESTABLISHED

综上所述,通过三次握手,双方能够互相确认对方的接收能力和发送能力,并且协商了一套双方都认可的初始序列号,以便后续数据传输时进行校验和避免数据丢失。在三次握手过程中,双方都得到了一次相互的确认,保证了连接的可靠性。只有当三次握手全部完成后,客户端和服务器才会开始交换数据。

posted @ 2024-03-13 09:15  黄嘉波  阅读(8)  评论(0编辑  收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波