为什么同一IP:port目的地的python套接字和tcp ping之间存在差异?

2024-05-28 22:22:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我的设置:

  1. 我正在使用portmap.io提供的IP和端口来执行端口转发
  2. 我已经安装了OpenVPN(根据portmap.io的要求),当我想操作我的项目时,我会运行一个现成的配置文件
  3. 我的主要工作涉及使用Python中的套接字在客户端和服务器之间发送消息
  4. 我安装了一个名为tcping的软件,它基本上允许我通过tcp连接ping一个IP:port

这个数字基本上概括起来是:

Setup

我得到的结果是:

  1. 当我试着用“ping”来表示IP时,平均RTT始终保持在30毫秒左右
  2. 我尝试使用相同的IP在Python中编程套接字,在我的机器上运行一个服务器脚本,在任何其他机器上运行一个客户端脚本,但绑定到此IP。我试着通过套接字发送一条像“Hello”这样的小消息,我发现这条消息花费的时间要长得多,而且前后不一致。有时需要1秒,有时需要400毫秒

产生这种差异的原因是什么?


Tags: 项目端口ioip脚本机器消息客户端
1条回答
网友
1楼 · 发布于 2024-05-28 22:22:10

What is the reason for this discrepancy?

tcpping只测量建立TCP连接所需的时间。连接建立通常完全在操作系统内核中完成,因此甚至不需要切换到用户空间

即使是应用程序中的一些小型数据交换也要昂贵得多。首先,必须完成初始TCP握手。通常只有在TCP握手完成后,客户端才开始发送有效负载,然后需要将有效负载发送到另一端,放入套接字读取缓冲区,安排用户空间应用程序运行,从应用程序和进程中的缓冲区读取数据,创建响应并将其发送到对等操作系统内核,让内核将响应传递到本地系统和这里的很多东西,直到本地应用程序最终获得响应并结束这需要多长时间的计时

考虑到最后一次测试的时间与纯RTT相比相差太远,我认为服务器系统要么性能低,要么负载高,要么应用程序写得不好

相关问题 更多 >

    热门问题