Articles of tcp

为ldap放弃请求延迟ACK包

我们已经从Linux上的openldap服务器迁移到Windows 2008上的DirX。ldap服务器和正常的serch请求按预期运行。 但是,有些应用程序(weblogic部署的webapps)会导致性能问题。 我们追踪了networking活动,发现当客户端发送“放弃”操作时,ldap服务器发送并确认具有0.1-0.2s的RTT。 我们不是100%肯定的,但我们认为这是performance冲击的来源。 我们看到的交互有270个放弃,179个ACKS的RTT> 0.2s。 不是很熟悉TCP,我有以下问题: 响应于接收到分组而发送的ACK独立于接收者将花费多长时间来处理发送的数据。 这发生在收件人甚至收到传入的有效负载之前的tcp级别(在我们的情况下放弃)。 对? 所有其他交互说searchrequest / searchresponse在有效载荷数据包有ack。 这是“延迟了”? 他们只需要约0.01秒,这包括有效载荷和可能的计算。 那么为什么单个的ACKS被放弃呢? 或者像这样提出问题:什么时候发送个人ack而不是合并ack +数据? 657 9.2943 ldapserver ldapclient LDAP 170 searchResDone(57) 658 9.2948 ldapclient ldapserver TCP 66 18367 > 389 [ACK] Seq=10007 Ack=19799 Len=0 659 9.2954 ldapclient ldapserver LDAP 1009 searchRequest(134) 660 9.2972 ldapserver ldapclient LDAP 630 searchResEntry(134) 661 9.2973 […]

无法与OpenVPN服务器build立TCP连接

Client OpenVPN assigned IP: 10.8.0.2 ↓ TCP on 1194 Internet ↓ Router port-forwards 1194 to server- Public IP 104.162.67.198 ↓ Server LAN IP: 10.8.0.1 我想上面是我正在尝试做的(10.8.0.0/24是分配的IP)。 我试图通过TCP路由多个远程客户端到我的OpenVPN服务器(否则作为samba文件共享)运行Ubuntu 14.04。 正如你所看到的,在我的server.conf中,我推送“路由……”几乎每个选项与我的服务器分配的IP地址,服务器的内部IP地址,我的networking公共IP地址,因为我不确定这需要路由。 看到我在下面做的细节和疑难解答,任何build议将不胜感激。 为server.conf port 1194 proto tcp mode server dev tun ca ca.crt cert sambasrv.crt sambasrv.key dh dh2048.pem ifconfig-pool-persis ipp.txt push "route 192.168.0.19 255.255.255.0" push "route 10.8.0.1 255.255.255.0" […]

PHP-FPM TCP连接没有及时终止

我使用APCcaching(通过W3 Total Cache插件)通过nginx / PHP5-FPM提供Wordpress页面。 Nginx通过端口9000上的TCP套接字与PHP-FPM进行通信。我已经通过sysctl调整了最大连接数为1024.我已经将max_execution_time(在php.ini中)和request_terminate_timeout(在FPM conf文件中)设置为30秒。 时不时地(每隔8-10个小时,而不是线性地),端口9000上的开放TCP连接数量增长到接近1000(主要是CLOSE_WAIT状态,一些FIN_WAIT,FIN_WAIT_2),有时会超过1000,并且我的Web服务器启动返回504错误。 一旦我终止该端口上的所有TCP连接并重新启动FPM,它就会再次正常工作。 我启用了缓慢的日志,看看发生了什么,如果我正确地阅读它,它挂在apc_store()调用。 这是一个APCconfiguration错误,还是我需要调整与FPM设置? 有没有办法强制这些TCP连接终止,即使脚本不发送最终的终止信号? 来自FPM慢日志的示例跟踪: [22-Jan-2015 09:42:49] [pool www] pid 20327 script_filename = /var/www/index.php [0x00007fdc527ec908] apc_store() /var/www/wp-content/plugins/w3-total-cache/lib/W3/Cache/Apc.php:55 [0x00007fdc527ec768] set() /var/www/wp-content/plugins/w3-total-cache/lib/W3/ObjectCache.php:254 [0x00007fdc527ec5e0] set() /var/www/wp-content/plugins/w3-total-cache/lib/W3/ObjectCache.php:300 [0x00007fdc527ec488] add() /var/www/wp-content/plugins/w3-total-cache/lib/W3/ObjectCacheBridge.php:73 [0x00007fdc527ec330] add() /var/www/wp-content/object-cache.php:94 [0x00007fdc527ec200] wp_cache_add() /var/www/wp-includes/option.php:176 [0x00007fdc527ec078] wp_load_alloptions() /var/www/wp-includes/functions.php:1272 [0x00007fdc527ebf40] is_blog_installed() /var/www/wp-includes/load.php:474 [0x00007fdc527ebdb0] wp_not_installed() /var/www/wp-settings.php:109 [0x00007fdc527ebc88] +++ dump failed

