简单的理解,可以把客户机当作A,服务器当作B。
A要给B建立连接的三次握手:
A说:B啊,我想跟你建立连接♂
B说:好嘞,那你发吧
A说:那我开始发了啊
A:哒哒哒开始发数据
为什么是三次?两次可以不?四次可以不?
如果是两次:
A:B啊,我想跟你建立连接~
却因为网络延迟没有及时发送到B那里。
过了一会儿,A又发起连接请求,这次成功建立连接并传输了数据。
随后,A第一次发的请求在延迟了N年之后到达了B那里,B在回复A之后就完成了两次握手开始等A发数据,但A已经拿到了数据所以不会再理B,于是B一直处于等待状态,这样就浪费了主机资源。
如果是四次呢?
三次就够了,再增加握手次数并不能显著提高可靠性,没有必要。
A跟B取消连接的四次挥手:
A说:B啊,我的数据请求发完了
B说:好的,我看看我这里还有没有没发完的,有的话发给你
B说:我这里的数据也发完了,可以关闭连接了
A说:好,我一会就关
B收到回复关闭连接
2*MSL(最长报文段寿命)之后A关闭连接
为什么A要等2MSL再关闭连接?
一:如果第四次请求丢失了,B迟迟没有收到第四次请求,那么B就会再发一次第三次请求,如果刚才A没有等待2MSL而是直接关闭了连接,那么A就收不到再次发送的第三次请求,而B就会一直发请求。
如果A等待了2MSL,就会收到B再次发送的请求从而回复。
二:在2MSL时间内,消除本次连接产生的所有报文段,这样新的连接中就不会出现旧请求,防止了“已失效的连接请求”的出现。
图解:
握手:
挥手
参考:https://mp.weixin.qq.com/s?__biz=MzAxODcyNjEzNQ==&mid=2247485620&idx=2&sn=f0f3eafcfff2cdaa210c2f63d968c0fa&chksm=9bd0a52caca72c3aabdc1cd0c9ee47ba5b342808b19f7994b5ff5b68fe9903e712a52c99ab8d&mpshare=1&scene=24&srcid=0730FeZFV3cR3dTp4Tc2KPBL#rd