为什么在 TCP 中建立连接时要使用三次握手?也就是说,为什么使用两次握手是不够的?
答案1
TCP 中使用的握手机制旨在使两台试图通信的主机能够在开始通信之前协商网络连接参数。双方都可以假设对方计算机已准备就绪并开始可靠地发送数据。
以下是握手过程中双方发送的数据包的简化图:
同步-> SYN 已接收 主机 A <- SYN ACK 主机 B 已收到 SYN ACK 确认-> 收到 ACK TCP 连接已建立
SYN(同步)和 ACK(确认)消息由段的 TCP 标头内的位/数字指定。
该过程还被设计为使得两端可以同时发起和协商单独的连接。
为了结束两台计算机之间的连接,需要进行另一次三方通信来断开 TCP 连接。TCP 连接的启动和断开是 TCP 成为可靠协议的一部分。
也可以看看:UDP 和 TCP 有什么区别?
答案2
这样两端都可以相当确信另一端知道连接已建立。
编辑:双向是不够的,因为接收方无法知道发送方知道接收方已经响应,并且连接已准备就绪,这使得它(双向握手连接)与三次握手相比不可靠
答案3
请注意,这实际上是 4 次握手(每个方向两次)。有 SYN -> ACK 和 SYN <- ACK。主机 B 只需在向主机 A 发送 ACK 的同时发送其 SYN 即可节省时间。
此外,Dentrasi 评论说三次握手可以防止欺骗,但这并不完全正确。
在 nmap 站点查看更多信息: http://nmap.org/book/osdetect-usage.html
“TCP 序列预测系统具有较差的 TCP 初始序列号生成能力,容易受到盲目 TCP 欺骗攻击。换句话说,您可以与这些系统建立完整连接,并在欺骗不同的 IP 地址的同时发送(但不接收)数据。目标的日志将显示欺骗的 IP,您可以利用它们之间的任何信任关系。这种攻击在 20 世纪 90 年代中期风靡一时,当时人们通常使用 rlogin 允许从受信任的 IP 地址无需任何密码即可登录他们的帐户。据称,凯文·米特尼克 (Kevin Mitnick) 于 1994 年 12 月利用这种攻击侵入了 Tsutomu Shimomura 的计算机。”
有关 TCP 序列预测攻击的其他信息请参见此处: http://en.wikipedia.org/wiki/TCP_sequence_prediction_attack
答案4
三次握手建立了连接。就像你拿起电话,听到拨号音,拨号,听到铃声,然后对方说“你好”。