TCP三次握手简述-大白话
图例:
准备工作:一开始,客户端和服务端都处于 CLOSED状态。客户端在关闭状态时作为主动建立连接方开始第一次握手,这时服务器也会被动打开连接并由CLOSED 状态变成 LISTEN状态,等待客户端发送连接请求。
-
第一次握手:首先客户端将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给服务器,客户端就会从closed->SYN_SENT状态,等待Server确认。
-
第二次握手:服务端在Listen状态接收到了客户端的第一个数据包,这时由标志位SYN=1知道客户端想请求建立连接,服务器会将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该第二个数据包发送给客户端以确认连接请求,服务器就由listen进入SYN_RCVD状态。
-
第三次握手:客户端在SYN_SEND状态收到第二个数据包后,先检查ack是否为x+1,ACK是否为1,如果都正确则将标志位ACK置为1,ack=values(‘seq’)+1=y+1,客户端就由SYN_SEND状态进入了ESTABLISHED状态,并将该第三个数据包发送给服务器,服务器检查第三个数据包中ack是否为seq+1=y+1,ACK是否为1,如果正确则连接建立成功,服务器由SYN_RCVD状态进入ESTABLISHED状态,就完成三次握手,随后客户端与服务器之间可以开始传输数据啦。