【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
TCP三次握手
第一次握手:客户端向服务器发送→SYN J(调用connect进行主动打开。表示同步,告诉服务器客户将在连接中发送的数据的初始序列号,此时connect阻塞)
第二次握手:服务器向客户端响应一个→SYN K和→ACK J+1,客户端收到后connect返回(调用accept被动打开,告诉客户端服务器将在连接中发送的数据的初始序列号,此时accept阻塞)
第三次握手:客户端向服务器发送→ACK K+1,服务器收到后accept返回。
TCP四次挥手
第一次挥手:某个应用先调用close(主动关闭)。这一端的TCP发送一个→FIN M。
第二次挥手:收到FIN后(被动关闭),响应一个→ACK M+1。
第三次挥手:一段时间后,收到文件结束符的应用进程调用close关闭套接口。导致它的TCP也发送一个→FIN N。
第四次挥手:收到FIN的原发送端TCP进行确认发送一个→ACK N+1。
TCP为何采用三次握手来建立连接,若采用二次握手可以吗,请说明原因?
三次握手是为了防止已失效的连接请求再次传送到服务器端。
二次握手不可行,因为:如果由于网络不稳定,虽然客户端以前发送的连接请求以到达服务方,但服务方的同意连接的应答未能到达客户端。则客户方要重新发送连接请求,若采用二次握手,服务方收到重传的请求连接后,会以为是新的请求,就会发送同意连接报文,并新开进程提供服务,这样会造成服务方资源的无谓浪费。
来源:oschina
链接:https://my.oschina.net/u/2350638/blog/499053