简介
接前文 协议簇:TCP 解析: 基础, 我们这篇文章来看看 TCP 连接建立的过程,也就是众所周知的”三次握手“的具体流程.
系列文章
协议簇:TCP 解析:基础
协议簇:TCP 解析:建立连接
协议簇:TCP 解析:连接断开
协议簇:TCP 解析:Sequence Number
协议簇:TCP 解析:数据传输
三次握手
最普通的 TCP 握手流程如下图:
下面描述中,序列号对应于上图中的行号.
- 初始状态时,TCP A 处于连接关闭状态, TCP B 处于监听状态. 也就是通常所说的 A 时 TCP 客户段,B 是服务端.
- A 发送 SYN 给 B, 并附有 SEQ, 请求建立 TCP 连接。
A 发送 SYN 后,状态切换为 SYN-SENT, B 接收到 A 发送的 SYN 后状态切换为 SYN-RECEIVED. - B 收到 A 的 SYN 之后,发送它的 SYN(注意,这里 A 和 B 的 SEQ 是相互独立的 ),并附上 ACK 标记用以表明 B 收到了 A 的 SYN 包。
这里注意: B 发送的 ACK 的值为 101,它代表 B 收到了序列号为 100和100之前的所有字节数据,并告诉 A 自己期待下一次收到序列号以101开始的数据.
A 在接收到 B 的 SYN 之后,状态转化为 ESTABLISHED. - A 收到 B 的 SYN 之后, 需要发送 ACK 给 B 告诉 B 自己收到了它的 SYN + ACK 包.
这里注意:A 发送的ACK的值为 301, 原因是 B 的 SYN 中的 SEQ 是 300. A 发送的 SEQ 是 101,原因是上一次的请求中序列号已经增长到了 100. 下一个可用的序列号就是 101.
在B接收到 A 的 ACK 之后,它的状态切换为 ESTABLSHED. 至此,三次握手已经完成,一个 TCP 连接已经成功建立。 - 在这条 TCP 连接上可以进行数据传输.
在了解了基本