TCP(Transmission Control Protocol) 传输控制协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
TCP的6种标志位:URG、ACK、PSH、RST、SYN、FIN
URG:表示紧急
ACK:表示响应
PSH:表示有数据
RST:表示重置
SYN:表示建立连接
FIN:表示关闭连接
TCP的三次挥手过程
第一次握手:建立连接(默认客户端的端口是CLOSED状态,建立连接的时候主动打开打开),客户端发送SYN(SYN=1,seq=x)包到服务器,并进入SYN_SENT状态,等待服务器确认。
第二次握手:服务器收到SYN包(默认服务器的端口是CLOSED状态,它会不定时地被动打开端口,来等待客户端的请求,此时端口为LISTEN状态),必须确认客户的SYN(SYN=1,ACK=1,seq=y,ack=x+1),此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认ack=y+1包,此包发送完毕,客户端和服务器都进入ESTAB_LISHEN状态。
完成三次握手之后,客户端和服务端可以进行通信。
TCP的四次挥手过程
第一次挥手:客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号为seq=u,确认序号为ack=1。
第二次挥手:服务器收到FIN后,发回一个ACK(标志位ACK=1),确认序号为收到的序号seq=v。序号为收到的确认序号ack=u+1。
第三次挥手:服务器关闭与客户端的连接,发送一个FIN。标志位FIN和ACK置为1,序号为seq=w,确认序号为ack=u+1。
第四次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号seq=u+1,序号为收到的确认序号ack=w+1。
TCP 协议中的三次握手和四次挥手的整个过程
客户机端的三次握手和四次挥手
服务器端的三次握手和四次挥手
有限状态机FSM:Finite State Machine 说明
** CLOSED ** 没有任何连接状态
** LISTEN** 侦听状态,等待来自远方TCP 端口的连接请求
** SYN-SENT ** 在发送连接请求后,等待对方确认
** SYN-RECEIVED ** 在收到和发送一个连接请求后,等待对方确认
ESTABLISHED 代表传输连接建立,双方进入数据传送状态
** FIN-WAIT-1** 主动关闭, 主机已发送关闭连接请求,等待对方确认
** FIN-WAIT-2 ** 主动关闭, 主机已收到对方关闭传输连接确认,等待
对方发送关闭传输连接请求
** TIME-WAIT ** 完成双向传输连接关闭,等待所有分组消失
** CLOSE-WAIT** 被动关闭, 收到对方发来的关闭连接请求,并已确认
** LAST-ACK 被动关闭, 等待最后一个关闭传输连接确认,并等待所
有分组消失
** CLOSING 双方同时尝试关闭传输连接,等待对方确认