三次握手/四次挥手

三次握手:

1.A发送请求

2.B响应+B请求

3.A响应

A→B的连接:1和2实现

B→A的连接:2和3实现


怎么保证每次发送的对方都收到了呢,发送的请求收到了响应即表示上次发送的成功了

即永远都是下一次来保证上一次的成功

那么,怎么知道3发送成功了呢,因为没有4的响应来保证3了呀?

1和2已经保证了A→B的连接是成功的,而3也是A→B的连接,所以默认是成功的


四次挥手

1.A发送请求

2.B响应

3.B请求

4.A响应

A→B的关闭:1和2实现

B→A的关闭:3和4实现


两个问题:

1.为什么3和4不放到一起了?

B→A的关闭前,把没发完的数据都发过去


2.为什么第4步的A要等待2MSL?

因为永远都是下一次来保证上一次的成功,而第4步是最后一步,无法保证成功

那三次握手时也不需要保证啊,因为默许了A→B的连接是有效的;而四次挥手如果不能保证最后一次的成功,那么B将永远不会释放连接,一直占用资源,实际中服务器面对的连接非常多的,所以必须保证最后一次的成功以断开连接

原理:

如果最后一次B没收到,那么会重新发一次断开请求,A这边就会收到请求,而A→B是1msl,B→A是1msl,共2msl

如果最后一次B收到了,那么A这边就不会收到请求,但仍然要等2msl,万一在最后一刻收到了呢

所以A是根据响应发出去后,2msl内有没有再收到断开请求来判断自己发送的是否成功,这样就保证了最后一次的可靠性

猜你喜欢

转载自www.cnblogs.com/justaman/p/11485235.html