文章目錄

TCP建立连接时一般要发送三次包,也就是俗称的三次握手。首先客户端向服务器端发送一个建立连接请求,告诉服务器自己的序列号;服务器收到这个请求包后,进行确认,同时告诉客户端自己的序列号;之后客户端对这个包进行确认。如果一切正常,三次握手就已经完成。

在网络状况不好的时候,如果在发送的过程中任意一个包丢失会怎样呢?

首先来看看第一个包。这种情况显而易见,如果客户端建立连接的请求包丢失,那么服务器端根本不知道有这么一个请求,客户端只有重新发送这个包。

再来看看第二个包。这种情况也是显而易见,如果服务器的确认包丢失,那么客户端无法知道服务器是否收到这个请求,此时服务器端必须再次发送这个确认包。

最后来看看第三个包。这种情况就不是那么显而易见了。如果客户端的确认包丢失,一个明显的解决办法是客户端再次发送这个确认包,然而这是不可行的,因为即使再次发送,客户端依然不知道服务器端是否收到这个确认包。解决的办法是服务器端再次发送三次握手的第二个包。这样就可以说明服务器端没有收到客户端的确认包,所以它需要再次发送第二个包,当客户端再次收到这个包时,也就知道自己此前发送的确认包丢失了,于是再次发送确认包。

文章目錄