引言
几乎是个从事IT业务的人都听过要使用TCP建立两端之间的连接需要进行三次握手,但这所谓的三次到底是哪三次呢?每一次的标准又是什么呢?
三路握手详情
(1)服务器必须准备好接受外来的连接,通常需要调用socket、bind、listen三个函数,我们称之为为被动打开。
(2)客户端通过connect发起主动打开(active open)。这导致客户TCP发送一个SYN(同步)分节,它告诉服务器客户将在(待建立的)连接中发送的数据初始序列号。通常SYN分节不携带数据,其所在IP数据报只含有一个IP首部、一个TCP首部及可能有的TCP选项。
(3)服务器必须确认(ACK)客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送的数据初始序列号。服务器在单个分节中发送SYN和对客户SYN的(ACK)确认。
(4)客户必须确认服务器的SYN。
因此从客户连接服务器,再到服务器响应,再到两端建立连接,这之间的三个交换至少需要三个分组,因此称之为三次握手。
发送分节的形式
假设客户端发送的SYN为SYN J ,那么服务端的ACK格式就为ACK J+1,同理服务端发送的SYN为SYN K 那么客户端的ACK格式就该为ACK K+1
TCP连接终止是四次
理由和建立连接类似,由于建立连接需要通信三次我们称之为三次握手(第二次 服务端将SYN 与 ACK一同发回,算一次)而结束则是分为四次即 FIN ACK FIN ACK。
进阶请阅读:
https://juejin.cn/post/6844903958624878606