困扰许久的问题, 虽说知道这个过程, 但是并未深究, 记录一下
过程
名词解析
| Name | Meaning | 
|---|---|
| SYN | 请求建立连接 | 
| ACK | 确认接受连接, 期望对方继续发送的那个数据包的序列号(加一) | 
| FIN | 请求关闭连接 | 
| seq | 数据包本身的序列号, 随机选取 | 
握手过程
- 客户端发送SYN包、seq = x至服务器, 进入SYN_SEND状态.
- 服务器发送SYN包、ACK = x + 1、seq = y至客户端, 进入SYN_RECEIVED状态.
- 客户端发送ACK = y + 1, 确认接受连接, 双方进入ESTABLISHED状态.
补充
- 明明两次握手可以解决的事, 为何要三次?
client发送了一个请求A, 由于网络延时原因造成了超时, 这时TCP会采用超时重传机制重新发送请求B, 假设B顺利完成数据传送, 此时A到达server端, server进入ESTABLISHED状态, 而此时client还是处于CLOSED状态, 造成资源浪费.