WoJ*_*WoJ 7 networking linux wireshark tcpdump
我在服务器上192.168.0.2
,想对192.168.0.1
(两台服务器都是 RPis 并运行 Linux (raspbian))进行 HTTP 调用。
curl -XGET http://192.168.0.1:8081/api
Run Code Online (Sandbox Code Playgroud)
API 192.168.0.1
(我正在调用)是我的(基于 的 Python 脚本bottle
)并且大部分时间都在工作。HTTP 侦听部分有时会莫名其妙地挂起,导致curl
上面的调用挂起,然后超时。
tcpdump
当 API 无响应时,我在 192.168.0.1(接收服务器,托管 API 的服务器)上运行,wireshark
分析显示在调用启动后立即进行了一些重传:
这种行为的原因通常是什么?(如果有“通常”的原因)。
注 1:如果需要,我将修改 API 以便它为 Web 服务器部分记录更多数据,但由于挂起的不可再现性,我怀疑这是它的错(其他部分(线程)工作得很好并且没有任何线程崩溃)。
注意 2:重新启动服务器(也可能重新启动脚本本身(我不这样做,因为我宁愿重新启动机器))解决了这个问题。
带有 PSH、ACK 标志的重传序列是什么意思(以及虚假的重传返回)?
这种行为的原因通常是什么?(如果有“通常”的原因)。
(另请参阅ServerFault - 我的连接期间的 PHA ACK)
ACK 意味着发送带有 ACK 数据包的机器正在确认它已从另一台机器接收到的数据。在 TCP 中,一旦建立连接,任何一方发送的所有数据包都将包含一个 ACK,即使它只是重新确认已经确认的数据。
PSH 是发送者的一个指示,如果接收机器的 TCP 实现尚未将它接收到的数据提供给正在读取数据的代码(程序或程序使用的库),那么它应该在那时这样做。引用 RFC 793,TCP 的官方规范:
在连接上流动的数据可以被认为是八位字节流。发送用户在每个 SEND 调用中指示是否应通过设置 PUSH 标志立即将该调用(以及任何之前的调用)中的数据推送到接收用户。
允许发送 TCP 从发送用户收集数据,并在其方便时将数据分段发送,直到推送功能收到信号,然后它必须发送所有未发送的数据。当接收 TCP 看到 PUSH 标志时,在将数据传递给接收进程之前,它不能等待来自发送 TCP 的更多数据。
如果您看到虚假重传,则意味着发送方认为数据包丢失并再次发送,即使接收方为其发送了确认数据包。
归档时间: |
|
查看次数: |
35100 次 |
最近记录: |