zoukankan      html  css  js  c++  java
  • 56、为什么需要三次握手,两次不行吗?

    弄清这个问题,我们需要先弄明白三次握手的目的是什么,能不能只用两次握手来达到同样的目的。

    1.第一次握手:客户端发送网络包,服务端收到了。 这样服务端就能得出结论:客户端的发送能力、 服务端的接收能力是正常的。

    2.第二次握手:服务端发包,客户端收到了。 这样客户端就能得出结论:服务端的接收、发送能力, 客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

    3.第三次握手:客户端发包,服务端收到了。 这样服务端就能得出结论:客户端的接收、发送能力正 常,服务器自己的发送、接收能力也正常。

    因此,需要三次握手才能确认双方的接收与发送能力是否正常。

    试想如果是用两次握手,则会出现下面这种情况:

    如客户端发出连接请求,但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求。 后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,客户端共发出了两个连接请求报 文段,其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接,不采用三次握手,只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据,浪费资源。

  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/crbhf/p/15116565.html
Copyright © 2011-2022 走看看