TCP协议建立连接与释放连接

TCP协议建立连接与释放连接

TCP协议是面向连接的协议,要传送数据,需要进行建立连接、传送数据、释放连接三个阶段。其中建立连接需要三次握手,而释放连接需要四次握手,其原理如下:

建立连接:

首先,服务器端要开启服务,创建TCB(传输控制模块),然后服务器端进入LISTEN状态,等待客户端的连接。

客户端也需要建立TCB,然后向服务器端发出请求:SYN=1seq=w,然后进入SYN-SEND状态,等待响应。

服务器端接收到请求后,发送:SYN=1ACK=1ack=w+1,seq=u,然后进入SYN-REVD状态。

客户端接收到后,发送:ACK=1seq=w+1,ack=u+1,进入ESTABLISHED阶段。

服务器接收到后,进入ESTABLISHED阶段,TCP连接正式建立。

三次握手原因

如果A发送给B的数据报中途耽搁,A会重发,B先收到了第二个,顺利与A建立连接。AB传送完数据之后释放连接,此时B又收到了第一个,以为A又要连接,于是进行响应,如果两次连接则到此B已经与A建立了连接,此时B一直等A发送数据,消耗了资源。所以必须进行三次握手。

释放连接

客户端发出请求,请求释放连接,发送:FIN=1seq=w,然后进入FIN-WAIT-1阶段。

服务器端收到请求,发送:(1ACK=1,ack=w+1,seq=u,进入CLOSE-WAIT阶段。此时如果服务器仍有数据需要发送,则继续发送。直到没有数据发送时,向客户端发送:(2FIN=1,ACK=1,ack=w+1,seq=y,进入LAST-ACK阶段。

客户端收到(1),进入FIN-WAIT-2阶段,收到(2),向服务器发送:ACK=1ack=y+1,seq=w+1,进入TIME-WAIT阶段,客户端等待两个MSL(最长报文段寿命),关闭连接。

服务器端收到后,也关闭连接。

TIME-WAIT的作用

1.如果B收不到A最后发送的确认请求,则B会重新发送FINA2MSL时间内会收到B重发的,A可以再进行确认,这样防止B收不到确认时,服务器端不能正确进入CLOSED.

2.2MSL中,网络中所有与本次连接相关的数据包都被消耗掉,防止出现已失效的连接请求报文段的问题。

保活计时器

服务器端有一个保活计时器用于记录客户端状态,以免白白等待,每收到一次客户端的消息就更新保活计时器,通常为两小时,如果超过两小时还没收到新的,则服务器会发探测数据报来探测客户端的状态。

 

发布了47 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/nanchengyu/article/details/53365996