TCP/IP协议为什么需要的是三次握手,而不是两次or四次力?

三次握手,四次挥手

TCP/IP协议为什么需要的是3次握手?

因为TCP是可以双向传输数据的,也就是全双工协议。客户端和服务器双方都需要确认自己和对方的接收、发送能力是正常的。
第一次握手: 客户端发送网络包,服务端收到。
此时,服务端能得出结论:客户端的发送能力、自己的接收能力是正常的。
第二次握手: 服务端发送网络包,客户端收到。
此时,客户端能得出结论:服务端和自己的发送能力、接收能力都是正常的。
此时,对于服务端,自己的发送能力和客户端的接收能力还未确认;于是需要第三次握手。
第三次握手: 客户端发送网络包,服务端接收到。此时,服务端确定自己的发送能力和客户端的接收能力都正常。
这下双方的收发都确认正常力,三次是最少的次数!

参考链接

TCP/IP协议四次挥手的原因

主动关闭连接:
客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。
服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。
客户端接收到后,回服务端一个ACK应答报文。

从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,从而比三次握手导致多了一次。

详述:
第一次挥手:客户端向服务端发送FIN包,此时,客户端进入FIN_WAIT_1状态,不会再发送包了但可以接收。
但是,服务端可能还有未处理完待发送的包。
第二次挥手:服务端向客户端发送ACK报文,表示知道客户端想要断开连接了,此时服务端进入FIN_WAIT_2状态。
第三次挥手:服务端处理完数据包后,发送给客户端FIN报文;这样可以保证数据通信正常可靠地完成。发送完FIN报文后,服务端进入LAST_ACK状态。
第四次挥手:客户端接收到服务端发送的ACK后,发送ACK报文进行连接中断的确认,之后进入TIME_WAIT状态。服务端接收到后,释放连接,进入CLOSE状态。客户端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,至此客户端也完成连接的关闭。

参考链接

全双工协议补充

  • 在单工传输模式中,通信是单向的。
  • 在半双工传输模式下,通信是双向的,但是两个连接的设备可以互换使用该通道。
  • 在全双工传输模式下,通信是双向的,并且通道被连接的两个设备同时使用。

猜你喜欢

转载自blog.csdn.net/kwroi/article/details/127883945