我有一个运行 CentOS 的相对较新的 8 核机器。我想开发一个使用 TCP 的统计服务器。它非常简单,它接受一个 TCP 连接,增加一个计数器并关闭连接。问题是它至少需要每秒处理 10k 次请求。我怀疑 CPU/内存不会成为问题,但我更关心我可能需要在我的服务器上配置的人为限制(如半开连接)以允许这种卷。那么,这可能吗?我应该注意哪些设置?我的网卡不能处理吗?
是否有工具可以为每个 TCP 连接将数据包捕获文件(以 pcap 格式)拆分为单独的文件?(除了可能需要在捕获过程中运行两次的本地 shell 脚本......)。类似于wireshark的“跟随TCP流”但对于命令行(我担心wireshark在显示700 MB数据包捕获时会消耗大量内存)
我查看了tcpflow,但它似乎生成的文件比原始 pcap 文件大得多,而且它们似乎不是 pcap 格式。
我今天意识到我根本不了解端口通信是如何工作的。
如果我启动一个侦听端口 80 的网络服务器实例,它可以响应来自许多不同浏览器选项卡的许多请求,所有请求都通过端口 80 进行通信。
但是,我无法启动服务器的两个实例,它们都侦听端口 80,因为这会导致端口冲突。
我一直认为这是给定的(在任何给定时间只有一个进程可以绑定到特定端口)而没有真正考虑过——不是有多个进程在端口 80 上通信吗?(即,浏览器中运行的每个选项卡?)
我正在寻求帮助,我确信这是一个古老的问题。我发现自己处于一种渴望更清楚地了解网络吞吐量的情况,但我似乎无法找到使其“点击”的信息
我们有一些分布在不同地理位置的服务器,运行着各种版本的 Windows。假设我们始终使用一台主机(台式机)作为源,那么在将数据从该主机复制到全国其他服务器时,我们会发现速度差异很大。在某些情况下,我们可以始终如一地以 12MB/s 的速度复制数据,而在其他情况下,我们看到的是 0.8 MB/s。应该注意的是,在测试了 8 个目的地之后,我们似乎总是在 0.6-0.8MB/s 或 11-12 MB/s。在我们主要关心的建筑物中,我们有一个到 ISP 的 OC-3 连接。
我知道有很多变数在起作用,但我想我希望这里的专家可以帮助回答一些基本问题,以帮助加强我的理解。
1.) 对于运行 Windows XP、服务器 2003 等的旧机器,具有 100Mbps 以太网卡和 72 毫秒典型延迟,0.8 MB/s 听起来是否合理?或者您认为这足够慢以表明存在问题?
2.) 在我们的例子中,“吞吐量 = TCP 窗口/延迟”的经典“数学最快速度”计算为 0.8 MB/s (64Kb / 72 ms)。我的理解是这是一个上限;您永远不会期望达到(由于开销),更不用说超过那个速度了。但在某些情况下,我们看到的速度为 12.3 MB/s。网络上散布着 Steelhead 加速器,这些加速器可以解释如此高的传输速率吗?
3.) 有人建议使用 SMB 与 SMB2 可以解释速度的差异。事实上,正如我们预期的那样,数据包捕获显示两者都根据正在使用的操作系统版本而被使用。我了解决定是否使用 SMB2 的因素,但我很想知道使用 SMB2 可以获得什么样的性能提升。
我的问题似乎只是缺乏经验,更重要的是,关于什么是合理的网络速度和什么是不合理的观点。任何人都可以帮助传授背景/观点吗?
我正在用 netcat 代理一个 VNC TCP 服务器端口。代理机器运行linux。
这是我使用的命令:
mkfifo backpipe
nc -l 5902 0<backpipe | nc 10.1.1.116 5902 1>backpipe
Run Code Online (Sandbox Code Playgroud)
10.1.1.116 是“远程”机器,原始 VNC 服务运行在端口 5902 上。执行此命令后,本地主机上的 VNC 服务可用于其他机器。
但是在每次 VNC 会话之后,netcat“代理服务器”都会停止,这就是 netcat 的工作原理。
在 VNC 会话终止后,如何让 netcat 保持“代理服务”运行?
作为一种解决方法,我将 netcat 命令行置于无限循环中:
mkfifo backpipe
while true; do nc -l 5902 0<backpipe | nc 10.1.1.116 5902 1>backpipe; done
Run Code Online (Sandbox Code Playgroud)
但我更喜欢“官方”的 netcat 解决方案,它根本不会中断服务。
我已经阅读了“-”参数,但我不确定这是否适合这种情况,而且我还无法正确应用它。
补充说明:
当然,我可以通过 ssh 隧道以不同的方式做到这一点,但我想要一个没有加密开销的解决方案,使其尽可能响应 VNC 客户端。否则,可以使用不同的代理解决方案。
客户端必须是 VNC,没有其他协议是可能的。
我一直在使用的英特尔开发工具包包括一个远程管理功能 (另请参阅此处的Ubuntu 手册页),它允许在操作系统挂起时进行远程重启。
它能够在与操作系统共享的 IP 地址上侦听少数端口(具体来说是 16992 和 16993)。(通过侦听 DHCP 请求或发出自己的请求;我不确定,但无论哪种方式,它都在此模式下使用共享 MAC 地址)
我让它在一个单独的 IP 地址上运行,因为我担心一个潜在的用例:AMT 如何防止主机网络堆栈与其发生冲突?
换句话说,英特尔管理软件现在正在侦听 [至少] 两个 TCP 端口,带外且操作系统不知道。假设我发起了到远程主机的 TCP 连接,并且主机堆栈选择 16992 或 16993 作为本地端口来侦听 [返回到盒子的数据包]。
从远程主机返回的数据包不会被“黑洞”而永远不会到达操作系统吗?或者是否有一些预防措施,例如 Linux 内核中的 Intel 驱动程序知道 TCP 应该避免端口 16992?(似乎不太可能,因为这是一个与操作系统无关的功能。)或者管理接口可以将发送到端口 16992 的不属于已知管理会话的流量转发回主机堆栈?
无论哪种方式,在我了解其工作原理之前,我都不愿意将其用于网络密集型负载。我搜索了英特尔文档,也找不到任何内容。
我想这可以通过启动大约 30,000 个 TCP 连接并检查连接是否有效来测试,即使端口重叠。但我还没有机会这样做。
(脚注:我意识到这个问题类似于基于 Intel vPro 的计算机如何保持 IP 连接?但该问题涉及一般连接,而不是与与主机堆栈重叠的特定 TCP 端口的连接。)
在 centos 机器上,我喜欢转储 tcp 连接 - 我想看看服务器是否尝试向某个 IP 发送请求。通常 tcpdump 可以解决问题 - 但 tcpdump 没有安装,并且安装软件不是一个选项(因为公司政策)。恐怕 netstat 不会向我显示一个请求。
所以我想知道我还有什么其他选择。我确实在服务器上有 root 访问权限。
我的一个 linux 服务器正在尝试与全局目录服务器建立 LDAPS 连接,但连接正在断开(大概是 GC 端)。
为便于讨论,假设 1.1.1.1 是 Linux 服务器,而 1.2.3.4 是全局编录服务器。
如果我尝试telnet
从 Linux 框中使用,我会看到:
[root@foobox ~]# telnet gcfoo.exampleAD.local 3269
Trying 1.2.3.4...
Connected to gcfoo.examplead.local.
Escape character is '^]'.
Connection closed by foreign host.
Run Code Online (Sandbox Code Playgroud)
第 4 行和第 5 行之间没有延迟。它只是立即断开连接。
我认为telnet
结果可能有点误导(因为它实际上并不适合任何类型的安全通信),所以我从设备收集了实际连接尝试的数据包捕获(使用需要 LDAPS 的实际程序)。
这是我所看到的(同样,IP 和源端口已被重命名以保护无辜者):
No. Time Source Destination Protocol Length Info
1 0.000000 1.1.1.1 1.2.3.4 TCP 66 27246 > msft-gc-ssl [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SAC_PERM=1 WS=128
2 0.000162 1.2.3.4 1.1.1.1 TCP 62 msft-gc-ssl …
Run Code Online (Sandbox Code Playgroud) 提供 ISO 文件供下载的网站通常会提供这些文件的 md5 校验和,我们可以使用它来确认文件已正确下载,并且没有损坏。
为什么这是必要的?当然,TCP 的纠错特性就足够了。如果数据包没有被正确接收,它将被重新传输。TCP/IP 连接的本质难道不能保证数据完整性吗?
如果 Windows 服务器有数千个端口处于打开LAST_ACK
状态(如 netstat 所示),这意味着什么?是因为一个端点正在等待另一个端点响应吗?