Articles of tcp

一种测量build立TCP连接开销的工具

我需要一个可以在进行端口转发时使用的工具,可以测量build立TCP连接花费的时间和总时间。 Charlesdebugging代理具有端口转发function,并显示从所选组的最后一个连接的开始到结束的总时间,但不显示连接build立开销。 我们正在使用一个远程SVN服务器,它没有configuration为使用Keep-Alive,但是我们没有直接访问服务器,所以我们需要certificate这会导致开销,并放慢速度来说服对方改变组态。

端口在机器A上打开,但在Nmap中从机器B不可见

我有一个虚拟化的CentOS机器,它有一个在8080端口上侦听的软件。我closures了SELinux并刷新了所有的iptables(所以现在没有规则设置)。 我用netstat -nap | grep 8080查了一下 netstat -nap | grep 8080的端口是真正开放的。 IP地址是192.168.1.3。 从我的另一台机器上,我想用程序连接到那个端口,但是失败了。 当运行nmap -p 8080 192.168.1.3它说端口是closures的! 当我检查Wireshark时,我可以看到连接的计算机正在发送SYN数据包,但响应计算机(IP为192.168.1.3)以SYN / RESET响应并中断连接,并且不响应SYN / ACK,从而继续传输。 序号正确,发送计算机发送0,接收发送计数器1发送。 奇怪的是,其他端口可以被客户端机器检测为Nmap打开,但不是8080。 什么可能是错的? 编辑 : 好吧,我现在不知道该怎么相信。 这是我发现的: 在“服务器机器”上监听8080的程序(我们称之为)是一个用Java构build的定制Web服务(使用第三方库作为EclipseLink等)。 在“服务器机器”上执行nmap localhost时,可以find打开的端口。 当从“客户端机器”执行nmap 192.168.1.3 ,它发现端口closures(如上所述)。 而新的发现:我只是做了一个简单的Java应用程序,只是使用ServerSocket类来侦听8080,然后从“客户端机器”发现端口。 那么,这是与web服务应用程序的东西? 为什么在运行web服务时,端口可以从“服务器机器”(当自己扫描本地时),而不是从“客户端机器”中发现? 为什么在运行在8080上监听的简单Java应用程序时,端口8080可以从两台机器上发现? netstat -ntpl tcp 0 0 ::ffff:127.0.0.1:8080 :::* LISTEN 3481/java 编辑2 : 愚蠢的我! 现在我看到, ::ffff:127.0.0.1:8080表示程序只能从本地主机访问! 😀 我在哪里改变,所以它听所有?

haproxy与服务在同一个盒子上的tcp透明模式

我想为TCP协议设置透明的HA代理。 当HA代理位于正在运行该服务的盒子的前面时,它完美地工作。 但是,当我尝试在透明模式下设置高可用性代理以将连接负载平衡到与HA代理位于同一个盒子上的服务时,它将停止工作。 我的实际设置如下所示: eth0 192.168.56.101 HA代理configuration: 听sftp:9222 模式tcp 源代码0.0.0.0 usesrc clientip 选项tcpka 选项tcplog 平衡最less 服务器server1 192.168.56.101:22检查 IPTABLES /路由: iptables -t mangle -N DIVERT iptables -t mangle -A DIVERT -j MARK –set-mark 1 iptables -t mangle -DIVERT -j ACCEPT iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT ip规则添加fwmark 1查找100 ip route添加本地默认的dev eth0表100 […]

iptables只接受三方握手

使用iptables我想接受TCP连接的三次握手,然后删除连接。 如果可能的话,是否有可能如何?

TCP窗口大小不会超过130048

我有两个服务器之间build立了约80毫秒的延迟。 两者都是centos 6,并运行一个java应用程序,将数据从位置传输到另一个位置。 两者都在1gbps连接。 我一直在尝试不同的sysctl设置和不同的发送和接收缓冲区设置在java中,但无论我设置他们,我不能让tcp窗口大小超过130048在tcp转储。 这相当于大约13mbps这是我得到的实际吞吐量。 当前的sysctl设置是: net.core.wmem_max = 16777216 net.core.rmem_max = 16777216 net.core.wmem_default = 2400000 net.core.rmem_default = 2400000 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216

什么可以把linux进程pipe理连接池到坏的状态,所以它不断重启呢?

我有一个与MySQL连接池的应用程序。 在某种程度上,在生产中,每隔1-3秒钟closures一些sockets。 结果我的应用程序重新启动这个连接。 这是30个连接/应用程序服务器与MySQL的单个实例交谈的相当大的池。 总的来说,数据库端可能有1000个连接。 当我重新启动应用程序过程时,问题就消失了。 我寻找连接到套接字,文件描述符,内核的一些原因。应用程序每秒打开和closures〜10-30连接,以便有大约4-5k的传入连接。 如何避免它? lsof -nPi tcp 报告大约5k连接(和正确的传出到mysql的数量)。 /proc/sys/net/ipv4/ip_local_port_range 显示10k到60k的端口可用 ulimit -n设置为高数(100k) Vmstat显示没有交换。 我在50%的CPU和25%的内存。 接下来我可以检查什么? 如何解决它?

