zoukankan      html  css  js  c++  java
  • TCP状态转换

    1.TCP建立连接

    TCP 是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。TCP使用三次握手( three-way handshake )协议来建立连接。

    尽管发生的可能性极小,两个应用程序同时彼此执行主动打开的情况还是可能的。当出现同时打开的情况时,两端几乎在同时发送 SYN ,并进入 SYN_SENT 状态。当每一端收到 SYN 时,状态变为 SYN_RCVD ,同时它们都再发 SYN 并对收到的 SYN 进行确认。当双方都收到 SYN 及相应的 ACK 时,状态都变迁为 ESTABLISHED 。

    2.TCP断开连接

     TCP 连接建立起来后,就可以在两个方向传送数据流。当 TCP 的应用进程再没有数据需要发送时,就发关闭命令。 TCP 通过发送控制位 FIN=1 的数据片来关闭本方数据流,但还可以继续接收数据,直到对方关闭那个方向的数据流,连接就关闭。终止一个连接要经过 4 次握手,这是因为 TCP 的半关闭( half-close )造成的。由于一个 TCP 连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。关闭的原则就是当一方完成它的数据发送任务后就能发送一个 FIN 来终止这个方向连接。当一端收到一个 FIN ,它必须通知应用层另一端已经终止了那个方向的数据传送。发送 FIN 通常是应用层进行关闭的结果。

    如果连接双方的应用进程同时发关闭命令,则双方 TCP 在发送完尚未处理的报文段后,发送 FIN 报文。各方 TCP 在 FIN 前所发报文都得到确认后,发 ACK 确认它收到的 FIN 。各方在收到对方对 FIN 的确认后,同样等待一段时间再关闭连接。这称之为同时关闭( simultaneous close )。

    3.TCP状态转换综述

    TCP 状态表

    状 态

    描 述

    CLOSED

    关闭状态,没有连接活动或正在进行

    LISTEN

    监听状态,服务器正在等待连接进入

    SYN RCVD

    收到一个连接请求,尚未确认

    SYN SENT

    已经发出连接请求,等待确认

    ESTABLISHED

    连接建立,正常数据传输状态

    FIN WAIT 1

    (主动关闭)已经发送关闭请求,等待确认

    FIN WAIT 2

    (主动关闭)收到对方关闭确认,等待对方关闭请求

    TIMED WAIT

    完成双向关闭,等待所有分组死掉

    CLOSING

    双方同时尝试关闭,等待对方确认

    CLOSE WAIT

    (被动关闭)收到对方关闭请求,已经确认

    LAST ACK

    (被动关闭)等待最后一个关闭确认,并等待所有分组死掉

  • 相关阅读:
    Task 5.1 电梯调度程序需求调研报告
    Task 4 求数组的连续子数组的最大和(团队合作)
    class 3 求数组中的最大值(单元测试)
    《你的灯亮着吗》读书笔记3
    优惠购书
    校友聊NABCD
    环状二维数组(改进版)
    环状二维数组
    环状一维数组
    二维数组最大值
  • 原文地址:https://www.cnblogs.com/yanenquan/p/3697732.html
Copyright © 2011-2022 走看看