【问题标题】:TCP establishment delays for 3 secondsTCP 建立延迟 3 秒
【发布时间】:2014-12-23 14:34:29
【问题描述】:

大多数时候,我的 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',而不是使用主机名。

【问题讨论】:

  • 这通常是因为 in.rshd 试图进行反向 DNS 查找以获取远程系统的主机名,并且 DNS 请求超时。你可以在运行rsh 命令之前尝试strace -f -p pid-of-the-in.rshd-daemon,看看in.rshd 进程在它暂停之前做了什么。
  • 对于客户端,我只是'rsh 172.17.0.8 pwd',没有使用主机名。我不确定是否为我的案例启动了 DNS 进程。而且我的板上没有 strace。
  • 延迟可能在服务器端而不是客户端。查看服务器上用户的.rhosts 文件中的主机列表。如果任何主机不在/etc/hosts 中,则身份验证机制可能会进行 DNS 查找,这可能需要几秒钟,例如如果 DNS 服务器无法访问。
  • @Mark Plotnick:我检查过,不是我的情况。

标签: linux delay rsh


【解决方案1】:

自己回答问题:

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

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

其他相关信息:

第一个日志来自 tcpd(aka tcp wrapper)

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 连接上的帧丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-04
    • 2022-01-27
    • 1970-01-01
    • 2021-08-07
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多