Articles of tcp

服务器不发送SYN / ACK数据包来响应SYN数据包

使用iptraf,tcpdump和wireshark我可以看到一个SYN数据包进入,但只有ACK FLAG被设置在回复数据包中。 我正在运行内核2.6.36的Debian 5 我closures了window_scaling和tcp_timestamps,tcp_tw_recycle和tcp_tw_reuse: cat /etc/sysctl.conf net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_tw_reuse = 0 net.ipv4.tcp_window_scaling = 0 net.ipv4.tcp_timestamps = 0 我附上了wireshark输出的图像。 View post on imgur.com 输出到netstat netstat -natu | grep '72.23.130.104' tcp 0 0 97.107.134.212:18000 72.23.130.104:42905 SYN_RECV 我一直在尽一切可能find一个解决scheme,还没有找出问题,所以任何帮助/build议非常感谢。 更新1:我已经设置了tcp_syncookies = 0,并且注意到我现在每回复50个SYN请求就有1个SYN + ACK。 尝试连接的主机每秒发送一次SYN请求。 PCAP文件

澄清有关Linux TCP窗口大小和延迟

通过TCP通道发送数据时,我遇到了延迟,我无法理解。 链路是1Gb链路,端到端延迟大约为40ms。 在我目前的设置中,等待时间(从发送者用户空间到接收者用户空间的一条消息的时间)可以达到100ms。 发件人套接字使用TCP_NODELAY选项进行configuration。 发送缓冲区(SO_SNDBUF)被configuration为8MB。 接收缓冲区(SO_RCVBUF)也被configuration为8MB。 TCP窗口缩放被激活。 update-1 :我使用zeromq 3.1.1中间件来传输数据。 套接字configuration,包括TCP_NODELAY标志由中间件执行。 有些选项可以像rx和tx一样发送缓冲区大小而不是TCP_NODELAY。 据我所知,TCP_NODELAY被激活,以确保数据被发送尽可能。 同时,实际的套接字发送和发送消息的决定是在两个独立的线程中执行的。 如果批量中的第一条消息发送时有多条消息可用,则进行正确的批处理。 我用tcpdump从下面的帧中提取了一个捕获。 初始TCP握手后,发送方(172.17.152.124)开始发送数据。 初始窗口大小为接收方为5840字节,发送方为5792字节。 我的问题是,发送者发送两个帧(#6和#7),然后停下来,等待一个确认从接收器回来。 据我所知,接收器的窗口大小没有达到,传输不应停止(384字节未完成,初始接收窗口大小为5840字节)。 我开始认为我没有正确理解TCP是什么。 有人可以帮助澄清? 更新-2 :我的数据有效载荷由一个幻数和一个时间戳组成。 我通过比较有效负载的时间戳和tcpdump的时间戳,隔离了延迟的数据包。 帧#9的有效载荷ts非常接近帧#6和#7,并且明显小于帧#8中接收到的应答的时间戳。 update-1 :帧#9不立即发送的事实可以通过TCP通道的慢启动来解释。 事实上,一旦连接运行了几分钟,问题也会出现,所以慢启动似乎不是一般的解释。 20:53:26.017415 IP 172.17.60.9.39943> 172.17.152.124.56001:标志[S],seq 2473022771,win 5840,选项[mss 1460,sackOK,TS val 4219180820 ecr 0,nop,wscale 8],长度为0 20:53:26.017423 IP 172.17.152.124.56001> 172.17.60.9.39943:Flags [S.],seq 2948065596,ack 2473022772,win 5792,options [mss 1460,sackOK,TS val 186598852 ecr 219180820,nop,wscale […]

跑出tcp udp端口

如何解决在单个服务器上运行tcp / udp端口的Windows或Linux系统? 由于SQL连接,用户连接到互联网以及作为网关的作用,我在单个服务器上使用了大约65000个tcp / udp端口。

有没有办法看到什么是实际过滤TCP端口通信?

nmap -p 7000-7020 10.1.1.1 将输出所有过滤的端口 Starting Nmap 6.40 ( http://nmap.org ) at 2015-03-04 12:18 EET Nmap scan report for 10.1.1.1 Host is up (0.00091s latency). PORT STATE SERVICE 7000/tcp filtered afs3-fileserver 7001/tcp filtered afs3-callback 7002/tcp filtered afs3-prserver 7003/tcp filtered afs3-vlserver 7004/tcp filtered afs3-kaserver 7005/tcp filtered afs3-volser 7006/tcp filtered afs3-errors 7007/tcp filtered afs3-bos 7008/tcp filtered afs3-update […]

TCP转储,不能理解这4行?

我需要支持理解这4条线。 看起来像tcp转储,但我真的不明白到底发生了什么。 13:13:22.407445 IP 192.168.246.128.54955 > 192.168.246.13.80: S 2910497703:2910497703(0) win 5840 <mss 1460,sackok,timestamp="" 518611="" 0,nop,wscale="" 6=""> 13:13:22.407560 IP 192.168.246.13.80 > 192.168.246.128.54955: S 3762608065:3762608065(0) ack 2910497704 win 64240 <mss 1460,nop,wscale="" 0,nop,nop,timestamp="" 0="" 0,nop,nop,sackok=""> 13:13:22.407963 IP 192.168.246.128.54955 > 192.168.246.13.80: . ack 1 win 92 <nop,nop,timestamp 518611="" 0=""> 13:13:22.408321 IP 192.168.246.128.54955 > 192.168.246.13.80: R 1:1(0) ack 1 win […]

在最新版本的Linux中,TCP延迟更高

在我的研究小组中,我们最近将我们的机器上的操作系统从Red Hat 6.2升级到了Debian 8.3,并且观察到我们机器之间通过集成的Intel 1G NIC的TCP往返时间从110μs增加到220μs。 起初,我认为这是一个configuration问题,所以我将所有的sysctlconfiguration(例如tcp_low_latency=1 )从未升级的Red Hat机器复制到Debian机器,并没有解决问题。 接下来,我认为这可能是一个Linux分发问题,并在机器上安装了Red Hat 7.2,但往返时间保持在220μs左右。 最后,我认为可能是Linux内核版本问题,因为Debian 8.3和Red Hat 7.2都使用内核3.x,而Red Hat 6.2使用内核2.6。 所以为了testing这个,我安装了Debian 6.0 Linux内核2.6和宾果! 时间又在110微秒。 其他人也在最新版本的Linux中经历了这些更高的延迟,并且有已知的解决方法吗? 最小工作示例 下面是一个C ++应用程序,可用于基准延迟。 它通过发送消息,等待响应,然后发送下一个消息来测量延迟。 它用100字节的消息完成了这个100,000次。 因此,我们可以将客户的执行时间除以100,000来获得往返延迟。 要使用这个首先编译程序: g++ -o socketpingpong -O3 -std=c++0x Server.cpp 接下来在主机上运行应用程序的服务器端版本(比如192.168.0.101)。 我们指定IP以确保我们在一个知名的界面上托pipe。 socketpingpong 192.168.0.101 然后使用Unix工具time来测量客户端的执行时间。 time socketpingpong 192.168.0.101 client 在两个具有相同硬件的Debian 8.3主机之间运行这个实验会得出以下结果。 real 0m22.743s user 0m0.124s sys 0m1.992s Debian 6.0的结果是 […]

为什么我的Web服务器在高负载下丢失TCP重置连接?

我有一个小的VPS设置与Nginx。 我想尽可能地挤出更多的性能,所以我一直在尝试优化和负载testing。 我使用Blitz.io通过获取一个小的静态文本文件进行负载testing,并运行到一个奇怪的问题,其中服务器似乎发送TCP重置,一旦同时连接的数量达到大约2000.我知道这是一个非常数量巨大,但是从使用htop服务器的CPU时间和内存还是有很多余地的,所以我想弄清楚这个问题的来源,看看能不能更进一步。 我在2GB的Linode VPS上运行Ubuntu 14.04 LTS(64位)。 我没有足够的声望直接发布此图表,因此这里是Blitz.io图表的链接: 以下是我已经做的尝试,找出问题的根源: nginxconfiguration值worker_rlimit_nofile被设置为8192 对于root和www-data用户(在nginx中运行的),在/etc/security/limits.conf中将nofile设置为64000 没有任何迹象表明/var/log/nginx.d/error.log有任何错误(通常,如果你正在运行文件描述符限制,nginx将打印错误消息这样说) 我有ufw设置,但没有速度限制规则。 ufw日志表明什么都没有被阻止,我已经尝试禁用ufw与相同的结果。 /var/log/kern.log中没有指示性错误 /var/log/syslog中没有指示性错误 我已经将以下值添加到/etc/sysctl.conf ,并将它们与sysctl -p一起加载,但没有任何效果: net.ipv4.tcp_max_syn_backlog = 1024 net.core.somaxconn = 1024 net.core.netdev_max_backlog = 2000 有任何想法吗? 编辑:我做了一个新的testing,斜坡到一个非常小的文件(只有3个字节)的3000个连接。 这里是Blitz.io图: 再次,根据闪电战所有这些错误是“TCP连接重置”错误。 这是Linode带宽图。 请记住,这是一个5分钟的平均值,所以低通滤波了一下(瞬时带宽可能要高得多),但仍然没有什么: 中央处理器: I / O: 接近testing结束时的htop : 我还捕获了一些使用tcpdump在一个不同的(但类似的)testing的stream量,开始捕获时,错误开始进入: sudo tcpdump -nSi eth0 -w /tmp/loadtest.pcap -s0 port 80 如果有人想看看这个文件(〜20MB),请点击这里: https : //drive.google.com/file/d/0B1NXWZBKQN6ETmg2SEFOZUsxV28/view ?usp […]

tcpdump:snaplen设置为0,但仍然得到“数据包大小限制在捕获”?

由于这个问题,我要在MySQL服务器后端嗅探一些数据包,看看会发生什么: # tcpdump -vv -s0 -c 100 -i bond0 tcp port 3306 and host 192.168.3.87 -w /home/quanta/3.87_aborted.pcap 正如你所看到的,我把snaplen设置为0,但仍然得到“捕获期间数据包大小有限”的消息: MySQL Protocol Packet Length: 579 Packet Number: 96 text: 336 text: 1004352 text: 147619 text: 336 [Packet size limited during capture: MySQL truncated] 我的界面上的卸载设置: # ethtool -k bond0 Offload parameters for bond0: Cannot get device rx csum […]

清漆用尽了开放的端口,大量的SYN_SENT连接

最近我们遇到了Varnish(3x) – > Apache(3x)安装的问题,导致SYN_SENT连接数量猛增。 这个峰值本身是由于新的stream量触及网站(而不是任何types的DDOS),而且似乎我们的Varnish机器在将stream量转发到后端服务器时出现问题(Apachestream量下降与清漆上的尖峰相关),拥塞SYN_SENT的可用端口池。 保持活动在Apache(15s)上启用。 哪一方是错的? stream量很大,但是不应该导致这样的设置(3x Varnish前端机器,3x后端Apache服务器)停顿。 请帮忙。 Munin截图通过防火墙连接在这里 。 varnish〜 ~$ netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c 9 CLOSE_WAIT 12 CLOSING 718 ESTABLISHED 39 FIN_WAIT1 1714 FIN_WAIT2 76 LAST_ACK 12 LISTEN 256 SYN_RECV 6124 TIME_WAIT /etc/sysctl.conf(Varnish) net.ipv4.netfilter.ip_conntrack_max = 262144 net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60 net.ipv4.ip_local_port_range = 1024 65536 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 […]

修复Linux TCP的窗口缩放问题

我试图提高海外的服务器之一的吞吐量,并监测服务器和我的家用电脑之间的传输wireshark后,我敢肯定,我有一个窗口大小的问题。 对于ftp传输,我得到一个14720的接收窗口大小。 Window size value: 115 Calculated window size: 14720 Window size scaling factor: 128 我的发送窗口看起来像我所设置的: Window size value: 65335 Calculated window size: 261340 Window size scaling factor: 4 那么我该如何解决这个问题? 我已经通过我的服务器上的Linux tcp设置,一切似乎正常。 时间戳打开,同步closures,缩放打开,麻袋打开,立方体是拥塞控制方法,最大接收和发送窗口大小为3mb。 我试过改变默认的tcp_wmem和tcp_rmem值,但是它什么都不做。 编辑: 当我在服务器上closures自动调整和/或窗口缩放时,窗口缩小到14600,这基本上是MSS的10倍。 5337 4.268584 2.2.2.2 1.1.1.1 FTP 106 Response: 227 Entering Passive Mode (2,2,2,2,240,15). 5338 4.268640 1.1.1.1 2.2.2.2 TCP 74 59855 […]