TCP(Transmission Control Protocol) 传输控制协议

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,通过三次握手建立一个连接

TCP 三次握手图示:

TCP协议的三次握手、四次挥手_TCP_02


位码即tcp标志位,有6种标示:

SYN(synchronous建立联机)

ACK(acknowledgement 确认)

PSH(push传送)

FIN(finish结束)

RST(reset重置)

URG(urgent紧急)


Sequence number(顺序号码) Acknowledge number(确认号码)


第一次握手:客户端A向服务器发送SYN=1 ,随机产生seq=x(序号为x) 的数据包,进入SYN-SENT状态,服务器B由SYN=1得知A要建立连机。


第二次握手:服务端B收到请求后确认信息,向客户端返回SYN=1,ACK=1 ,seq=y,ack=x+1(表示客户A下一次发送的数据包号为x+1),此时服务器B进入SYN-RCVD状态。


第三次握手:客户端A收到后检查ack(确认号)是否正确,即第一次发送的序号+1和ACK是否为1.若正确,客户端A再次发送ACK=1,发送序号为seq=x+1,确认号为y+1,服务端B收到后确认seq与ack=1,此时客户A和服务器B进入ESTABLISHED状态,完成三次握手。      

完成三次握手,客户端和服务器开始传送数据。

图解:

一个三次握手的过程(图1,图2)

TCP协议的三次握手、四次挥手_TCP_04

(图1)

 TCP协议的三次握手、四次挥手_ 四次挥手_06

(图2)

第一次握手的标志位(图3)

我们可以看到标志位里面只有个同步位,也就是在做请求(SYN)

 TCP协议的三次握手、四次挥手_TCP_08

 (图3)

 

第二次握手的标志位(图4)

我们可以看到标志位里面有个确认位和同步位,也就是在做应答(SYN + ACK)

TCP协议的三次握手、四次挥手_ 三次握手_10

(图4)

 

第三次握手的标志位(图5)

我们可以看到标志位里面只有个确认位,也就是再做再次确认(ACK)

TCP协议的三次握手、四次挥手_ 三次握手_12

(图5)

 

一个完整的三次握手也就是 请求---应答---再次确认


四次挥手


由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。客户A和服务器B都可以主动断开连接,如果A客户发送完数据后不主动断开就会占有服务器B的资源。

TCP协议的三次握手、四次挥手_ 三次握手_14



第一次挥手:客户A和服务器B都处于ESTABLISHED建立状态,客户A向服务器B发送FIN=1来结束A到B的数据传送。客户A就进入FIN-WAIT-1状态。


第二次挥手:服务器B收到这个FIN,它返回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号,服务器B进入COLSE-WAIT状态。


第三次挥手:服务器B关闭与客户A的连接,发送一个FIN给客户A。服务器B进入closed状态


第四次挥手:客户A返回ACK确认,并将确认序号设置为收到的序号加1,客户A进入TIME-WAIT状态,到此四次挥手完成。