大多数时候,我的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]: [email protected] 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]: [email protected] 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”,而不使用主机名。

最佳答案

自己回答问题:

此问题是由帧丢失引起的。出于某种原因,三向握手中的SYN或SYN + ACK被以极少的速率丢弃,无论如何,客户端对等端在3秒超时(此超时在Linux内核中是硬编码)内没有得到SYN + ACK。 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]: [email protected] as root: cmd='echo 481'

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

关于linux - TCP建立延迟3秒,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27622453/

10-09 08:46