什么是三次握手
三次握手就是指建立一个 TCP 连接时,需要客户端和服务器总共发送三个包
为什么要进行三次握手
进行三次握手的目的是确认客户端和服务器端的发送能力和接收能力都正常
三次握手的过程
看图说话:
首先明确 TCP 中 6 个标志位的含义
- SYN(synchronous 建立连接)
- ACK(acknowledgement 确认)
- PSH (push 传送)
- FIN(finish 结束)
- RST(reset 重置)
- URG(urgent 紧急)
数据包
Sequence number(顺序号码)
Acknowledge number(确认号码)
第一次握手:
客户端发送 SYN=1(代表客户端要建立连接)的数据包,同时随机产生 seq(Sequence number)= x 的数据包,然后传输到服务器
此时客户端进入 SYN-SENT 状态
第二次握手:
服务器端收到客户端的信息,通过 SYN=1 知道是要建立连接
然后向客户端发送 ACK=1(代表确认)的数据包,ack(Acknowledge number)=x+1, SYN=1(代表建立连接),随机产生 seq=y 的数据包
此时服务器端进入 SYN_RECV 状态
第三次握手:
客户端收到服务器端信息,通过 SYN=1 知道要建立连接
然后检查 ack 是否正确,是不是第一次发送的 seq+1,同时检查 ACK 是否为 1
如果正确,客户端再发送 ack=y+1,ACK=1 到服务器端
服务器收到确认 ack 值和 ACK=1 后则建立成功
此时客户端和服务器端都进入 ESTABLISHED 状态
网友评论