计算机网络

123 阅读2分钟

TCP 3次握手

image.png

3次握手的过程

  • 服务器处于 LISTEN(监听)状态,等待客户的连接请求
  • 客户端向服务器发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x
  • 服务端收到连接请求报文,如果同意建立连接,则向客户端发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y
  • 客户端收到服务端的连接确认报文后,还要向服务端发出确认,确认号为 y+1,序号为 x+1
  • 服务器收到客户端的确认后,连接建立

为什么需要3次握手

为了防止失效的连接请求到达服务器,让服务器错误打开连接

  • 客户端等待一个超时重传时间之后,就会重新请求连接
  • 原来滞留的连接请求最后还是会到达服务器
  • 有第三次握手,客户端会忽略服务器发送的对滞留连接请求的连接确认
  • 就避免了服务端对失效的连接请求建立连接

TCP 4次挥手

image.png

4次挥手的过程

  • 客户端发送连接释放报文,FIN=1
  • 服务器收到之后发出确认,此时 TCP 属于半关闭状态,服务端能向客户端发送数据但是客户端不能向服务端发送数据
  • 当服务端数据发送完成,不再需要连接时,发送连接释放报文,FIN=1
  • 客户端收到后发出确认,进入TIME-WAIT状态,等待 2 MSL(最大报文存活时间)后释放连接
  • 服务器收到客户端的确认后释放连接

为什么需要4次挥手

为了让服务器端发送还未传送完毕的数据

  • 服务器收到连接释放报文之后发出确认,此时 TCP 属于半关闭状态
  • 服务器收到了这个报文,就进入了 CLOSE-WAIT 状态