TCP 三次握手、数据传输和四次挥手
TCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急)
ACK=seq+1
三次握手建立连接
客户端:connect()
服务端:listen()
-
第一次握手
客户端 -> 服务端
SYN, seq=x -
第二次握手
服务端 -> 客户端
SYN, seq=y, ACK=x+1 -
第三次握手
客户端 -> 服务端
ACK=y+1
比如像打电话:
- 我是小红,是小华吗?
- 我是小华,你好小红
- 你好小华
三次握手是为了确保双方都在线
如果没有第三次握手,那么小华不知道小红是否还在线
数据传输
客户端:write()
服务端:read()
-
发送
客户端 -> 服务端
seq=x+1, ACK=y+1 -
接收
服务端 -> 客户端
ACK=x+2
四次挥手断开连接
客户端:close()
服务端:close()
- 第一次挥手
客户端 -> 服务端
FIN, seq=x+2, ACK=y+1 - 第二次挥手
服务端 -> 客户端
ACK=x+3 - 第三次挥手
服务端 -> 客户端
FIN, seq=y+1 - 第四次挥手
客户端 -> 服务端
ACK=y+3
比如像挂电话:
- 我挂电话了哦?
- 好的,我看看我说完了吗?
- 我说完了
- 好的,挂电话吧
四次挥手是为了确保数据能够完成传输。