tcp三次握手,四次挥手

三次握手

tcp三次握手,四次挥手_第1张图片

  • 第一次握手:客户端向服务器发送请求连接,并发送一个syn n字段
  • 第二次握手:服务器收到客户端发送的syn n字段后,向客户端发送syn n+1字段,表示自己准备好了,可以进行连接,同时发送一个ack n字段,询问客户端是否准备好连接
  • 第三次握手:客户端收到syn n+1和ack n字段后,知道服务器端准备好连接,然后向服务器发送ack n+1字段,表示自己也准备好了
  • 连接完成
为什么要三次握手
  • 为了防止已经失效的连接请求报文又传送到服务器,产生错误
为什么是三次握手而不是二次握手
  • 三次握手是通信的双方互相发送序列号,并确认对方已经收到序列号的必要步骤
  • 如果只是二次握手,那么只有发送请求的一方的序列号能被确认收到,而被请求方的序列号不能得到确认是否收到

四次挥手

tcp三次握手,四次挥手_第2张图片

  • 第一次挥手:客户端向服务器发送fin字段,请求关闭连接,表示不会在给服务器发送数据
  • 第二次挥手:服务器接收到请求,给客户端发送ack字段,表示确认收到
  • 第三次挥手:服务器向客户端发送fin字段,请求关闭连接,表示不会在给客户端发送数据
  • 第四次挥手:客户端收到fin字段,给服务器发送ack字段,表示确认收到
  • 断开连接
为什么是四次挥手而不是三次挥手

当客户端向服务器发送关闭请求后,表示客户端不会在给服务器发送数据,但是此时服务器给客户端的数据有可能还没有发送完成,因此要等到服务器将数据发送完,才能向客户端发送关闭连接的请求

长连接

  • 建立连接——数据传输…(保持连接)…数据传输——关闭连接
    tcp三次握手,四次挥手_第3张图片

短连接

  • 建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接
    tcp三次握手,四次挥手_第4张图片
长连接和短连接的区别
  • 长连接可以减少较多的TCP建立连接和关闭的操作,节约资源和时间
  • 某些客户端会恶意建立长连接,却长时间没有读写事件发生,导致服务器端受损
  • 短连接对于服务器来说管理简单,存在的连接都是有用的连接,不需要额外的控制手段
  • 但如果客户请求频繁,会在TCP的连接和关闭操作上浪费时间和资源

你可能感兴趣的:(http,http,网络协议,tcpip)