TCP三次握手和四次挥手的面试准备|青训营笔记

84 阅读2分钟

传输控制协议(TCP,TransmissionControlProtocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。

tcp数据报的结构:

image.png

tcp的三次握手:

  • 第一次握手:客户端发出SYN数据报,其报文头部的SYN位置1,用于通知服务端建立tcp传输连接。
  • 第二次握手:服务端收到SYN数据报后,就会发出ACK数据报,其报文头部的SYN,ACK位都置1,用于通知客户端已经收到建立连接的请求。
  • 第三次握手:客户端发送ACK数据报对服务端发来的数据报进行应答,其SYN位置0,ACK位置1,用于通知服务端已经收到它的ACK确认报文

然后就能进行正常的通信了

tcp的四次挥手

  • 第一次挥手:客户端发出FIN数据报,其首部的FIN位置1,用于通知服务端断开TCP连接
  • 第二次挥手:服务器对客户端发来的FIN数据报进行确认,发出ACK数据报,其头部的ACK位置1,用于通知客户端我已经收到客户端断开连接的请求
  • 第三次挥手:等服务端处理完自己的数据后,再发送FIN数据报,其头部的FIN位置1,用于通知客户端我已经做好断开tcp连接的准备
  • 第四次挥手:客户端再收到服务端的FIN数据报后,发出一个ACK确认数据报文,其头部的ACK位置1,用于通知服务端断开tcp连接。

服务端收到客户端的ACK确认数据文后,先完成连接的断开,客户端在等待2msl(MSL 指的是 Maximum Segment Lifetime:一段 TCP 报文在传输过程中的最大生命周期。)后完成连接的断开。 如果服务端在1msl内没有收到确认数据报,就会重新发送FIN数据报,客户端收到FIN数据报后也会重新对其发送ACK确认数据报。