什么是TCP

TCP —— 用于保证可靠性和流控制机制的数据,包括 Socket、序列号以及窗口大小 The combination of this information, including sockets, sequence numbers, and window sizes, is called a connection.

为什么要三次握手

如果通信双方的通信次数只有两次,那么发送方一旦发出建立连接的请求之后它就没有办法 撤回这一次请求,如果在网络状况复杂或者较差的网络中,发送方连续发送多次建立连接的 请求,如果 TCP 建立连接只能通信两次,那么接收方只能选择接受或者拒绝发送方发起的请 求,它并不清楚这一次请求是不是由于网络拥堵而早早过期的连接。

所以,TCP 选择使用三次握手来建立连接并在连接引入了 RST 这一控制消息,接收方当收到 请求时会将发送方发来的 SEQ+1 发送给对方,这时由发送方来判断当前连接是否是历史连接:

  1. 如果当前连接是历史连接,即 SEQ 过期或者超时,那么发送方就会直接发送 RST 控制消息中止这一次连接;
  2. 如果当前连接不是历史连接,那么发送方就会发送 ACK 控制消息,通信双方就会成功建立连接;

使用三次握手和 RST 控制消息将是否建立连接的最终控制权交给了发送方,因为只有发送方 有足够的上下文来判断当前连接是否是错误的或者过期的,这也是 TCP 使用三次握手建立连 接的最主要原因。

初始序列号

  1. 获得一个用于发送信息的初始化序列号 TCP 连接的发起方可以通过保存发出的序列号判断连接是否过期,如果让接收方来保存并 判断序列号却是不现实的,这也再一次强化了我们在上一节中提出的观点 —— 避免历史错 连接的初始化。