建立TCP连接为什么要3次握手?

一、概述

TCP三次握手的目的是建立可靠的通信信道。通信,简单来说就是数据的发送和接收。而三次握手最主要的目的就是双方确认自己与对方的发送和接收是正常的。

如下图所示,下⾯的两个机器⼈通过3次握手确定了对方能正确接收和发送消息(图⽚来源:《图解HTTP》 )。

建立TCP连接为什么要3次握手?_第1张图片

发送端(Client)和接收端(Server)总共发起的 3 次请求就叫做 3 次握手。

二、握手过程

第 1 次握手

Client 什么都无法无法确认。虽然自己发送了 syn 数据,但是只要没收到 Server 端的 syn/ack 数据都无法确认自己的发送是否正常。

Client 己方发送正常 己方接收正常 对方发送正常 对方接收正常
第1次握手
第2次握手
第3次握手

Server 确认:自己接收正常,对方发送正常

Server 己方发送正常 己方接收正常 对方发送正常 对方接收正常
第1次握手
第2次握手
第3次握手

第 2 次握手

Client 确认:自己发送正常、接收正常,对方发送正常、接收正常。Client 确认状态完成

Client 己方发送正常 己方接收正常 对方发送正常 对方接收正常
第1次握手
第2次握手
第3次握手

Server 依旧只能确认:对方发送正常,自己接收正常。

Server 己方发送正常 己方接收正常 对方发送正常 对方接收正常
第1次握手
第2次握手
第3次握手

第 3 次握手

Client 确认状态在第 2 次握手时已完成。

Client 己方发送正常 己方接收正常 对方发送正常 对方接收正常
第1次握手
第2次握手
第3次握手

Server 确认:自己发送正常,接收正常,对方发送正常、接收正常。

Server 己方发送正常 己方接收正常 对方发送正常 对方接收正常
第1次握手
第2次握手
第3次握手

三、总结

第2次握手为什么要传回 syn?

Server 端传回 Client 端所发送的 syn 是为了告诉 Client,我接收到的信息确实就是你发出的信号。

附:SYN 是 TCP/IP 建⽴连接时使⽤的握⼿信号。在客户机和服务器之间建⽴正常的 TCP ⽹络连接时,
客户机⾸先发出⼀个 SYN 消息,服务器使⽤ SYN-ACK 应答表示接收到了这个消息,最后客户机再
以 ACK(Acknowledgement[汉译:确认字符 ,在数据通信传输中,接收站发给发送站的⼀种传输控制
字符。它表示确认发来的数据已经接受⽆误。 ])消息响应。这样在客户机和服务器之间才能建⽴
起可靠的TCP连接,数据才可以在客户机和服务器之间传递

第 2 次握手为什么要传 ack ?

双⽅通信⽆误必须是两者互相发送信息都⽆误。传了 SYN,证明发送⽅到接收⽅的通道没有问题,但是
接收⽅到发送⽅的通道还需要 ACK 信号来进⾏验证。

你可能感兴趣的:(Java,网络,网络协议,java,服务器,面试)