3次握手
第一次 client发送SYN--->server
第二次 server发送SYN + ACK -> client
第三次 client发送ACK -> server
4次挥手
挥手可以任意一段触发,命名A为发送方,B为接受方
第一次 A发送FIN-->B
第二次 B发送ACK-->A
第三次 B发送FIN-->A
第四次 A发送ACK-->B
为什么至少需要3次握手
第一次握手,server知道自己的接收能力和client的发送能力
第二次握手,client知道自己的发送能力,接收能力,以及server的接收能力,发送能力
第三次握手,server知道自己的发送能力以及client的接受能力
通过三次握手,client和server都知道了自己的发送能力,接收能力,以及对方的发送能力以及接收能力
为什么至少需要4次挥手
由于双方都有可能还有未发送完成的消息,所以比较握手步骤会多一点
第一次挥手,发送方发送完自己的数据,并提示接收方我需要关闭连接
第二次挥手,接收方表示同意关闭连接并发送剩余消息,发送方停止尝试再次发送并关闭发送功能
第三次挥手,接收方发送需要关闭连接请求
第四次挥手,发送发接受到关闭连接请求
为什么不能直接发送ACK + FIN
1,因为发送方无法判断等待的时间,FIN是由应用层处理的,传输层只能先同意关闭(ACK),等待上层指示再发送FIN