tcp三次握手的过程

  1. 客户端向服务器端发送请求建立新连接的SYN报文,随后客户端进入SYN-SENT阶段。
  2. 服务器端收到来自客户端的报文后,结束LISTEN阶段,并返回服务端能正常接收客户端发送的数据,并同意创建新链接的SYN和ACK报文,随后服务端进入SYN-RCVD阶段。
  3. 客户端接受到来自服务端的报文后,明确了从客户端到服务端的数据传输是正常的,结束SYN-SENT阶段。并返回确认收到服务端同意连接的ACK报文,随后客户端进入ESTABLISHED阶段。服务端收到来自客户端的报文,明确了服务端到客户端的数据传输是正常的,结束SYN-RCVD阶段,随后服务端进入ESTABLSHED阶段。
    此后客户端跟服务端正常数据传输,这tcp三次握手的过程。

tcp建立连接一定需要三次握手的原因

  1. 完全建立起连接的标志是:
    1.客户端得知自己和服务器端的收信息和发信息都没有问题
    2.服务器端得知自己和客户端的收信息和发信息都没有问题
  2. 分析一下每次挥手客户端跟服务端知道的情况
    1.当客户端第一次向服务器发送建立连接的报文的时候,服务端收到报文后。服务端知道:客户端的发送和服务端的接收
    是没有问题。此时客户端什么都不知道
    2.当服务端向客户端发送确认收到报文,并同意创建新链接的时候。客户端知道:客户端的发送和客户端的接受没有问题,也知道服务器端的发送和接受是没有问题的。此时服务端只知道:客户端的发送和服务端的接收
    是没有问题
    3.当客户向服务器端返回确认收到服务端同意连接的报文的时候。服务端知道:服务端的发送和客户端的接收是没有问题的,加上第一次握手的时候,此时服务器知道服务端和客户端的发送和接收都是没有问题的。
    直到客户端和服务器端,都知道自己和对方的接受信息和发送信息都联通,此时建立的会话才是双向联通的。

在通信的过程中,发送数据会都会分配一个序号。三步握手的过程,主要是为了互相确认双方的起始序列号。
如果只进行两次握手,客户端发送链接请求及起始序列号seq = x, 收到 服务器端的起始序列号seq = y及对客户端序列号seq= x 的确认。此时,双方就 客户端的起始序列号达成了共识。此时,并没有对服务器的起始序列号达成共识,所以就需要进行第三次握手。对B的起始序列号达成共识,不能保证通信的可靠。