我们有一个C#FTP类很好用,但是我们的TCP端口用完了,因为它们都处于TIME-WAIT状态,不能重复使用。我们可以减少注册表中的默认TIME-WAIT,但我们宁愿重用端口。
所以鉴于以下博客: http://blogs.technet.com/b/networking/archive/2010/08/11/how-tcp-time-wait-assassination-works.aspx
在服务器端套接字进入TIME-WAIT状态且客户端在2MSL内重新连接到服务器的情况下(默认的TIME-WAIT时间),有两件事情可能发生:
1.服务器不会响应来自客户端的SYN数据包,因为套接字处于TIME-WAIT状态。
2.服务器可以从客户端接受SYN,并将套接字的状态从TIME-WAIT更改为ESTABLISHED。这被称为TIME-WAIT暗杀,或以前连接的化身。
上述场景'2'的关键是发送的SYN的ISN(初始序列号)需要高于前一个会话中使用的最高序列号。如果ISN不符合预期,服务器将不响应SYN,套接字将等待2MSL,然后再次可用。
我正在尝试(以编程方式在C#中)找到一种方法来始终发送一个发送的SYN,其数量高于上一个会话中使用的最高序列号。
这有可能实现吗?
答案 0 :(得分:1)
ISN是随机的,按设计。您无法通过API控制它。
答案 1 :(得分:0)
Windows本身已经为您实现了更高的序列号,您无需执行任何特殊操作即可获得该功能。 The article你与国家联系在一起:
Microsoft的TCP / IP实现使用此功能。 ... TCP TIME-WAIT Windows系统之间的暗杀效果很好,当Windows与运行其他TCP / IP实现的主机通信时,暗杀可能无法正常工作。 RFC1337,TIME-WAIT暗杀的危害,讨论可能存在的陷阱:http://tools.ietf.org/rfc/rfc1337.txt