什么是三次握手


学过网络编程的人,应该都知道TCP建立连接的三次握手,下面简单描述一下这个过程。 

TCP建立连接为什么是三次握手,为什么不是两次或四次?_序列号

如图所示 

第一次握手:客户端发送TCP包,置SYN标志位为1,将初始序号X,保存在包头的序列号(Seq)里。 

第二次握手:服务端回应确认包,置SYN标志位为1,置ACK为X+1,将初始序列号Y,保存在包头的序列号里。 

第三次握手:客户端对服务端的确认包进行确认,置SYN标志位为0,置ACK为Y+1,置序列号为Z。


为什么不是两次


我们先来将三次握手这个过程捋一遍。(S-服务端,C-客户端)

第一次握手后,S可以确认自己收报文与C发报文的功能都正常,而C呢,它什么都不能确认。 

第二次握手后,C可以确认自己的收发报文与S的收发报文功能都正常,也就是认为连接已建立。 

那么第三次呢,S也可以确认双方能够正常通信。


假想一下,如果我们去掉了第三次呢? 

因为我们不进行第三次握手,所以在S对C的请求进行回应(第二次握手)后,就会理所当然的认为连接已建立,而如果C并没有收到S的回应呢?此时,C仍认为连接未建立,S会对已建立的连接保存必要的资源,如果大量的这种情况,S会崩溃。 

因此第三次握手是必要的。


假想一下,如果我们去掉了第三次呢? 
因为我们不进行第三次握手,所以在S对C的请求进行回应(第二次握手)后,就会理所当然的认为连接已建立,而如果C并没有收到S的回应呢?此时,C仍认为连接未建立,S会对已建立的连接保存必要的资源,如果大量的这种情况,S会崩溃。 
因此第三次握手是必要的。