zoukankan      html  css  js  c++  java
  • TCP三次握手与四次分手

    三次握手

    解释:客户端A和服务器B刚开始处于CLOSED状态,两者之间没有任何联系,A主动打开,B被动打开由
              CLOSED进入LISTEN状态,这是A发送一个SYN=1的标志位的数据包,并且数据的序列为seq=x,
              A也由CLOSED进入SYN-SENT状态,B接收到A的请求,也主动 发送SYN=1的建立连接的请求的
             数据,在B这里数据包的排序为seq=y并且发送一个确认号ack=x+1用来表示已经收到A发送的数据,
             ACK用来确认ack是有效的,B也有LISTEN转入SYN-RCVD状态,A收到B的数据,发送一个序列号
            为x+1,确认号为y+1的数据,同样ACK用来表示ack的有效性,此时A由SYN-SENT状态转入
            ESTAB-LISTEND状态,B收到A的回复,状态也转入ESTAB-LISTEND状态。 到此三次握手建立完成。

    知识点:

    URG :表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer )只有当
                 URG=1 时才有效。

    ACK :表示是否前面的确认号字段是否有效。ACK=1 ,表示有效。只有当ACK=1时 时,前面的确认号
               字段才有效。TCP 规定,连接建立后, ACK 必须为1, 带ACK 标志的TCP 报文段称为确认报文段

    PSH :提示接收端应用程序应该立即从TCP 接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1 ,
               则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,
               就会一直停留在TCP 接收缓冲区中。

    RST :如果收到一个RST=1 的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,
               然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST 标志的TCP
               报文段称为复位报文段

    SYN :在建立连接时使用,用来同步序号。当SYN=1 ,ACK=0 时,表示这是一个请求建立连接的报文段;
               当SYN=1 ,ACK=1 时,表示对方同意 建立连接。SYN=1,说明这是一个请求建立连接或同意建立
               连接的报文。只有在前两次握手中SYN才 才置为1 ,带SYN 标志的TCP 报文段 称为同步报文段。

    FIN :表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1 ,即告诉对方:“我的数据
              已经发送完毕,你可以释放连接了”,带FIN 标志的TCP报 报文段称为结束报文段。

    有限状态机:

    CLOSED  没有任何连接状态
    LISTEN  侦听状态,等待来自远方TCP 端口的连接请求
    SYN-SENT  在发送连接请求后,等待对方确认

    SYN-RECEIVED  在收到和发送一个连接请求后,等待对方确认

    ESTABLISHED:建立连接

    涉及攻击:黑客制造出大量主机和服务器建立连接,在建立三次握手的时候,不给服务器发送第三次确认,
                     这样就会增大服务器的缓存压力,导致服务器无法对外提供服务。

    四次挥手

    解释:刚开始客户端A和服务器B都处于ESTAB-LISHED状态,是可以进行数据传输的,这是A主动关闭,
              并发送一个FIN=1,seq=u的数据,A随机进入FIN-WAIT-1状态,B收到数据后,发送一个seq=v,
              ack=u+1(表示接收到A发送的数据),ACK=1表示ack的有效性,B随机进入CLOSE-WAIT状态,
             A也进入FIN-WAIT-2状态,B此时再发送一个FIN=1,ACK=1,seq=w,ack=u+1的数据,随机进入
             LAST-ACK状态,A收到后,发送一个seq=u+1,ack=w+1,ACK=1的数据,B收到后进入CLOSE
            状态,A进入TIME-WAIT状态,2倍的MSL值后进入CLOSED状态。

    知识点:

    有限状态机

    FIN-WAIT-1 主动关闭, 主机已发送关闭连接请求,等待对方确认

    FIN-WAIT-2  主动关闭, 主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求

    TIME-WAIT  完成双向传输连接关闭,等待所有分组消失

    CLOSE-WAIT  被动关闭, 收到对方发来的关闭连接请求,并已确认。

    LAST-ACK 被动关闭, 等待最后一个关闭传输连接确认,并等待所。

    CLOSING:双方同时尝试关闭传输连接,等待对方确认。

    注意:

    当客户端执行主动关闭时,它将向服务器发送一个结束报文段,同时连接进入FIN_WAIT_1 状态。
    若此时客户端收到服务器专门用于确认目的的确认报文段,则连接转移至FIN_WAIT_2 状态。
    当客户端处于FIN_WAIT_2 状态时,服务器处于CLOSE_WAIT 状态,这一对状态是可能发生
    半关闭的状态。此时如果服务器也关闭连接(发送结束报文段)则客户端将给予确认并进入
    TIME_WAIT 状态。

  • 相关阅读:
    论文阅读:Single Image Dehazing via Conditional Generative Adversarial Network
    lintcode-720重排带整数字符串
    lintcode-828. 字模式
    lintcode-1038. 珠宝和石头
    lintcode-1174.下一个更大的元素 III
    lintcode-80.中位数
    《大道至简》第二章读后感
    从命令行输出数字,求和计算
    《大道至简》第一章伪代码观后感
    ngx_http_referer_module模块说明
  • 原文地址:https://www.cnblogs.com/jiesying/p/7460185.html
Copyright © 2011-2022 走看看