Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检测TCP数据包丢失_Java_C++_C_Tcp - Fatal编程技术网

Java 检测TCP数据包丢失

Java 检测TCP数据包丢失,java,c++,c,tcp,Java,C++,C,Tcp,我正在验证TCP协议及其容错特性。在客户机和服务器对中,我希望检测由于丢失数据包而没有确认的数据包的重新传输。TCP确实会重新传输,但有没有一种方法可以通过编程在客户端/服务器程序中检测到这种情况。方法1:使用序列号检查重新传输 如果数据包被重新传输,其序列号保持不变。您可以存储所有传输数据包的所有序列号。在每次传输时检查您是否已经遇到此序列号。如果你有,这是一个重新传输。如果没有,请将其添加到数据结构中 方法2:无序传输 由于数据包序列号在重传中保持不变,并且序列号单调增加。如果当前数据包的序

我正在验证TCP协议及其容错特性。在客户机和服务器对中,我希望检测由于丢失数据包而没有确认的数据包的重新传输。TCP确实会重新传输,但有没有一种方法可以通过编程在客户端/服务器程序中检测到这种情况。

方法1:使用序列号检查重新传输

如果数据包被重新传输,其序列号保持不变。您可以存储所有传输数据包的所有序列号。在每次传输时检查您是否已经遇到此序列号。如果你有,这是一个重新传输。如果没有,请将其添加到数据结构中

方法2:无序传输

由于数据包序列号在重传中保持不变,并且序列号单调增加。如果当前数据包的序列号小于前一个数据包,则可以检查每次传输的序列号。如果是,那就是重新传输


旁注:这就是像WireShark这样的数据包分析器是如何将数据包标记为重传的

Python的可能副本编译成C的,并且有许多有用的数据包。不确定是否有办法,但python将帮助您避免编写代码页。如果您可以使用netstat,则可能会很有用。如前所述,您只需要从程序中调用它。我认为困难的问题不是如何在给定必要数据的情况下标记重新传输,而是如何获取该数据。