关于TCP三次握手的意义及其具体实现解释

首先,最基本的三次操作方的说明如下:

  • 客户端向服务端发送请求;客户端 → 服务端
  • 服务端确认客户端发送到来的请求;服务端 → 客户端
  • 客户端确认服务端发送到来的确认。客户端 → 服务端

最显浅的目的解释如下:

  • 第一次握手:“你”是不是在监听指定端口?
  • 第二次握手:“我”的确在监听某个端口,“你”可以跟我建立连接。
  • 第三次握手:“我”收到了“你”的回复了,“你”做好准备吧。

要是认真思考过后,还不能理解上面的说法的话,你可能需要知道这些TCP协议实现的基本背景

  1. TCP是建立在IP协议之上的,而IP协议作为网络层协议,并不保证每个发送的消息,都能到达目的IP;
  2. 网络层协议不仅不保证每个数据能不能到达目标地址,而且并不保证你发送的顺序,会更目标收到的顺序相同;
  3. 服务端只是一个提供服务的个体,它跟客户端的关系是一对多。
  4. TCP是全双工的,a能到达b未必就是b能到达a。

为什么TCP需要这样设计呢?

  1. 第一次握手的时候,TCP协议头中会携带它发送的序列号a(以及窗口大小等,不过这是题外话),以确保服务端没有回复的时候,它发出第二次(或者内容不一样)请求的时候,能够区别开;
  2. 第二次握手,服务端确认的同时,会携带上客户端发过来的序列号(准确来说,这个时候已经叫确认号了,值为a+1),以及自己的发送序列号b;(“我”只确认a这个序列号的请求,其他序号的有可能丢失,有可能其他原因没有收到的,“我”不管)
  3. 第三次,客户端会携带上服务端发过来的序列号(此时也应称为确认号,值为b+1),并且因为服务端刚才确认收到的是a数据,所以这次自己携带的序列号为a+1。
原文地址:https://www.cnblogs.com/pureLaw/p/13765863.html