三次握手
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手规则确认建立一个连接。下面是对将会出现的TCP标志位(位码)简单解释:
SYN(synchronous建立联机)、 ACK(acknowledgement 确认)、 PSH(push传送) 、FIN(finish结束)、 RST(reset重置) 、URG(urgent紧急)、SEQ(Sequence number顺序号码)、Acknowledge number(确认号码)。
三次握手的步骤为:
- 第一次握手:主机A发送位码syn=1,随机产生seq 数据包到服务器,主机B由syn=1知道,A要求建立联机;
- 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq包;
- 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功;
- 完成三次握手,主机A与主机B开始传送数据;
配图如下:
四次挥手
所谓四次挥手,即终止TCP连接。具体就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
四次挥手的步骤如下:
- 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
- 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
- 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
*第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
配图如下: