- 浏览: 140789 次
文章分类
最新评论
TCP 涉及连接建立和终止的操作可用如下的状态转换图来说明。
TCP 为一个连接定义了 11 种状态,这些状态可使用 netstat 显示,并且 TCP 规则规定如何基于当前状态及在该状态下所接收的分节从一个状态转换到另一种状态。比如,当某个应用进程在 CLOSED 状态下执行主动打开时,TCP 将发送一个 SYN,且新的状态是 SYN_SENT。如果这个 TCP 接着接收到一个带 ACK 的 SYN,它将发送一个 ACK,且新的状态是 ESTABLISHED。这个最终状态是绝大多数数据传送发生的状态。自 ESTABLISHED 状态引出的两个箭头处理连接的终止。如果某个应用进程在接收到一个 FIN 之前调用 close(主动关闭),那就转换到 FIN_WAIT_1 状态。但如果某个应用进程在 ESTABLISHED 状态期间接收到一个 FIN(被动关闭),那就转换到 CLOSE_WAIT 状态。
下图展示一个完整的 TCP 连接所发生的实际分组交换情况,包括连接建立、数据传送和连接终止 3 个阶段,以及每个端点所历经的 TCP 状态。本例中的客户通告一个值为 536 的 MSS(表明该客户只实现了最小重组缓冲区大小),服务器通告一个值为 1460 的 MSS(以太网上 IPv4 的典型值),不同方向上的 MSS 值可以不相同。
图中有个 TIME_WAIT 状态,一般执行主动关闭的那端在该状态的持续时间是 2MSL(maximum segment liftime, MSL),即 1 分钟到 4 分钟之间(RFC 1122 建议 MSL 值是 2 分钟,而源自 Berkeley 的实现传统上改用 30 秒)。MSL 是任何 IP 数据报能够在因特网中存活的最长时间。该值是有限的,因为每个数据报都含有一个称为跳限(hop limit)的 8 位字段,其最大值为 255。尽管这是一个跳数限制而非真正的时间限制,不过我们仍然假设:具有最大跳限的分组在网络中存在的时间不可能超过 MSL 秒。TIME_WAIT 状态有两个存在的理由:
1、可靠地实现 TCP 全双工连接的终止。
2、允许老的重复分节在网络中消逝。
第一个理由可假设丢失了上图中的最后一个 ACK 来解释。此时服务器将重新发送它的那个 FIN,因此客户必须维护状态信息,以允许它重发最终那个 ACK,否则它将相应以一个 RST,该分节将被服务器解释成一个错误。若 TCP 要彻底执行全双工关闭,则必须正确处理连接终止序列 4 个分节中的任何一个丢失的情况。本例子也说明了处于 TIME_WAIT 状态的是执行主动关闭的那一端的原因,因为可能不得不重传最终那个 ACK 的就是那一端。
而对于第二个理由,我们可假设打算先正常关闭一个连接,之后再在同一个套接字上重新建立一个连接(后一个连接称为前者的化身(incarnation))。TCP 必须防止来自某个连接的老的重复分组在该连接已终止后再现。为此,TCP 将不给处于 TIME_WAIT 状态的连接发起新的化身。既然 TIME_WAIT 状态的持续时间是 2MSL,那就足以让某个方向上的分组最多存活 MSL 秒即被丢弃,另一个方向上的应答也最多存活 MSL 秒。因此就能保证每成功建立一个 TCP 连接时,来自该连接向前化身的重复分组都已在网络中消逝了(不过有一个例外:如果到达的 SYN 的序列号大于前一个化身的结束序列号,源自 Berkeley 的实现将给当前处于 TIME_WAIT 状态的连接启动新的化身。它要求服务器执行主动关闭,因为接收下一个 SYN 的那一端必须处于 TIME_WAIT 状态)。
TCP 为一个连接定义了 11 种状态,这些状态可使用 netstat 显示,并且 TCP 规则规定如何基于当前状态及在该状态下所接收的分节从一个状态转换到另一种状态。比如,当某个应用进程在 CLOSED 状态下执行主动打开时,TCP 将发送一个 SYN,且新的状态是 SYN_SENT。如果这个 TCP 接着接收到一个带 ACK 的 SYN,它将发送一个 ACK,且新的状态是 ESTABLISHED。这个最终状态是绝大多数数据传送发生的状态。自 ESTABLISHED 状态引出的两个箭头处理连接的终止。如果某个应用进程在接收到一个 FIN 之前调用 close(主动关闭),那就转换到 FIN_WAIT_1 状态。但如果某个应用进程在 ESTABLISHED 状态期间接收到一个 FIN(被动关闭),那就转换到 CLOSE_WAIT 状态。
下图展示一个完整的 TCP 连接所发生的实际分组交换情况,包括连接建立、数据传送和连接终止 3 个阶段,以及每个端点所历经的 TCP 状态。本例中的客户通告一个值为 536 的 MSS(表明该客户只实现了最小重组缓冲区大小),服务器通告一个值为 1460 的 MSS(以太网上 IPv4 的典型值),不同方向上的 MSS 值可以不相同。
图中有个 TIME_WAIT 状态,一般执行主动关闭的那端在该状态的持续时间是 2MSL(maximum segment liftime, MSL),即 1 分钟到 4 分钟之间(RFC 1122 建议 MSL 值是 2 分钟,而源自 Berkeley 的实现传统上改用 30 秒)。MSL 是任何 IP 数据报能够在因特网中存活的最长时间。该值是有限的,因为每个数据报都含有一个称为跳限(hop limit)的 8 位字段,其最大值为 255。尽管这是一个跳数限制而非真正的时间限制,不过我们仍然假设:具有最大跳限的分组在网络中存在的时间不可能超过 MSL 秒。TIME_WAIT 状态有两个存在的理由:
1、可靠地实现 TCP 全双工连接的终止。
2、允许老的重复分节在网络中消逝。
第一个理由可假设丢失了上图中的最后一个 ACK 来解释。此时服务器将重新发送它的那个 FIN,因此客户必须维护状态信息,以允许它重发最终那个 ACK,否则它将相应以一个 RST,该分节将被服务器解释成一个错误。若 TCP 要彻底执行全双工关闭,则必须正确处理连接终止序列 4 个分节中的任何一个丢失的情况。本例子也说明了处于 TIME_WAIT 状态的是执行主动关闭的那一端的原因,因为可能不得不重传最终那个 ACK 的就是那一端。
而对于第二个理由,我们可假设打算先正常关闭一个连接,之后再在同一个套接字上重新建立一个连接(后一个连接称为前者的化身(incarnation))。TCP 必须防止来自某个连接的老的重复分组在该连接已终止后再现。为此,TCP 将不给处于 TIME_WAIT 状态的连接发起新的化身。既然 TIME_WAIT 状态的持续时间是 2MSL,那就足以让某个方向上的分组最多存活 MSL 秒即被丢弃,另一个方向上的应答也最多存活 MSL 秒。因此就能保证每成功建立一个 TCP 连接时,来自该连接向前化身的重复分组都已在网络中消逝了(不过有一个例外:如果到达的 SYN 的序列号大于前一个化身的结束序列号,源自 Berkeley 的实现将给当前处于 TIME_WAIT 状态的连接启动新的化身。它要求服务器执行主动关闭,因为接收下一个 SYN 的那一端必须处于 TIME_WAIT 状态)。
发表评论
-
Unix 域套接字与描述符的传递
2019-03-27 23:59 710在Unix 域套接字概述一节中介绍了什么是 U ... -
Unix 域套接字概述
2019-03-12 22:48 977Unix 域协议并不是一个实际的协议族,而是在 ... -
kqueue 接口
2019-03-06 00:47 684kqueue 接口是 ... -
辅助数据
2019-02-28 00:40 686辅助数据(a ... -
recv/send 和 recvmsg/sendmsg 函数
2019-01-22 00:40 1545recv 和 send ... -
inetd 守护进程介绍
2019-01-09 21:51 1052在 4.3 BSD 系统之前,很多网络服务都是 ... -
主机名与 IP 地址的转换(续)
2018-12-25 00:37 955在主机名与 IP 地址的转换一节中提到的 ge ... -
主机名与 IP 地址的转换
2018-11-14 00:20 2303在网络编程中,尽管大部分情况下操作的都是 IP ... -
SCTP 事件通知
2018-02-08 03:49 978SCTP 提供了多种可用的通知,用户可经由这些通知追踪 ... -
SCTP 套接字选项
2018-02-04 09:35 1686在获取和设置套接 ... -
SCTP 套接字编程基础函数
2018-02-04 10:08 1051SCTP 服务器可以使 ... -
SCTP 套接字编程基础概念
2018-01-18 00:10 559SCTP 套接字分为一到一套接字和一到多套接字。提供一 ... -
UDP套接字编程基础
2018-01-14 10:37 572下图显示了使用 UDP 套接字编写客户/服务器程序时的 ... -
通用套接字选项
2018-01-02 00:46 548在获取和设置套接 ... -
获取和设置套接字选项
2017-12-29 08:21 440下面几种方法可用 ... -
I/O 复用之 poll 函数
2017-12-27 00:20 421poll 函数提供的功能与 select 类似,不过在 ... -
I/O 复用之select 函数
2017-12-12 00:32 514select 函数允许进 ... -
Unix 5 种 IO 模型概述
2017-11-19 01:44 305Unix 下有 5 种可用 ... -
套接字创建、连接和关闭函数
2017-08-13 17:16 664下图是一对 TCP 客户与服务器进程之间发生的一些典型 ... -
字节转换和填充函数
2017-08-06 01:09 427网络编程中,为保证发送协议栈和接收协议栈就如 32 位 ...
相关推荐
本文将详细阐述TCP状态转换图中的关键状态,主要关注三次握手和四次挥手过程。 首先,TCP连接的建立过程,也就是著名的三次握手: 1. **CLOSED**: 所有连接的起始和结束状态,表示没有任何连接活动。 2. **LISTEN*...
TCP状态转换图详解.pdf
TCP共有11个网路状态,其中涉及到关闭的状态有5个。 在我们编写网络相关程序的时候,这5个状态经常出现。因为这5个状态相互关 联,相互纠缠,... 下是是根据W.Richard Stevens的《TCP/IP详解》一书的TCP状态转换图。
用VISSO画的TCP协议状态图,用于表示TCp的状态的转换.
tcp状态图,高清,可以收藏多年。
7. **TCP状态转换图**:展示TCP连接从建立到结束期间经历的各种状态,如CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED等。 8. **应用层协议与TCP的交互**:如HTTP、FTP、SMTP等如何利用TCP进行数据传输。 ...
一、TCP 状态转换图 在 F5 会话处理流程中,TCP 状态转换图是非常重要的一部分。 TCP 状态转换图描述了客户端与服务器之间的连接建立和终止过程。 1. 建立连接协议(三次握手) * 客户端发送一个带 SYN 标志的 ...
七、TCP状态转换图 TCP连接有多种状态,如CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK、TIME_WAIT等。理解这些状态和它们之间的转换对于诊断TCP...
本书深入浅出地解析了TCP的工作原理,涵盖了TCP连接的建立和终止、TCP窗口机制、拥塞控制、TCP状态转换图以及TCP选项等核心知识点。 从部分内容中可以看出,本书不仅仅关注于TCP协议,同样涉及到了UDP协议,以及...
以下将详细解析TCP状态变迁图及其各个状态之间的转换。 1. **CLOSED**: 这是TCP连接的初始状态,表示连接未建立,没有活动的数据传输。 2. **LISTEN**: 当一个服务器端进程准备接收客户端连接请求时,它会进入...
TCP的状态转换图是理解TCP工作原理的重要工具,它详细描绘了两个通信端点之间的连接建立、数据交换和连接关闭的整个过程。下面我们将详细探讨TCP状态转换的各个阶段。 1. **CLOSED**: 这是TCP连接的初始和最终状态...
8. **TCP状态转换图**:描述TCP连接在不同状态之间的转换,如SYN_SENT、ESTABLISHED、FIN_WAIT_2等。 9. **DNS域名系统**:解析域名与IP地址的对应关系,包括DNS查询和应答的过程。 卷二《TCP/IP详解:实现》则...
#### 九、TCP状态转换图 - **客户端路径**:正常情况下客户端发起连接的过程。 - **服务器端路径**:正常情况下服务器响应客户端的过程。 - **不常见事件**:如超时、异常断开等情况下的状态转换。 #### 十、确认重...
博客《TCP/IP 状态转换图》中图片的原版文档,网址:https://blog.csdn.net/itworld123/article/details/102927949 。
【TCP状态转换图】描述了TCP连接在不同阶段的状态变化,包括CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK和TIME_WAIT等状态,展示了TCP连接建立、...
首先,创建一个`QTcpSocket`对象,并连接其信号到相应的槽函数,以便处理连接状态改变、数据接收等事件。例如: ```cpp QTcpSocket *socket = new QTcpSocket(this); connect(socket, &QTcpSocket::connected, this...
### TCP状态转换图 TCP连接的状态转换图展示了从建立连接到关闭连接的过程,包括LISTEN、SYN_SENT、SYN_RCVD、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT、CLOSE_WAIT、LAST_ACK和CLOSED等状态。 ### UDP缓冲...
3. **TCP状态转换图**:TCP连接的建立和关闭涉及多个状态,包括CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK和TIME_WAIT。这些状态代表了连接的...
6. **TCP状态转换图**: 描述了TCP连接从建立到结束期间可能经历的各种状态,如SYN_SENT、SYN_RCVD、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK和TIME_WAIT等。 7. **TCP滑动窗口**: ...