tcp三次握手

tcp三次握手

  • 关于tcp三次握手的问题,为什么不是两次而是三次?下面这幅图学过tcp/ip协议的人应该都见过,但是并不能体现出其为什么要三次握手的原因。

tcp三次握手_第1张图片

  • 还有一些更搞笑的,比如下面这副图,这个是我百度找的一张图,但是实际我也在一些教程上看到过,这里就更扯了,完全看不出三次握手的意义。

tcp三次握手_第2张图片

要解决这个疑问还得从服务器和客户端的接收和发送过程来说,一般来说,我们的服务器和客户端有发送和接收的功能,解决三次握手的疑问还得从解决如何用最少的次数确定双方的接收能力是否正常的问题下手,而这个问题的回答是三次。

客户端想要和服务器建立连接,会经历以下这三个过程

  1. 客户端向服务器发送一个请求信号和一个校验数字X
  2. 服务器收到客户端的请求信号和校验数字X后将校验数字X进行+1后发回给客户端,同时还向客户端发送了一个请求信号和校验数字Y
  3. 客户端收到服务器发回的校验数字X+1和服务器发送的一个请求信号和校验数字Y,然将自身的X进行+1操作后和服务器返回的校验数字X+1进行对比确认无误后,把Y进行+1操作然后发回给服务器
  4. 服务器接收到客户端返回的Y+1校验信息后和服务器中的Y进行+1比较确认无误后,建立连接。

为什么要这样?

在tcp传输过程中,想要接收和发送数据,就得保证自身的接收和发送能力是没有问题的,如何保证呢?首先客户端向服务器发送一个连接请求,服务器返回请求应答,客户端收到应答信号并确认这个信号和自己发送给服务器信号是一致的,这时候,客户端进行了一次发送和接收的操作(客户端收到服务器返回的应答信号和校验码的时候就证明了客户端收发是正常的),这个时候客户端知道了自己的发送能力和接收能力是没有问题的,而服务器在这个过程中接收到了客户端的请求并且也发送了应答信号,但是这个过程中存在一个问题,服务器怎么确定自己发送的信号被客户端接收了,万一发送之后数据卡在某个地方没发出去,客户端没收到那就说明服务器自身的发送能力有问题,所以还需要客户端的一个确认信息告诉服务器你的发送能力是ok的。

想象一下如果是两次握手就建立连接会出现什么问题?

如果两次握手就建立连接,那么客户端向服务端发送一个数据,服务器收到这个数据后返回客户端请求的内容,开始建立连接,但是由于服务器的发送能力有问题,导致服务器以为自己把请求的数据发给了客户端了,却不知道自己的发送能力有问题,客户端没有收到服务器返回的内容,于是客户端一直在等待服务器给自己返回内容,服务器也一直在等待着客户端的接下来的数据请求,双方就这样等啊等啊等,这个连接一直处于建立状态造成大量的无用连接。

你可能感兴趣的:(运维笔记)