TCP三次握手考的应该是很多,也很重要,至于过程网上应该很多了,这里我说一下我的思考。
在TCP三次握手中的最后一次,服务端可能没有收到客户端发来的ACK吗?答案是有可能的,如果服务端突然关闭,它显然是收不到的,但是这种概率极低,因为正常情况下服务端应该是能收到的,因为它们之前已连通了。
如果服务端突然关闭,根据TCP的超时重传机制,ACK还会重传吗?答案是不会,最会一个ACK发出后,客户端已建立连接,但是客户端此时是没有感知的。随后,客户端给服务端发送数据,但服务端已断开了,这时发送数据不会受到服务端回的ACK,那么客户端重传,直至超时。
关于超时重传,正常接收端会接收到重复的报文,每次重传seq(序列号)都是相同的,接收端根据seq去重,序列号的作用也突显出来。
这篇博文讲的很详细: http://www.jellythink.com/archives/705