困扰许久的问题, 虽说知道这个过程, 但是并未深究, 记录一下
过程
名词解析
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
状态, 造成资源浪费.