TCP 三次握手,第一次握手报文丢失会发生什么?
TCP 三次握手,第二次握手报文丢失会发生什么?
客户端收到服务端的 SYN+ACK 报文后,会回给服务端 ACK 报文
因为第三次握手的 ACK 是对第二次握手中 SYN 的确认报文,如果第三次握手报文丢失了,服务端就会触发「超时重传」机制,重新发送 SYN+ACK 报文,客户端是不会重传 ACK 报文的
下图以 Linux(6.14.7) TCP 第三次握手报文丢失为例,其中参数 tcp_synack_retries 值为 2
RTO(Retransmission Timeout)
触发 TCP 超时重传机制的时间
注意
- Linux(6.14.7) RTO 初始值为 1s
- Linux(6.14.7) RTO 最大值为 120s
/* Linux Kernel 6.14.7 tcp.h */
#define TCP_RTO_MAX ((unsigned)(120*HZ))
#define TCP_RTO_MIN ((unsigned)(HZ/5))
#define TCP_TIMEOUT_INIT ((unsigned)(1*HZ)) /* RFC6298 2.1 initial RTO value */
#define TCP_TIMEOUT_FALLBACK ((unsigned)(3*HZ)) /* RFC 1122 initial RTO value, now
* used as a fallback RTO for the
* initial data transmission if no
* valid RTT sample has been acquired,
* most likely due to retrans in 3WHS.
*/