建立连接--TCP协议三次握手

  • 为什么建立连接需要三次握手?
  1. 首先非常明确的是两次握手是最基本的。
    第一次握手,客户端发了个连接请求消息到服务端,服务端收到信息后知道自己与客户端是可以连接成功的,但此时客户端并不知道服务端是否已经接收到了它的请求,所以服务端接收到消息后的应答,客户端得到服务端的反馈后,才确定自己与服务端是可以连接上的,这就是第二次握手。
    客户端只有确定了自己能与服务端连接上才能开始发数据。所以两次握手肯定是最基本的。

    eg:
    客户端:你好啊,服务端(SYN)
    服务端:你好啊,客户端(SYN,ACK)

    2.为什么需要第三次握手呢?
    假设一下如果没有第三次握手,而是两次握手后我们就认为连接成功了,那么会发生什么?第三次握手是为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误,提醒服务端不要再等待,建立连接,为之后的数据传输做准备。
    eg:
    客户端:我已准备就绪(进入ESTABLISHED状态),等你准备好了,我们就开始传输数据吧(ACK)。

    服务端:(进入ESTABLISHED状态)
    建立连接--TCP协议三次握手

    3.譬如发起请求遇到类似这样的情况:客户端发出去的第一个连接请求由于某些原因在网络节点中滞留了导致延迟,直到连接释放的某个时间点才到达服务端,这是一个早已失效的报文,但是此时服务端仍然认为这是客户端的建立连接请求第一次握手,于是服务端回应了客户端,第二次握手。

    如果只有两次握手,那么到这里,连接就建立了,但是此时客户端并没有任何数据要发送,而服务端还在傻傻的等候佳音,造成很大的资源浪费。所以需要第三次握手,只有客户端再次回应一下,就可以避免这种情况。握手完成后,开始TCP 数据传输。

  • TCP 数据传输
    1.TCP 数据传输:就是两个人隔空交流,有一定的距离,需要对方反复确认听见了自己的话。

    2.TCP重传:你喊了一句话(data),妹子听见了之后要向你回复自己听见了(ack)。如果你喊了一句,半天没听到妹子回复,你会很低落,好比谈恋爱的时候,你满腔热情,而妹子忽冷忽热,所以你锲而不舍,一次不行,就两次,两次不行就三次,这就是tcp重传。也有可能是妹子知道你的本意了,但是妹子有点害羞,迟迟没有回复亦或是妹子回复了你没收到,以至于你没收到妹子的回复。你不能判断究竟到底妹子喜不喜欢你,对你有没有好感,没关系,男人嘛?要主动点,重传一下就好。

    3.去重:既然会重传,妹子就有可能同一句话听见了两次,这就是去重。对于重传和去重这两项工作操作系统的网络内核模块都已经帮我们处理好了,我们不用理会。