TCP未建立之前,丢失的SYN报文会不会重传?

记得以前,有人问TCP问题的时候,也出现过一次像这样的争论。争论的问题是,TCP四次挥手为什么要四次,三次为什么不可以。我的答案是可以的,只要开启延迟确认,或者没有数据发送的时候,那就可以了,事后也抓包确认了,三次的确可以挥手。

而今天的问题是TCP为什么要三次,而不是两次引出的,其中的回答的一个理由是,重发的SYN报文可能导致服务端重新建立链接,导致服务端的资源耗尽。而对方观点在于建立之前,建立连接的SYN包在建立之前,是不会重发。

争论是没有用的,大鲨鱼抓一个包试试就知道了,结果如下:

retry-sync

在未建立连接之前,不止重传了,而且还重传了10次!!

哎,一声叹息。闻道有先后,术业有专攻。