mysql客户端无法读取查询结果?

所以我有这台机器运行连接到它的MySQL数据库的XMPP服务器。 当我开始加载testing时,一切都很顺利,直到大约500秒后我注意到: Caused by: com.mysql.jdbc.exceptions.MySQLTimeoutException: Statement cancelled due to timeout or client request 开始出现。 像他们一样,命令: mysql> show processlist; 揭示了MySQL如何接收下一个查询,并回答它们(状态=发送数据是在磁带上被捕获的),然后只是闲置在state = sleep中20s,40s甚至更多。 在这一刻PreparedStatement.execute()方法调用不会返回。 top命令显示不超过800%的CPU使用率(16个核心 – 其中一半在峰值使用)。 我在XMPP服务器机器上检查了/ var / log / messages和/ var / log中的其他一些地方,没有提供任何线索。 我也尝试了另一个JDBC连接器,另一个MySQL服务器,更新了JRE,没有改进。 我应该在哪里看更进一步? 接下来是什么 ? 谢谢! 编辑:检查一些更多,这是不相关的线程数量抽&推他们的队列查询,也不是查询/秒,也不是一个特定的机器,也不是正在运行的SQL查询types或连接数MySQL的。 我也检查了tcpdump捕获,服务器在几毫秒内回应查询。 剩下的时间…只是客户端不知道如何获取TCP用户空间的结果。 但在所有的testing中,有一个指标保持不变 – 当它同时连接用户(XMPP服务器的用户)30k点时,即出现故障时。

TCP Reno窗口大小下降到0

我正在做一个比较TCP Tahoe和Reno的任务。 每当Tahoe检测到丢包时,Tahoe会将窗口大小降为0,这很明显。 但是,当我绘制Reno的窗口大小时,它有时会快速恢复(如预期的那样,所以窗口大小会降低到当前的阈值),但是有时会将大小降到0,并且启动缓慢。 为什么是这样? 我以为雷诺总是快速恢复?

我应该为数据中心内的路由设置rto_min吗?

我们有一个专门的服务器租用在一个数据中心与Debian 7,内核3.2。 我们使用其中一台服务器作为数据库服务器。 我们的应用程序服务器和数据库服务器之间的networking不是专用于我们的,而是由数据中心的其他客户使用的。 我们时常会认识到这条线上的TCP重传。 我们认为这是由于拥塞或ddos攻击。 我们的提供商试图防止攻击,但当然并不总是成功。 无论如何。 通常,我们的应用程序服务器在20毫秒内从数据库获取结果,因为数据库服务器速度非常快,往返时间(RTT)平均值为0.3毫秒(因此小于1毫秒)。 当一个TCP数据包在这一行中丢失时,重传超时(RTO)将会启动。它由往返时间计算,但至less为200ms。 所以当一个数据包需要重新传输时,我们有220毫秒的时间才能让我们的应用服务器获取数据,这只是因为RTO。 对我来说rto_min = 200ms似乎是在1ms以内rtt链接的高点。 可以像这样使用ip来设置rto_min: ip route change default via 144.76.176.65 dev eth0 rto_min 5ms RTO仍然可以计算,但是由于我们的RTT非常小,可能会降到5毫秒。 我应该考虑这个还是有其他的TCP陷阱我会陷入rto_min设置这么小? rto_min的合理价值是什么?还是最好不要碰它?

用iptables在networking服务器上丢弃ACK FIN,ACK RST,RST数据包

我在Debian 7机器上运行一个web服务器(Apache),在同一台机器上使用iptables。 iptables规则由ConfigServer防火墙(CSF)脚本生成。 在那里托pipe的网站没有问题,但是我在端口80上看到很多丢弃的入站stream量 。 以下是日志摘录(webserver IP:11.22.33.44): Jan 27 15:21:36 [hostname] kernel: [1229124.817624] Firewall: *TCP_IN Blocked* IN=venet0 OUT= MAC= SRC=199.30.24.209 DST=11.22.33.44 LEN=40 TOS=0x00 PREC=0x00 TTL=115 ID=3144 DF PROTO=TCP SPT=36879 DPT=80 WINDOW=510 RES=0x00 ACK FIN URGP=0 Jan 27 15:21:36 [hostname] kernel: [1229124.872795] Firewall: *TCP_IN Blocked* IN=venet0 OUT= MAC= SRC=199.30.24.209 DST=11.22.33.44 LEN=40 TOS=0x00 PREC=0x00 TTL=115 ID=3183 DF […]