第一次握手:客户端向服务端发送第一个请求:创建连接数据包的请求,其中标识位SYN=1(表示这是创建请求的数据包),同时发送Seq=X(数字)
服务端收到客户端的请求,知道客户端要与自己创建连接,服务端就会开启一个TCP的socket的端口,端口开启之后,返回给客户端相关信息。
第二次握手:服务端返回信息给客户端:标志位SYN,ACK=X+1,Seq=Y
客户端收到服务端的信息,知道服务端允许自己打开创建的TCP连接,就给服务端发送信息表示确认
第三次握手:客户端发送确认信息给服务端:ACK=Y+1, Seq=Z
进行三次握手的原因:
防止服务端开启无用的连接,网络传输有延时,传输时客户端发送SYN=1,如果此时服务端直接创建连接,返回内容给客户端,数据包在网络传输中丢失,没有收到服务端的内容,客户端就会因为延迟而发送新的请求,而此时服务端还在等待刚才客户端的回应,但是此时客户端开启新的请求。三次握手能让彼此及时察觉网络的延时,延迟则关闭端口,避免服务端开启无用的端口开销。
两次握手的情况*
假设A向B发送请求时,只有B确认了收到了 A 的 SEQ, A 无法确认收到 B 的。也就是说,只有 A 发送给 B 的包都是可靠的, 而 B 发送给 A 的则不是,所以这不是可靠的连接。==这种情况如果只需要 A 发送给 B ,B 无需回应,==则可以不做三次握手。