正常的TCP连接三次握手和终止连接的四次握手图(转自 TCP/IP 详解):
以前看到这个图一直有个疑问,就是 连接的时候需要分别需要两对SYN/ACK, 终止连接的时候也需要两对FIN/ACK,为什么TCP连接的时候可以合并成三次握手,而终止连接的时候要用四次握手,终止连接的时候 FIN/ACK 为什么不能合并?
今天终于大概明白一点,应该这样的:
TCP连接的三次握手都是TCP/IP 协议栈 完成的,例如c/s模型中,三次握手完成后 该连接就会进入到服务端的 缓冲队列中,等待accept应用层处理;
而终止连接的时候,由于 TCP是全双工的,所以需要c/s两端都进行close(sockfd)操作,四次握手中,第三次发送FIN必须由应用层操作,也就是close(sockfd),而且close之前可能还会发送数据,所以终止连接的四次握手,不能像连接的时候那样合并成三次握手。
其实上面的内容早就了解过,就是没有串起来去思考这个问题,现在才想明白,感觉自己略坑...