我有一个客户机/服务器程序,可以从服务器向客户端发送可变数量的数据包。/proc/sys/net/ipv4 4/tcp_ the 2设置为默认15,但当我拔掉以太网电缆时,服务器在放弃之前只发送7或8(它是不同的)重传,然后是连续的具有请求的ARP。
向我提出的一项建议是,TCP在7-8重传后停止传输的原因是,此路由的ARP表条目在服务器达到适当重试量之前已过期。我试图通过将/ipv4 4/route/cg_timeout更改为1500(从300)进行补救,但是程序行为并没有明显的区别。
如果有人能解释清楚或提供其他解释,我们将不胜感激。
发布于 2013-12-05 19:28:12
也许ARP表中的条目即将过期,当ARP请求再次发送时,就会出现无应答超时吗?你运行arp -a了吗?也许设置gc_timeout是不够的,您还需要设置gc_stale_time吗?我在这篇文章中读到了关于它是如何工作的一个很好的解释。那家伙想做的几乎和你想做的正好相反。Configuring ARP age timeout
还有一条线索要调查。也许你也应该改变tcp_retries1?是否可以更改重传超时(RTO)?
此外,我还查看了Kernel文档,文件ip-sysctl.txt和我得到的:
tcp_retries1 -整数此值会影响TCP决定由于未确认的RTO重传而导致错误的时间,并将此怀疑报告给网络层。有关更多详细信息,请参阅tcp_retries2。RFC 1122建议至少重传3次,这是默认情况。
tcp_retries2 -此值影响活动TCP连接的超时,当RTO重传仍未被确认时。给定N的值,假设TCP_RTO_MIN的初始RTO在指数退避后的TCP连接会在(N+1)第RTO终止连接之前重传N次。默认值15会产生假想的超时924.6秒,是有效超时的下限。TCP将有效地超时在第一个RTO,这超过了假设的超时。RFC 1122建议的超时时间至少为100秒,该超时值至少为8。
在其他线程中,我读到了关于套接字选项TCP_USER_TIMEOUT的内容。我从来没有用过它,但它可能是一个简单的解决办法。Application control of TCP retransmission on Linux
我希望这些选择之一能有所帮助。
https://stackoverflow.com/questions/20403118
复制相似问题