面试!TCP的三次握手和四次挥手的过程

最近面试被问道TCP的三次握手和四次挥手,没准备好,回答的不流畅,趁着空闲时间,赶紧再梳理一下。

三次握手

文字描述

1.由客户端发起链接请求,TCP数据包的SYN标识位等于1,代表要建立链接。

2.服务端接收到消息后,向客户端发送TCP数据包,ACK位等于1,服务端准备好了。SNY位等于1,请求与客户端建立链接。

3.客户端收到消息后,向服务端发送数据ACK=1,代表收到了服务端的消息,并可以建立链接了。

为什么需要三次?

因为client发起建立连接后,server可以收到消息。但是server不确定client能不能收到server发出的消息,所以需要第二次确定。

等client确认可以收到消息后,才真正建立链接。

系统中的一些防御策略可以决定一个端口的发送和接收的规则,有些端口是只能发送不能接收,所以需要二次确定再建立链接,才能保证链接的可靠性。

流程图

四次挥手

文字描述

1.由client发起断开请求,此时FIN标志位等于1,代表客户端要断开链接

2.server接收到请求后,会立刻回复ACK=1,代表server准备断开链接

但是这个时候,server可能还存在没有传输完的数据,所以server并不会直接发送断开标识,而是发送一个ACT的数据包来告诉client收到了断开请求。

3.等数据传输完成后,由server向client发送FIN=1的数据包,代表server数据传输完成,可以断开了

4.接收到server的FIN数据包后,client会发送ACK=1,表示自己收到了断开通知,链接断开。

为什么要四次?

因为再客户端发起断开请求后,服务端可能还没有传输完成,所以要等服务端数据传输完成后,再向客户端发起断开请求。

流程图

原文地址:https://www.cnblogs.com/inkyi/p/14940475.html