HAProxy重置后端连接

我正在设置一系列服务器作为我们的应用服务器的代理,主要是为了模糊应用服务器的IP作为一套反DDOS措施的一部分。 我的目标是让HAProxy接受短暂的HTTP / 1.0连接,并通过持续连接将它们转发到后端,从而显着减less连接过程中的开销,缓慢启动等。 我有这个configuration部分工作,但仍然看到比预期更高的后端连接速度 – 调查显示,每个后端连接正在服务1到5个请求,然后由HAProxy方复位。 这些重置数据包总是在服务器完全接收到响应之后发生,在发送任何进一步的请求之前,它们在看似随机的延迟之后发生 – 有时短至0.1s,有时长达20s。 改变HAProxy的超时设置似乎没有效果。 有谁知道什么会导致HAProxy展示这种行为,或者我可能会更好地去debugging它? 编辑:忘了提及,我无法得到后端生成任何有意义的日志,即使使用tcplog configuration(redacted): global log /dev/log local0 log /dev/log local1 notice stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s maxconn 16384 chroot /var/lib/haproxy user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull option http-keep-alive timeout connect 5s […]

拆分TCP数据包 – 数据层vs IPv4Layer

Data layer中的拆分TCP数据包与IPv4Layer中的Data layer包拆分有什么不同?

Linux客户端无法连接,服务器和TCP Windows Size / Timestamps问题

我们有一个问题,许多客户端(所有Linux Ubuntu)有时无法通过SSH连接到远程服务器。 如果发生问题,Windows客户端没有这个问题,可以连接就好了。 我发现这个问题有一个类似的问题: 为什么服务器不会发送SYN / ACK数据包来响应SYN数据包 禁用服务器上的TCP时间戳确实可以解决问题,但是我想知道真正的问题是什么。 我不明白为什么这会导致任何问题,绝对不是在build立连接时。 使用Wireshark时,我发现Windows客户端使用8192的窗口大小,而Linux客户端使用29200的窗口大小.Windows客户端接收SYN_ACK,而Linux客户端不接收。 是否有可能这个较高的初始窗口大小负责不发送服务器的SYN_ACK? 我不能拿出一个明智的解释,为什么它可能会导致给定的问题,但由于它是唯一的(在我看来)的差异,它看起来是这样的。 我错过了什么吗? ***编辑经过更多的search,思考和一些巫术魔法,我想我可能会拿出一个合理的解释。 确实需要一些假设和具体条件,但我相信在这种特殊情况下这些可能是可能的。 这两个用户都在同一个NAT设备后面(在我们的例子中是一个Fortigate防火墙)。 这个防火墙将把它的外部接口/ IP上的本地端口分配给每个NAT连接。 如果该端口已经被其他用户使用,则被跳过。 如果连接closures,端口将被释放并返回到NAT池。 如果该端口被分配给另一个用户,但服务器仍然有连接的某个logging(TIME_WAIT,最终的FIN / ACK没有收到),并且数据包的时间戳低于以前的连接数据包,默默地被偷听。 好的,如果在那里有很多,但是… – 这两个用户正在同一个网站上开发,所以他们将与同一个远程服务器进行大量连接 – 防火墙(Fortigate)显然保留了一个顺序计数器每个源IP / destinationIP / destinationPort的NAT端口。 如果两个用户的计数器接近彼此,考虑到两个目的地IP作为端口是相同的,那么与该服务器的两个连接发生这种“冲突”的可能性并非不可能。 这就可以解释为什么这个问题只是零星地发生。 这个理论唯一的问题是,我无法在服务器端find任何证据。 在TIME_WAIT或类似的东西中没有任何连接,我假设一旦它们从netstat输出中消失,服务器就已经忘记了它们。 我相信最初的窗口大小在这个方面并不起作用,所以我正在打击这个名单中的一个。

