![](https://csdnimg.cn/release/download_crawler_static/87377010/bgd.jpg)
如 果 已 经 建 立 了 连 接 , 但 是 客 户 端 突 然 出 现 故 障 了 怎 么 办 ?
T C P 还 设 有 一 个 保 活 计 时 器 , 显 然 , 客 户 端 如 果 出 现 故 障 , 服 务 器 不 能 一 直 等 下 去 , 白
白 浪 费 资 源 。 服 务 器 每 收 到 一 次 客 户 端 的 请 求 后 都 会 重 新 复 位 这 个 计 时 器 , 时 间 通 常 是
设 置 为 2 小 时 , 若 两 小 时 还 没 有 收 到 客 户 端 的 任 何 数 据 , 服 务 器 就 会 发 送 一 个 探 测 报 文
段 , 以 后 每 隔 7 5 秒 发 送 一 次 。 若 一 连 发 送 1 0 个 探 测 报 文 仍 然 没 反 应 , 服 务 器 就 认 为 客
户 端 出 了 故 障 , 接 着 就 关 闭 连 接 。 1 . 第 一 次 握 手 : 客 户 端 发 送 网 络 包 , 服 务 端 收 到 了 。
这 样 服 务 端 就 能 得 出 结 论 : 客 户 端 的 发 送 能 力 、 服 务 端 的 接 收 能 力 是 正 常 的 。 2 . 第 二 次
握 手 : 服 务 端 发 包 , 客 户 端 收 到 了 。 这 样 客 户 端 就 能 得 出 结 论 : 服 务 端 的 接 收 、 发 送 能
力 , 客 户 端 的 接 收 、 发 送 能 力 是 正 常 的 。 不 过 此 时 服 务 器 并 不 能 确 认 客 户 端 的 接 收 能 力
是 否 正 常 。 3 . 第 三 次 握 手 : 客 户 端 发 包 , 服 务 端 收 到 了 。 这 样 服 务 端 就 能 得 出 结 论 : 客
户 端 的 接 收 、 发 送 能 力 正 常 , 服 务 器 自 己 的 发 送 、 接 收 能 力 也 正 常 。
所 以 , 只 有 三 次 握 手 才 能 确 认 双 方 的 接 收 与 发 送 能 力 是 否 正 常 。
问 : I S N 代 表 什 么 ? 意 义 何 在 ? I S N 是 固 定 不 变 的 吗 ? I S N 为 何 要 动 态 随 机 ? I S N 是 什
么 ?
答 : I S N 全 称 是 I n i t i a l S e q u e n c e N u m b e r , 是 T C P 发 送 方 的 字 节 数 据 编 号 的 原
点 , 告 诉 对 方 我 要 开 始 发 送 数 据 的 初 始 化 序 列 号
I S N 是 固 定 不 变 的 吗 ?
答 : I S N 如 果 是 固 定 的 , 攻 击 者 很 容 易 猜 出 后 续 的 确 认 序 号 , 为 了 安 全 起 见 , 避 免 被 第
三 方 猜 到 从 而 发 送 伪 造 的 R S T 报 文 , 因 此 I S N 是 动 态 生 成 的
什 么 是 半 连 接 队 列 ?
答 : 服 务 器 第 一 次 收 到 客 户 端 的 S Y N 之 后 , 就 会 处 于 S Y N _ R C V D 状 态 , 此 时 双 方 还 没 有
完 全 建 立 连 接 。 服 务 器 会 把 这 种 状 态 下 请 求 连 接 放 在 一 个 队 列 里 , 我 们 把 这 种 队 列 称 之
为 半 连 接 队 列 。
当 然 还 有 一 个
全 连 接 队 列
, 就 是 已 经 完 成 三 次 握 手 , 建 立 起 连 接 的 就 会 放 在 全 连 接 队 列
中 。 如 果 队 列 满 了 就 有 可 能 会 出 现 丢 包 现 象 。
问 : 三 次 握 手 过 程 中 , 可 以 携 带 数 据 吗 ?
答 : 第 一 次 、 第 二 次 握 手 不 可 以 携 带 数 据 , 而 第 三 次 握 手 是 可 以 携 带 数 据 的 。
我 们 可 以 思 考 一 个 问 题 , 假 如 第 一 次 握 手 可 以 携 带 数 据 的 话 , 如 果 有 人 要 恶 意 攻 击 服 务
器 , 那 他 每 次 都 在 第 一 次 握 手 中 的 S Y N 报 文 中 放 入 大 量 的 数 据 , 疯 狂 着 重 复 发 S Y N
报 文 , 这 会 让 服 务 器 花 费 大 量 的 内 存 空 间 来 缓 存 这 些 报 文 , 这 样 服 务 器 就 更 容 易 被 攻 击
了 。
对 于 第 三 次 握 手 , 此 时 客 户 端 已 经 处 于 连 接 状 态 , 他 已 经 知 道 服 务 器 的 接 收 、 发 送 能 力
是 正 常 的 了 , 所 以 可 以 携 带 数 据 是 情 理 之 中 。
� 当 我 们 的 应 用 程 序 不 需 要 数 据 通 信 了 , 就 会 发 起 断 开 T C P 连 接 。 建 立 一 个 连 接 需
要 三 次 握 手 , 而 终 止 一 个 连 接 需 要 经 过 四 次 挥 手 。
� 问 : 为 什 么 建 立 连 接 握 手 三 次 , 关 闭 连 接 时 需 要 是 四 次 呢 ? 因 为 T C P 是 全 双 工 的
( 数 据 在 两 个 方 向 上 能 同 时 传 递 ) , 因 此 每 个 方 向 必 须 单 独 进 行 关 闭 。 原 则 是 : 当
一 方 完 成 它 的 数 据 发 送 任 务 后 发 送 一 个 F I N 来 终 止 这 个 方 向 连 接 。 当 一 端 收 到 一 个
F I N 时 , 它 必 须 通 知 应 用 层 另 一 端 已 经 终 止 了 那 个 方 向 的 数 据 传 送 。
� 答 : 其 实 在 T C P 握 手 的 时 候 , 接 收 端 发 送 S Y N + A C K 的 包 是 将 一 个 A C K 和 一 个
S Y N 合 并 到 一 个 包 中 , 所 以 减 少 了 一 次 包 的 发 送 , 三 次 完 成 握 手 。 对 于 四 次 挥
手 , 因 为 T C P 是 全 双 工 通 信 , 在 主 动 关 闭 方 发 送 F I N 包 后 , 接 收 端 可 能 还 要 发
送 数 据 , 不 能 立 即 关 闭 服 务 器 端 到 客 户 端 的 数 据 通 道 , 所 以 也 就 不 能 将 服 务 器 端 的
F I N 包 与 对 客 户 端 的 A C K 包 合 并 发 送 , 只 能 先 确 认 A C K , 然 后 服 务 器 待 无 需 发 送
数 据 时 再 发 送 F I N 包 , 所 以 四 次 挥 手 时 必 须 是 四 次 数 据 包 的 交 互 。
� 问 : 为 什 么 T I M E _ W A I T 状 态 需 要 经 过 2 M S L 才 能 返 回 到 C L O S E 状 态 ?
� 答 : M S L 指 的 是 报 文 在 网 络 中 最 大 生 存 时 间 。 在 客 户 端 发 送 对 服 务 器 端 的 F I N 的
确 认 包 A C K 后 , 这 个 A C K 包 是 有 可 能 不 可 达 的 , 服 务 器 端 如 果 收 不 到 A C K 的 话