Articles of tcp

TCP客户端不发送ACK

我有一个基于python的HTTP客户端和服务器。 最近在发布数据时,我在客户端看到了几个超时。 我在两端运行了一个Tcpdump,并发现客户端在TCP握手中用ACK进行了回复。我看到客户端只发送了S标志,而服务器正在发送S.标志。 任何想法为什么会发生或如何排除故障?

在使用TCP / UDPstream代理模块的NGINX反向代理之后使用OpenVPN

我已经使用NGINX作为我的主域的反向代理了一年多了。 该代理驻留在AWS EC2实例中,并将stream量发送到我的家庭IP地址,并伪装所有丑陋的端口组合。 尽pipe我从来没有设法让我的OpenVPN服务器与NGINX一起工作。 当我尝试通过我的域名连接到BEHIND NGINX的服务器时,它超时并说: TCP: connect to [AF_INET]777:777:777:777:8050 failed, will try again in 5 seconds: Connection timed out 其中777.777.777.777是我的反向代理的IP地址,而不是我的家庭IP地址,它是888.888.888.888 。 在我的configuration文件中,哪个NGINX应该将代理数据stream式传输到这个块所定义的: stream { upstream tcp_backend { server 777.777.777.777:8050; } upstream udp_backend { server 777.777.777.777:8051; } server { proxy_connect_timeout 300s; proxy_timeout 300s; listen 8050; proxy_pass tcp_backend; } server { proxy_connect_timeout 300s; proxy_timeout 300s; listen […]

Linux和Windows之间的TCP连接下降

我们在Linux上使用nginx的ubuntu进行负载均衡,ssl终止等一些function。 在后端我们发送stream量到Windows Server 2012 R2 IIS Web服务器。 我们的服务器运行在vmware esxi 6.0U2上,我们得到了很多IIS坏的网关504错误,而我们的网站得到用户超时错误,所以我们试图find问题,通过检查防火墙,2(堆叠)cisco switch 2960,和其他东西。 没有防火墙,我们正在写一个nodejs应用程序来发送tcp数据包,所以我们发送了10000个tcp连接,这个结果之间: Windows-> Windows =确定, Linux的Ubuntu – > Linux的Ubuntu的=好的, Windows – > Linux =好的, Linux – > Windows =我们得到了ECONNREFUSED和ETIMEDOUT和ECONNRESET错误,也OK 我们在VMWare和linux环境中改变了LRO和GRO,但是问题仍然没有解决。 这里是我们的nodejs代码发送: 这是服务器端: var http = require('http'); var port = process.argv [2]; var counter = 0; var server = http.createServer(function(request,response){ 计数器++; console.log(`服务$ {counter}`); response.writeHead(200,{“Content-Type”:“text / […]

与TCP的应用程序超时奇迹的情况

我得到随机案例wbere应用程序进入超时,因为它没有收到服务器(HTTP服务)的响应。 我用wiresharklogging了这两个案例,我怀疑早期的“FIN,ACK”是怪罪吗? 请看看这个。 秒内正常stream量: A->B SYN B->A SYN, ACK A->B ACK A->B PSH, ACK B->A ACK B->A PSH, ACK B->A PSH, ACK B->A FIN, ACK A->B ACK A->B ACK A->B ACK A->B FIN, ACK B->A FIN wiresharkstream量 超时stream程延迟: A->B SYN B->A SYN, ACK A->B ACK A->B PSH, ACK B->A ACK B->A PSH, ACK A->B ACK […]

SSH通过OpenVPN连接时超时

我已经在路由模式下设置了OpenVPN服务器。 当我尝试通过SSH连接到我的VPN服务器时,它挂在: ssh -i .ssh/mpolitaev_mba [email protected] -vvv OpenSSH_7.4p1, LibreSSL 2.5.0 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 20: Applying options for * debug1: /etc/ssh/ssh_config line 97: Deprecated option "useroaming" debug1: /etc/ssh/ssh_config line 105: Applying options for * debug2: resolving "192.168.200.1" port 22 debug2: ssh_connect_direct: needpriv 0 debug1: Connecting to 192.168.200.1 [192.168.200.1] port 22. debug1: […]

nfcapd是否将双向stream隐式转换为单向stream?

我有一些IPFIX格式的双向stream。 根据规格表, IPFIX是双向的,因为它有“from_bytes”和“to_bytes”。 我使用这种包格式运行nfcapd : ./nfcapd -E -p <listening port> -l /home/output_directory/ 我有-E标志有-E地看到输出:它输出一堆这样的logging: Flow Record: Flags = 0x00 FLOW, Unsampled export sysid = 36 size = 56 first = 1503985032 [time stamp] last = 1503985033 [time stamp] msec_first = 682 msec_last = 736 src addr = 10.107.127.34 dst addr = 10.0.3.162 src port = 21015 […]

如果没有运行指定的iperf服务器而运行iperf,会发生什么情况?

我偶尔会在networking上运行iperf ,只有-c指向接口IP地址,但没有任何服务器在任何地方运行。 当我运行这个时发生了什么? 我可以看到networking带宽增加到指定的值,但我不知道TCP是如何工作的,当没有服务器实际拿起数据包并启动TCP会话。

TCP源端口增加2,即使curl / wget也是如此

当使用curl和wget时,如果没有手动设置源端口(如curl中的–local-port),则源TCP端口将始终为偶数,并将递增2而不是1。 EG:在tcpdump中,当我build立连接时,我看到使用的源端口45080,然后下一个连接将使用45082,而不是45801.使用本地端口我可以强制它使用奇数端口,并确认tcpdump成功使用。 这是在networkingtesting床上引起我的问​​题,我不能在我的生活中找出什么是控制隐式的TCP端口select。 我可以改变范围,但我不能改变“增量”。 使用centos7和“3.10.0-514.el7.x86_64”内核。 在tcpdump中,我看到了使用wget和curl的相同行为,这导致我相信这不是一个curl特定的问题,而是正在用于select端口的机制。 另外,如果我看到使用端口45080curl,例如,我知道下一个端口将使用45082.如果我强制50000的本地端口,然后再curl没有 – 本地端口,它将是45082,就像一个单独的计数器递增它,不受任何“最后”使用的端口是什么影响。 或者,如果做同样的事情,而不是强制端口50000,而不是强制端口50000,我强迫它使用45082,它的端口,它可以挑选,然后我再次使用curl,而不强迫本地端口,它会select45083 ,那么如果再次select45084,那么45086 … 如果我将范围限制到奇数个端口,唯一的方法是自然地select一个奇数。 是否有一个系统调用,或者某种内核操作来拾取源端口,有没有办法改变它? 谢谢!

docker伪装不会一直工作

我们有一个mesos / marathon / docker基础架构,在FrontEnd马拉松服务器和BackEnd马拉松服务器中将应用程序划分,所有服务器都由防火墙和vlan隔开。 为了让这两台服务器通信,我们使用了marathon-lb(docker app)。 这意味着(至less对我们来说),除了马拉松磅应用程序本身 – 在“主机”模式下使用networking – 所有其他docker应用程序正在使用networking“桥”模式( docker0接口)与互联网交谈,并且dockerd autocreate所有需要的iptable规则为了与世界交谈。 现在,这一切似乎工作, 无论如何,我们的防火墙正在logging, 有时我们的docker应用程序尝试使用docker应用程序的内部IP与其他物理服务器(例如,MySQL /结构,但也前端 – >后端mesos服务器)沟通,而不是使用真实的伪装地址运行docker虚拟机的服务器。 这些都标有“FIN”。 服务器都是Debian Jessie,docker app都是用java编写的, 17.04.0~ce-0~debian-jessie -engine版本是17.04.0~ce-0~debian-jessie 。 当我写了“某个时候”的时候,我的意思是数据包的百分比非常可变(从0到50%), iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER-ISOLATION all — anywhere anywhere ACCEPT all […]

为什么我的IPTables规则不适用于端口445(SMB)?

考虑在192.168.1.1路由器上运行的以下规则(是的,它们是非常规的): iptables -t filter -I INPUT 1 -p tcp –source 192.168.0.0/16 –destination-port "$PORT" –jump ACCEPT iptables -t nat -I INPUT 1 -p tcp –source 192.168.0.0/16 –destination-port "$PORT" –jump SNAT –to-source 192.168.2.1 iptables -t nat -I PREROUTING 1 -p tcp –source 192.168.0.0/16 –destination-port "$PORT" –jump DNAT –to-destination 192.168.1.1 当$PORT 不是 445 (比如444 )时,这些规则工作正常。 当$PORT是445 (SMB),但是,这些规则不起作用。 请注意,我没有在路由器上运行的Samba(或任何其他关心端口445),但是您应该能够从socat在下面没有监听冲突的事实中推断出这一点。 […]