TCP建立延迟3秒

时间:2014-12-23 14:34:29

标签: linux delay rsh

大部分时间,我的rsh周期一般都可以,我们可以从rshd获取以下日志:

Aug 19 04:36:34 shmm500 authpriv.info in.rshd[21343]: connect from 172.17.0.40 (172.17.0.40)
Aug 19 04:36:34 shmm500 auth.info rshd[21344]: root@172.17.0.40 as root: cmd='echo 481'

虽然对于某些错误情况,rsh可能会成功,但有几秒延迟,请参阅以下时间戳:

Aug 19 04:12:24 shmm500 authpriv.info in.rshd[17968]: connect from 172.17.0.40 (172.17.0.40) 
Aug 19 04:12:27 shmm500 auth.info rshd[17972]: root@172.17.0.40 as root: cmd='echo 18'

我还发现,对于大多数正常情况,PID增加1,而对于大多数错误情况,PID增加4,参见上面的日志中的PID,似乎rshd分支一些进程。那么你能解释为什么rshd花了几秒钟和PID增加。

我们的rsh是旧的rsh,而不是ssh,我不确定,但似乎rsh来自netkit。这是一个带有busybox的嵌入式主板,没有strace / pstack。 对于客户端,我只是'rsh 172.17.0.8 pwd',而不是使用主机名。

1 个答案:

答案 0 :(得分:0)

自己回答问题:

此问题是由帧丢失引起的。由于某种原因,三次握手中的SYN或SYN + ACK以极低的速率被丢弃,无论如何客户端在3秒内没有得到SYN + ACK超时(这个超时在Linux内核中是硬编码的),然后connect()再次重新发送SYN,并且通常在第二次尝试时成功。

从应用的角度来看,如果第二次尝试失败,我们会延迟3秒,甚至6秒。

其他相关信息:

第一个日志来自tcpd(又名tcp包装器)

Aug 19 04:36:34 shmm500 authpriv.info in.rshd[21343]: connect from 172.17.0.40 (172.17.0.40)

第二个日志来自netkit 0.17中的rshd

Aug 19 04:36:34 shmm500 auth.info rshd[21344]: root@172.17.0.40 as root: cmd='echo 481'

rsh需要两个tcp连接,第一个是从rsh客户端到rshd,第二个tcp连接是从rshd到rsh客户端,这意味着rshd是tcp客户端。我的问题是第二个tcp连接上的帧丢失。