TCP连接重置

得到这个错误看起来像服务器正在重build连接,因为一些数据包丢失 任何可能的build议来弄清楚这一点 37713 591.925575000 Sourceip==>>destinationIP TCP 66 50865→https [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=4 SACK_PERM=1 37719 592.196621000 destinationIP==>>Sourceip TCP 66 https→50865 [SYN, ACK] Seq=0 Ack=1 Win=14600 Len=0 MSS=1460 SACK_PERM=1 WS=32 37720 592.196714000 Sourceip==>>destinationIP TCP 54 50865→https [ACK] Seq=1 Ack=1 Win=65700 Len=0 37721 592.197041000 Sourceip==>>destinationIP TCP 296 50865→https [PSH, ACK] Seq=1 Ack=1 Win=65700 Len=242 37731 592.467777000 […]

TCP高发送-q与FIN_WAIT1状态

我遇到了一个我的networking服务器的问题,这需要几分钟的时间来完成一个网页。 我看了看TCP连接,注意到send-q缓冲区中有一个非常高的值,同时也有一个TCP状态FIN_WAIT1,当数据仍然在缓冲区时,sugests TCP已经启动了一个主动closures? 看着我的networking接口,我也注意到了大量丢包。 那么send-q可能是重发这些数据包的尝试? 这个页面最终会加载,并且发送-q变为零,TCP连接closures。 我只是想知道有没有人遇到过这个问题,而且我说的是“正确的路线”。

我如何限制每个单独的TCPstream,到一个固定的最大速度?

我已经阅读了所有各种stream量调整文档,但没有深入讨论HSFC调度问题 有没有人真正了解Linux / BSD中的HFSC调度是如何工作的? 看了其他的问题,但似乎一切都在解决困难的问题,比如如何公平地分配给定数量的带宽,保持良好的交互式会话等。 但是我想要做的就是把一个已知的总的最大理论吞吐量(比如1gig)分成(比如说)10个每个100个的块,并且使用一些魔法,这样任何一个TCP会话的上限都是100。 这看起来像是一个简单的请求,或者是一个毫无意义的请求,或许这么简单,以至于例子从来不讨论它,而是直接用于更复杂的场景。 但是,在客户不参与竞争的受控环境中,这将非常有用。 编辑:nginx有一个limit_rate命令,正是我想要的(单个连接到一个单独的url的限制率),但我仍然希望在tcp或其他模块的iptables级别这样做,所以问题是打开的。

在服务器发送重复确认后,它停止响应

我的TCP客户端与多个第三TCP服务器通信。 然而,一个特定的服务器产生重复的确认,并在特定的时间内停止响应。 那个特定的服务器是可以的。 我用wireshark检查数据包。 我无法检查第三方服务器基础设施。 服务器端的安全监控工具是否停止响应? 其他TCP服务器也可以,即使发生重复的ACK也是如此。 这里是wireshark片段: 4 0.072547 CCC.CCC.CCC SSS.SSS.SSS.SSS TCP 66 clientPort > serverPort [FIN, ACK] Seq=2008 Ack=1 Win=14720 Len=0 TSval=992536 TSecr=4189227564 …. …. 7 0.156504 SSS.SSS.SSS.SSS CCC.CCC.CCC.CCC TCP 66 serverPort > clientPort [ACK] Seq=1 Ack=1449 Win=8704 Len=0 TSval=332931140 TSecr=259206577 8 0.159312 SSS.SSS.SSS.SSS CCC.CCC.CCC.CCC TCP 78 [TCP Dup ACK 7#1] serverPort > […]