不应该是1.5个吗?就算第三次附带了数据那样也应该是1.5次啊,为什么我百度告诉我一个三次握手需要一个rtt?那四次挥手又要几个呢?
三次握手需要进行三次数据交换,其中第一次数据交换是客户端发送 SYN 报文,第二次数据交换是服务器端发送 SYN+ACK 报文,第三次数据交换是客户端发送 ACK 报文。这三次数据交换中,第一次和第二次都会消耗一个 RTT 的时间,第三次数据交换会消耗半个 RTT 的时间,需要 1.5 个 RTT 的时间。
四次挥手的过程中,第一次数据交换是客户端发送 FIN 报文,第二次数据交换是服务器端发送 ACK 报文,第三次数据交换是服务器端发送 FIN 报文,第四次数据交换是客户端发送 ACK 报文。这四次数据交换中,前两次和后两次都会消耗一个 RTT 的时间,需要 2 个 RTT 的时间。
三次握手需要 1.5 个 RTT,而不是 1 个 RTT。四次挥手也需要 2 个 RTT,而不是 1 个 RTT。这是因为,在 TCP/IP 协议栈中,每次通信都需要进行数据包的传输和确认,这个过程需要一定的时间。
在进行三次握手时,第一次握手需要客户端将 SYN 报文发送给服务器,第二次握手需要服务器收到 SYN 报文后,发送 SYN-ACK 报文回复客户端,第三次握手需要客户端收到 SYN-ACK 报文后,再发送 ACK 报文给服务器。因此,三次握手需要 1.5 个 RTT 才能完成,其中 0.5 个 RTT 是客户端在等待服务器的 SYN-ACK 报文响应时所需的时间。
类似地,在进行四次挥手时,第一次挥手需要客户端将 FIN 报文发送给服务器,第二次挥手需要服务器收到 FIN 报文后,发送 ACK 报文回复客户端,第三次挥手需要服务器也发送 FIN 报文给客户端,第四次挥手需要客户端收到服务器的 FIN 报文后,再发送 ACK 报文给服务器。因此,四次挥手需要 2 个 RTT 才能完成,其中 1 个 RTT 是客户端等待服务器的 FIN 报文响应时所需的时间。
需要注意的是,上述的 RTT 时间是不确定的,具体时间取决于网络延迟、网络拥塞等因素。因此,在进行网络通信时,需要合理地进行超时和重传等机制,以确保通信的可靠性和稳定性。
从发送方发送数据开始,到发送方收到接收方的确认(接收方收到数据后立即发送确认),总共经历的时延。
从终端查看本地与某网址RTT的方法:
RTT越大,在确认收到之前,可以发送的数据越多。
RTT包括:往返传播时延(传播时长 × 2),末端处理时间
三次握手协议需要1个RTT的原因是:
第一次握手:客户端发送请求,服务器接收请求,此时客户端进入等待状态。
第二次握手:服务器收到请求后,发送确认,此时服务器进入等待状态。
第三次握手:客户端收到确认后,再次发送确认,此时客户端进入传输状态。
因此,三次握手需要经历客户端发送请求、服务器接收请求、服务器发送确认、客户端接收确认这四个过程,需要1个RTT。
四次挥手需要2个RTT的原因是:
第一次挥手:客户端发送关闭连接请求,进入等待状态。
第二次挥手:服务器返回 ACK 确认收到请求,服务器进入 CLOSE_WAIT 状态。
第三次挥手:服务器关闭与客户端的连接,发送 FIN 报文,进入 LAST_ACK 状态。
第四次挥手:客户端返回 ACK 确认收到 FIN 报文,客户端进入 TIME_WAIT 状态,等待 2MSL 后进入 CLOSED 状态。
因此,四次挥手需要经历客户端发送请求、服务器发送 ACK、服务器发送 FIN、客户端返回 ACK、客户端等待2MSL 这五个过程,需要 2 个 RTT。
如果第三次握手有数据传输,也只需要1个RTT。因为第三次握手的目的是让客户端确认服务器能接收数据,数据传输只是在确认的基础上进行,不会增加RTT。