好多文章整理的不清楚,没办法,自己整理了一篇。
位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
TCP的三次握手示意图:
三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。
第一次握手:客户端将SYN请求包(位码为SYN=1、随机值seq=J)发送给服务器端。客户端进入SYN_SENT状态,等待服务器端确认。
第二次握手:服务器端收到SYN请求包后由位码SYN=1知道客户端请求建立连接,并将SYN请求包(SYN=1)+ACK确认包(位码ACK=1,响应值ack=J+1,随机值seq=K)发送给客户端以确认连接请求。服务器端进入SYN_RCVD状态。
第三次握手:客户端收到确认后检查确认包(ack是否为J+1,ACK是否为1),如果正确则将ACK确认包(位码ACK=1,响应值ack=K+1)发送给服务器端。服务器端检查确认,如果正确则连接建立成功。客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。