TCP(Transmission Control Protocol) 传输控制协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接。
位码即tcp标志位,有6种标志:
URG(urgent紧急)
ACK(acknowledgement 确认)
PSH(push传送)
RST(reset重置)
SYN(synchronous建立联机)
FIN(finish结束)
Sequence number(顺序号码) Acknowledge number(确认号码)
三次握手
第一次握手:主机A(客户端)发送位码为syn=1,随机产生seq number=1234567的数据包到主机B(服务器)并进入SYN_SENT状态,等待服务器确认;
第二次握手:主机B收到请求后,由SYN=1知道,A要求建立联机,就会发送确认联机信息,即向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包,此时服务器进入SYN_RECV状态;
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功,客户端和服务器进入ESTABLISHED状态, 完成三次握手,主机A与主机B开始传送数据。
这3个报文段完成连接的建立,称为三次握手。发送第一个SYN的一端将执行主动打开,接收这个SYN并发回下一个SYN的另一端执行被动打开。
四次挥手(连接终止协议)
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
(2)服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3)服务器关闭客户端的连接,发送一个FIN给客户端。
(4)客户段发回确认,并将确认序号设置为收到序号加1。
TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力,这就是TCP的半关闭。
客户端发送FIN,另一端发送对这个FIN的ACK报文段。当收到半关闭的一端在完成它的数据传送后,才发送FIN关闭这个方向的连接,客户端再对这个FIN确认,这个连接才彻底关闭。