我有一个在Windows 7上运行的C ++程序,它可以捕获所有网络层流量并将其注入Windows网络堆栈。 现在,我需要跟踪每个正在进行的tcp会话/连接,并将每个tcp数据包(入站和出站)分配给这些连接之一。 检测新连接的开始并不难。我只需要扫描每个tcp数据包,并检查其SYN标志是否已设置。 但是我不太确定如何处理连接结束,我有三个问题:
1。)结束tcp连接的通常方法是使用FIN标志进行四次握手。在首先发送FIN数据包的一方收到另一方的最终ACK之后,它需要等待一段时间,直到连接最终终止。这个超时应该持续多长时间?这是Windows特定的超时时间吗?
2。)我应该如何检测例如一侧崩溃,因此无法发送FIN数据包?
3。)也许可以询问Windows某个连接是否仍处于活动状态?