TCP 才不傻!
大家好,我是小林。
第一次握手,如果客户端发送的SYN一直都传不到被服务器,那么客户端是一直重发SYN到永久吗?客户端停止重发SYN的时机是什么?
第三次握手,如果服务器永远不会收到ACK,服务器就永远都留在 Syn-Recv 状态了吗?退出此状态的时机是什么?
第三次挥手,如果客户端永远收不到 FIN,ACK,客户端永远停留在 Fin-Wait-2状态了吗?退出此状态时机是什么时候呢?
第四次挥手,如果服务器永远收不到 ACK,服务器永远停留在 Last-Ack 状态了吗?退出此状态的时机是什么呢?
如果客户端 在 2SML内依旧没收到 FIN,ACK,会关闭链接吗?服务器那边怎么办呢,是怎么关闭链接的呢?
如果新读者还不知道小林的图解网络 PDF,可以到我公众号后台回复「图解」获取就行。
TCP 三次握手期间的异常
第一次握手丢失了,会发生什么?
SYN_SENT
状态。tcp_syn_retries
内核参数控制,这个参数是可以自定义的,默认值一般是 5。第二次握手丢失了,会发生什么?
SYN_RCVD
状态。SYN-ACK
报文其实有两个目的 :第二次握手里的 ACK, 是对第一次握手的确认报文;
第二次握手里的 SYN,是服务端发起建立 TCP 连接的报文;
tcp_synack_retries
内核参数决定,默认值是 5。客户端会重传 SYN 报文,也就是第一次握手,最大重传次数由
tcp_syn_retries
内核参数决定。;服务端会重传 SYN-AKC 报文,也就是第二次握手,最大重传次数由
tcp_synack_retries
内核参数决定。
第三次握手丢失了,会发生什么?
ESTABLISH
状态。TCP 四次挥手期间的异常
第一次挥手丢失了,会发生什么?
FIN_WAIT_1
状态。FIN_WAIT2
状态。tcp_orphan_retries
参数控制。tcp_orphan_retries
后,就不再发送 FIN 报文,直接进入到 close
状态。第二次挥手丢失了,会发生什么?
CLOSE_WAIT
状态。FIN_WAIT2
状态,在这个状态需要等服务端发送第三次挥手,也就是服务端的 FIN 报文。FIN_WAIT2
状态不可以持续太久,而 tcp_fin_timeout
控制了这个状态下连接的持续时长,默认值是 60 秒。第三次挥手丢失了,会发生什么?
CLOSE_WAIT
状态,顾名思义,它表示等待应用进程调用 close 函数关闭连接。tcp_orphan_retrie
s 参数控制,这与客户端重发 FIN 报文的重传次数控制方式是一样的。第四次挥手丢失了,会发生什么?
TIME_WAIT
状态。tcp_orphan_retries
参数控制。评论