繁体   English   中英

如何在Java中的TCP套接字中检测重传的数据包以将其丢弃

[英]How to detect retransmited packets to discard them in TCP Sockets in java

有时我会收到已经收到的数据包(我使用了嗅探器并对其进行了系统确认)。 现在,我读取了所有数据(直到套接字超时),然后发送新请求,但这很丑陋。 我当时正在考虑使用序列号,但我在Socket接口中找不到它。 有什么线索吗?

不,你不会。 如果接收方TCP堆栈丢失了一个数据包,它将重新请求该数据包,但由于它丢失了原始数据包,因此它无法将原始数据包交付给您。 如果收到已经接收到的数据包,它将丢弃它。

TCP将按发送顺序传递所有发送的字节。 没别的(好吧,除了一些断开连接的边缘情况)。

发生了其他事情。

编辑:

明确地说,我说的是通过套接字的InputStream传递给您的应用程序的字节。 除非您要研究一些可怕的网络重传问题,否则网络上发生的一切基本上无关紧要。 如果接收堆栈确实收到了重复的数据包,它将对其进行确认,因为如果没有,那么发送方将再次发送它。

听起来您正在尝试说明TCP已经解决的问题。 它内置了序列号,将为您处理所有丢失的数据,从接收点开始,您应该等待直到收到所有期望的数据,而不是重新发出请求。 如果您不想在发出新请求之前等待响应完成,请考虑对具有多个连接的请求进行流水线处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM