困扰许久的问题, 虽说知道这个过程, 但是并未深究, 记录一下

过程


名词解析

Name Meaning
SYN 请求建立连接
ACK 确认接受连接, 期望对方继续发送的那个数据包的序列号(加一)
FIN 请求关闭连接
seq 数据包本身的序列号, 随机选取

握手过程

  • 客户端发送SYN包、seq = x至服务器, 进入SYN_SEND状态.
  • 服务器发送SYN包、ACK = x + 1seq = y至客户端, 进入SYN_RECEIVED状态.
  • 客户端发送ACK = y + 1, 确认接受连接, 双方进入ESTABLISHED状态.

补充


  1. 明明两次握手可以解决的事, 为何要三次?

client发送了一个请求A, 由于网络延时原因造成了超时, 这时TCP会采用超时重传机制重新发送请求B, 假设B顺利完成数据传送, 此时A到达server端, server进入ESTABLISHED状态, 而此时client还是处于CLOSED状态, 造成资源浪费.