TCP(Transmission Control Protocol)传输控制协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)
第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
第一次挥手:
TCP发送一个结束请求报文(FIN=1),用来关闭客户端到服务器端的连接。客户端进程发出连接释放报文,并且停止发送数据,随机产生一个序列号(seq=x)。此时客户端进入终止等待状态。
第二次挥手:
服务器端收到(FIN=1)请求报文,并向客户端发送一个确认报文(ACK=1,ask=x+1),并且带上自己随机产生的序列号(seq=z)。此时服务器进入关闭等待状态。TCP通知高层应用进程,客户端向服务器端的方向就释放了。这时为半关闭状态,也就是说客户端已经没有数据要向服务器端发送了,但是如果服务器端还需向客户端发送数据,客户端还需要接收数据。这样的状态将会持续一段时间。客户端收到服务器端的确认请求后,此时客户端进入了终止等待-2状态,等待服务器端发送连接释放报文。
第三次挥手:
服务器端发送一个(FIN=1)结束请求到客户端,告诉客户端,我要与你断开连接啦!服务器关闭客户端的连接。服务器将最后的数据发送完毕后,就向客户端发送请求报文(FIN=1,ask=x+1,ACK=1),同时随机生成一个序列号为y。.由于处于半关闭状态,服务器还有最后的数据需要发送,此时服务器进入了最后的确认状态,等待客户端的确认。
第四次挥手:
客户端发送确认释放报文确认,并发送确认的序列号,这样关闭完成。客户端收到服务器端的连接释放报文后必须发出确认,(ACK=1,ask=y+1),此时客户端进入时间等待状态。这时TCP连接还没有释放,必须等到最长的报文段寿命结束。客户端撤销相应的TCB后进入closed状态。服务器收到客户端发出的确认信息,撤销相应的TCB,立即进入closed状态。