在我们的客户端和服务器之间进行HTTP请求发送和返回的过程中,我们是需要去创建一个TCP connection(因为HTTP是不存在连接的,它只有请求和响应)。请求和响应发送的都是数据包,他们之间的通信都是需要经过一个传输的通道,这个通道就是客户端发起服务器接收的链接通道TCP connection。这个链接是可以一直保持的,之后你进行其他操作的时候就不需要再次去建立通道了。
那么他们是怎么建立这个通道的呢,这是就是三次握手的概念(如图:三次握手)。
①首先客户端发起创建连接的数据包,这里标志位(SYN)等于1,和seq等于x。
②服务器端接收到客户端的数据包之后,会知道它有一个客户端需要创建一个连接,服务器端会开启一个tcp的socked端口,开启之后它返回给客户端数据包,数据包内容为SYN=1,ACK=X+1,SEQ=Y。其中的ACK为客户端第一次发送的SEQ+1,
③客户端拿到服务器端数据包后会知道服务器端已经允许开发创建tcp连接了,然后客户端再次发送ACK=Y+1,SEQ=Z,(ACK为服务器端发送的SEQ+1,SEQ为一个新的数字)
这样就完成了一个创建tcp连接的过程
三次握手的优点
三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
减少服务器端开启很多无用的请求
因为网络传输是有网络延迟的,传输的过程当中如果客户端向服务器端发送请求建立的数据包,服务器端直接创建连接,然后服务器端发送内容数据包给客户端。如果在这个过程中,因为网络原因服务器端发送的内容丢失。客户端就接收不到,又到达了连接超时的时间客户端会进行关闭,然后再发起新的连接请求。这样的话服务器端是不知道的,而且以前建立的链接也没关闭,服务器端会重新开启一个新的链接。这样就造成了服务器端开启无用的链接端口。而三次握手就解决了这样的一个问题