一、状态转换图
二、握手是三次的原因
1、验证 SYN 包的有效性。
- 防止伪造的 IP 和 Port 向 Server 不断地进行连接。因为上述情况若是两次握手,就直接导致了 Server 为了建立这些连接而浪费大量资源。若是三次握手,就可以向上述的 IP 和 Port 发送确认的包含 ACK 和 Seq 包,并等待正确地回复。这就有效的避免伪造的 IP 和 Port 对 Server 的攻击,其实也就是验证该 SYN 的有效性。
- Client 向 Server 发送 SYN 包请求连接,但是该包在网内滞留超时,Client 又发送了一个 SYN 包,后者与 Server 顺利的建立了连接。此时之前的 SYN 包终于到达 Server ,Server 也为其建立了连接并发送 SYN + ACK 包,Client 收到该包之后就会丢弃,而 Server 还为该连接分配了资源并一直占用,这就造成了资源的浪费。 其实使用三次握手就是为了验证该 SYN 的有效性。
2、实现双方交换序列号并确认已收到。
(SAW:Game Over!)