为什么需要三次握手? 因为TCP/IP不可靠,为了在不可靠建立起一种可靠传输,必须要有握手确认机制,
为什么是3次? 因为TCP是全双工协议,需要通信双方同时通信. 所以再次基础上的双向确认最少需要3次, 实际上你100次确认都行, 但最少需要3次
三次通信是理论上的最小值。 所以三次握手不是 TCP 本身的要求,而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的
三次握手
-
【客户端】我要跟你建连
-
【服务端】收到,你确定嘛?(关键是要此时要跟客户端再核实一下,万一收到的消息是早些时候在网络中迷失的,实际已无效的消息)
-
【客户端】嗯,我确定
-
【服务端】好的,我准备好了,咱们可以正式互发消息了
四次挥手
-
【客户端】我想关闭连接,可以吗?
-
【服务端】收到,你稍等我一下,有工作需要收尾,做完我通知你
-
【服务端】我这边完事了,你这边确定要关嘛?理论上 1MSL 分钟内你收到我的消息,2MSL 内我收到你的确认回复,要是我没收到我再问你
-
【客户端】收到 FIN 后,我确定关,可能 1MSL 你收不到我的回复,2MSL 内我会再收到你的关闭询问(FIN),所以我 2MSL 后我再关闭以确保你收到了。也确保你 2MSL 后才能收到新链接的数据,而 2MSL 内收到的都不是新连接的,而是老连接的,这样避免老连接迷失的数据对新链接产生干扰