TCP 三次握手和四次挥手是什么?
建立 TCP 连接时 server 与 client 会经历三次握手
- 浏览器向服务器发送 TCP 数据:SYN(seq=x)包
- 服务器向浏览器发送 TCP 数据:ACK(seq=x+1)包 + SYN(y)包
- 浏览器向服务器发送 TCP 数据:ACK(seq=y+1)包
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
- A:我准备好了你准备好了吗,收到请回答。
- B:收到收到,我也准备好了,收到请回答。
- A:收到收到
关闭 TCP 连接时 server 与 client 会经历四次挥手
- 浏览器向服务器发送 TCP 数据:FIN(seq=x)
- 服务器向浏览器发送 TCP 数据:ACK(seq=x+1)
- 服务器向浏览器发送 TCP 数据:FIN(seq=y)
- 浏览器向服务器发送 TCP 数据:ACK(seq=y+1)
- A:我要关闭。
- B:收到,我准备关闭。
- B:我关闭好了。
- A:收到。
为什么 2、3 步骤不合并起来呢?
答案:2、3 中间服务器很可能还有数据要发送,不能提前发送 FIN。