假设A为客户端,B为服务端。
首先B处于LISTEN(监听)状态,等待客户的连接请求。
A向B发送连接请求报文,SYN=1,ACK=0 选择一个初始的序号X
B收到连接请求,如果同意建立连接,则向A发送连接确认报文,SYN=1,ACK=1 确认号为1,同时也选择一个初始的序号Y。
A收到B的连接确认序号后,还要向B发出确认,确认号为Y+1 序号为x+1
B收到A的确认后,连接建立。

三次握手的原因

第三次握手是为了防止失效的连接请求到服务器,让服务器错误打开连接。客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接,但是这个滞留的连接请求最后还是会到达服务端,如果不进行第三次握手,那么服务器就会打开两个连接,如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。