socket中TCP的三次握手建立连接&四次握手释放详解

A.TCP建立连接要进行"三次握手",也就是交换三个分组。大致流程如下:

>客户端向服务器发送一个SYN J

>服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1

>客户端再向服务器发一个确认ACK K+1

当客户端调用connect时,触发连接请求,向服务器发送了SYN J包,这时候connect进入阻塞状态(等待服务器回复应答);

服务器监听到连接请求,也就是收到了SYN J包,服务器调用accept函数接收请求向客户端发送SYN K,ACK+1,这时accept进入阻塞状态;

客户端收到服务器的SYN K,ACK J+1之后,这时connect返回,并对SYN K进行确认;

服务器接收到ACK K+1时,accept返回,至此三次握手完毕,连接建立

总结:客户端的connect在三次握手的第二次返回,而服务器端的accept在三次握手的第三次返回

三次握手发生的时间点就是在客户端与服务器端建立连接的时候发生的

B.socket中TCP的四次握手释放连接详解

前提一定客户端的进程与服务器端的进程建立了连接(这话说的比较多余--!)

>某个应用进程首先调用close主动关闭连接,这时候这个应用程序的一侧发送FIN M包;

>另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认。它的接收也作为文件结束符传递给应用进程,因为FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据;同事会回复一个ACK M+1

>一段时间之后,接收到文件结束符的应用进程调用close关闭它的socket。这导致它的TCP也发送了一个FIN N;

>接收到这个FIN的源发送端TCP对其确认,确认后回复ACK N+1



猜你喜欢

转载自blog.csdn.net/weixin_42135997/article/details/80417521