我已经知道TCP连接是由元组(源IP,源端口,目的IP,目的端口)标识的。 从理论上讲,应该有一个从host1:port1连接到server1:port1的客户机,同时从host1:port1到server2:port1连接另一个客户机(在host1上运行)。 我已经testing了一下Java,到目前为止似乎是可能的。 但是,我已经多次读取源端口必须是唯一的主机地址,这基本上意味着最多有65536个并发传出TCP连接的硬限制。 真的吗? 更新:这是我的Java代码。 这似乎工作,netstat -t清楚地显示了从端口9990(一个到9997,一个到9998)的两个活动的传出连接。 至less在现代Linux上,似乎有可能? Socket s1 = new Socket(); s1.setReuseAddress(true); SocketAddress saremote = new InetSocketAddress("localhost",9999); SocketAddress salocal = new InetSocketAddress("localhost",9990); s1.bind(salocal); s1.connect(saremote); Socket s2 = new Socket(); s2.setReuseAddress(true); SocketAddress saremote2 = new InetSocketAddress("localhost",9998); SocketAddress salocal2 = new InetSocketAddress("localhost",9990); s2.bind(salocal2); s2.connect(saremote2); netstat -t输出(截断): tcp6 0 0 localhost:9990 localhost:9998 CONNECTED tcp6 0 […]
我的防火墙上有许多iptables规则,如下所示: iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT 有两个规则的快捷方式 – 一个用于TCP和一个用于udp – 每个地址? 我的意思是我可以做这样的事情: iptables -A zone_lan_forward -p tcp,udp -d 1.2.3.0/24 -j ACCEPT
我想在haproxy 1.4之前joinstunnel来处理HTTPSstream量。 我还需要stunnel添加X-Forwarded-For头。 这可以通过haproxy网站上的“stunnel-4.xx-xforwarded-for.diff” 补丁来实现。 但是,描述中提到: 请注意,此修补程序不保持活着,… 我的问题是:这对我来说意味着什么? 我不确定, 如果这是关于保持之间 客户和stunnel stunnel和haproxy 或haproxy和后端服务器? 这对于性能意味着什么:如果我在网页上有100个图标,浏览器将不得不协商100个完整的SSL连接,还是可以重新使用SSL连接,创build新的TCP连接?
我的一个linux服务器正试图build立到全局编录服务器的LDAPS连接,并且连接正在下降(大概是由GC端)。 为了讨论的目的,假设1.1.1.1是Linux服务器,1.2.3.4是全局编录服务器。 如果我尝试从Linux中使用telnet ,我看到: [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. 第四和第五行之间没有任何延迟。 它只是立即断开连接。 我以为telnet结果可能有点误导(因为它实际上不适合于任何types的安全通信),所以我收集了来自设备的实际连接尝试的数据包捕获(使用需要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 […]
我知道在这方面有不lessSE的问题,我相信在阅读这个问题之前,我会先阅读其中的很多内容。 “服务器端TIME_WAIT ”是指在服务器端启动close()的服务器端套接字对的状态。 我经常看到这些与我相矛盾的言论: 服务器端的TIME_WAIT是无害的 你应该devise你的networking应用程序让客户端启动close(),因此让客户端承担TIME_WAIT 我发现这个矛盾的原因是因为客户端上的TIME_WAIT可能是一个问题 – 客户端可以运行可用的端口,所以实质上上面build议将TIME_WAIT的负担移到客户端,从服务器端来看,这不是问题。 客户端的TIME_WAIT当然只是有限数量的用例的一个问题。 大多数客户端 – 服务器解决scheme将涉及一台服务器和许多客户端,客户端通常不会处理足够高的连接数量,这是一个问题,即使他们这样做,也有一些build议“合理”而不是SO_LINGER的0超时,或干预tcp_tw sysctls)作战客户端TIME_WAIT避免太多创build太多的连接。 但是这并不总是可行的,例如对于类的应用程序,例如: 监控系统 负载发生器 代理 另一方面,我甚至不明白服务器端的TIME_WAIT是如何有用的。 TIME_WAIT的原因就在那里,是因为它阻止了将过时的TCP片段注入到不再属于它们的stream中。 对于客户端的TIME_WAIT ,只需简单地创build一个连接,就可以创build一个与该连接可能具有的相同ip:port对的连接(被使用的对被TIME_WAITlocking)。 但是对于服务器端来说,这是不能被阻止的,因为本地地址将具有接受端口,并且总是相同的,并且服务器不能(AFAIK,我只有经validation据)拒绝连接,传入的对等体将创build已经存在于套接字表中的相同的地址对。 我写了一个程序,显示服务器端TIME-WAIT被忽略。 而且,因为testing是在127.0.0.1上完成的,所以内核必须有一个特殊的位,甚至可以告诉它它是服务器端还是客户端(否则元组将会是相同的)。 来源: http : //pastebin.com/5PWjkjEf ,在Fedora 22上testing,默认networkingconfiguration。 $ gcc -o rtest rtest.c -lpthread $ ./rtest 44400 s # will do server-side close Will initiate server close … iterates ~20 times successfully […]
我有一个不对称的双桥拓扑结构,如下所示,当我从ssh连接172.16.11.5和172.16.10.6,但由于SynProxy我无法连接。 ——- | | —o— 172.16.11.5 | | —–o—– 172.16.11.6 | | | | default gw 1.1.1.1 | | 1.1.1.2/30 –o—-o— 2.2.2.2/30 | | | | | | (enp10s0f0) —-o—-o—– | | | XXX | | | | br1 br0 | synproxy | | —-o—-o—– | | | | | | 1.1.1.1/30 –o—-o— 2.2.2.1/30 | […]
我有一个10GbE连接到交换机的服务器,和10个客户端,每个连接1GbE连接到同一个交换机。 在每个客户机上并行运行nuttcp,我可以以接近线速的速度同时向服务器推送10个TCP数据stream(即,同时从所有10个客户机以每秒100兆字节为单位)。 然而,当我逆转方向并将数据从服务器发送到客户端时(即,10个TCPstream,每个客户端一个TCP连接),TCP重新传输量猛增,性能下降到30,20甚至10兆字节每秒每个客户端。 我希望得到这些数字,因为这种stream量模式是我关心的某些应用程序的代表。 我已经validation了我的服务器能够通过在类似的服务器上通过10GbE连接执行相同的实验来饱和10GbE链路。 我已经validation在我的任何端口上都没有错误。 最后,当我强行钳制(限制)接收器的TCP窗口大小时,我可以获得更高的带宽(30-40兆字节/秒)。 如果我将其限制得非常低,我可以将重传数据设置为零(带宽低得可怜)。 因此,我相当有把握地确信我的交换机中的缓冲区溢出,导致拥塞导致的数据包丢失。 但是,我认为TCP的拥塞控制本来是要处理好的,最终稳定在线速度的50%以上。 所以我的第一个问题很简单:哪个TCP拥塞控制algorithm最适合我的情况? 有很多可用的,但他们似乎主要是针对有损networking或高带宽高延迟networking或无线networking…没有一个适用于我的情况。 第二个问题:还有什么我可以尝试?
在这个问题的最后增加了新的细节; 我可能正在调整原因。 我有一个基于UDP的基于OpenVPN的VPNbuild立在互联网上的less数客户端,这些VPN是以tap模式build立的(我需要tap因为我需要VPN来传递多播包,而tunnetworking似乎不可能)。 我一直在经历VPN频繁的TCP连接冻结。 也就是说,我将build立一个TCP连接(例如SSH连接,但其他协议也有类似的问题),并且在会话期间的某个时刻,stream量似乎将停止在该TCP会话上传输。 这似乎与发生大数据传输的点有关,例如,如果我在SSH会话中执行ls命令,或者如果我logging长日志文件。 一些Googlesearch在服务器故障上出现了许多类似于这个问题的答案,表明可能的罪魁祸首是MTU问题:在高stream量期间,VPN试图发送丢弃在VPN端点。 上面链接的答案build议使用以下OpenVPNconfiguration设置来缓解该问题: fragment 1400 mssfix 这应该将VPN上使用的MTU限制为1400字节,并修复TCP最大段大小,以防止产生大于此数据包的数据包。 这似乎缓解了一些问题,但我仍然经常看到冻结。 我已经尝试了一些尺寸作为fragment指令的参数:1200,1000,576,所有的结果都相似。 我想不出两端之间有什么奇怪的networking拓扑可能引发这样的问题:VPN服务器运行在直接连接到Internet的pfSense机器上,而我的客户端也直接连接到另一个位置的Internet。 另外一个奇怪的问题是:如果我运行tracepath工具,那么这似乎可以帮助解决问题。 示例运行如下所示: [~]$ tracepath -n 192.168.100.91 1: 192.168.100.90 0.039ms pmtu 1500 1: 192.168.100.91 40.823ms reached 1: 192.168.100.91 19.846ms reached Resume: pmtu 1500 hops 1 back 64 以上运行在VPN上的两个客户端之间:我发起了从192.168.100.90到192.168.100.91目的地的跟踪。 两个客户端都configuration了fragment 1200; mssfix; fragment 1200; mssfix; 试图限制链路上使用的MTU。 上面的结果似乎表明tracepath能够检测两个客户端之间的1500字节的pathMTU。 我会假设由于在OpenVPNconfiguration中指定的碎片设置,它会稍小一些。 我发现结果有点奇怪。 更奇怪的是,如果我有一个处于停顿状态的TCP连接(例如,一个目录列表被冻结的SSH会话),那么执行上面显示的tracepath命令会导致连接重新启动 ! 为什么会出现这样的情况呢,我想不出什么合理的解释,但是我觉得这可能是指向一个解决scheme,最终根除问题。 […]
我怎样才能find在Linux PC上使用最多带宽的进程? iftop有可能find哪个连接产生最多的带宽,但是如何find这个过程呢?
运行本地连接到apache服务器的tcpdump ,我发现TCP连接正在build立,并且每2秒立即closures一次。 我如何find哪个进程负责这些? netstat -ctp没有帮助,连接速度太快,进程标识符不显示TIME_WAIT的。 他们原来是haproxy探针,我可以用strace来validation,但是我仍然不知道如何确定haproxy。