zoukankan      html  css  js  c++  java
  • tcp的三次握手和四次回收

    一、三次握手

      三次握手建立tcp连接:

        1.客户端发送syn报文给服务端

        2.服务端收到客户端端syn报文,返回syn+ack应答报文,告诉客户端可以建立连接了

        3.客户端收到服务端的应答报文后,发送一个ack报文,告诉服务端我收到服务端的响应报文了,并且进入established状态

     第3步看起来好像有点多余,到底有什么作用呢?

       1.如果客户端第1步建立连接正好网络延时,syn报文没发送到服务端。客户端收不到ack报文则会再发起一次建立连接请求这是第二次请求,服务端返回ack建立连接。这是第一次请求到达了服务端,服务端则会认为又一次新的连接请求,再建立一个连接,这就浪费服务端资源了。

       2.第2步服务端返回ack报文时由于网络延时,没有及时返回给客户端。客户端此时就会认为服务端没有同意建立连接,就不继续往下运行了,不会发送数据给服务端。而服务端此时认为已经建立好连接了,一直在等客户端发送数据过来,浪费服务端连接资源。

     syn攻击:

     攻击者模拟客户端发送syn报文给服务端,服务端为这些请求建立连接,一直等待客户端的确认报文。由于这些连接长时间得不到释放,正常客户端的请求进不来被丢弃,导致服务变慢。

       

    二、四次挥手

      四次挥手释放连接:

      1.客户端发送fin报文给服务端,客户端不会再发送数据请求给服务端了,从established状态进入fin-wait-1状态

          2.服务端收到fin请求后,返回ack应答报文

          3.服务端数据处理完后,发送fin报文给客户端,不再发送数据请求给客户端了,可以断开连接了

          4.客户端发送ack报文给服务端。

      为什么关闭连接需要四次挥手呢?

      对方发送fin报文过来,只是表示对方不再发送数据过来了,你可能还有数据需要处理,所以只是立即返回一个ack报文给对方,告诉对方收到了。然后处理完数据后,再发送fin报文给对方,告诉对方你处理完了,可以关闭连接了。

    参考文章:

    https://www.cnblogs.com/Andya/p/7272462.html

    https://www.cnblogs.com/zmlctt/p/3690998.html

  • 相关阅读:
    细说进程、应用程序域与上下文之间的关系
    sql server2008添加登录账户配置权限 && 登录时18456错误
    Sql CLR
    设计模式学习篇(一)
    常用实用方法
    OOP 6大基本原则
    如何成为一个优秀的程序员
    家庭网络
    反射
    ADO.Net 事务操作
  • 原文地址:https://www.cnblogs.com/ITyannic/p/12502381.html
Copyright © 2011-2022 走看看