TCP协议是一种面向衔接、可靠传输的协议,而树立衔接的进程便是著名的三次握手。这个进程保证了通信的两边能够同步信息,保证后续的数据传输是可靠和有序的。本文将深化解析TCP三次握手的进程及其意义。

八股文-TCP的三次握手

tcp.jpg

漫画TCP的三次握手

TCP衔接的树立采用了三次握手的机制,保证通信两边都能够正常收发数据。咱们经过漫画的方式示例下:

八股文-TCP的三次握手

第一次握手(SYN)

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

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

客户端期望树立衔接,所以发送一个包括SYN标志的数据包。这个包中还包括一个随机生成的序列号(ISN,Initial Sequence Number),用于后续数据的顺序传输。

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

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

第2次握手(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的三次握手

tcp.png

为什么是三次握手?

  • 保证两边都具有通信才能

第一次握手: 服务端能够承认客户端的发送才能,自己的接纳才能是正常的;

第2次握手: 客户端承认服务端的发送才能,自己的接纳才能是正常的;服务端能够承认自己的发送才能是正常的;

第三次握手: 服务端承认客户端的接纳才能是正常的;

  • 避免失效的衔接恳求被误认为是新衔接

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

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

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

总结

经过三次握手,TCP协议在衔接树立阶段树立了两边的信任,保证了后续数据传输的可靠性和有序性。这个进程是TCP协议中非常重要的一部分,也是网络通信中的柱石之一。