Articles of tcp

tcp状态TIME_WAIT和HTTP保持关系

HTTP请求上的keep-alive和TIME_WAIT中的一个tcp套接字之间的关系是什么? 此外,如果系统和Web服务器设置是alignment的,例如server.max-keep-alive-idle = 60 ? 根据如何减lessTIME_WAIT中的套接字数量? 在Linux中,TIME_WAIT状态在60秒内硬编码(至less对于Linux的Ubuntu / Debain值)。 在lighttpd中,默认值server.max-keep-alive-idle = 5 ,对于高负载他们build议更低。 如果tcp套接字可用,在5秒后closures一个http请求似乎是一种浪费 – 当然假设net.ipv4.tcp_tw_reuse = 1的设置完成了它所说的话。 这个相关的问题 – tcp如何保持连接活着? [closures]涉及到这个问题,但并没有完全回答我。

Windows中build立的连接的TCP超时

我有以下情况: 在客户端计算机上的应用程序(Firebird DB客户端)在端口3050上打开到服务器的TCP连接 客户端应用程序崩溃,应用程序终止 服务器上的netstat仍然显示端口3050上的TCP连接ESTABLISHED到客户端的IP地址。 closures客户端 服务器上的netstat仍然显示端口3050上的TCP连接ESTABLISHED到客户端的IP地址。 等了几分钟 服务器上的netstat仍然显示端口3050上的TCP连接ESTABLISHED到客户端的IP地址。 Windows下build立的连接是否有超时(本例中为Win8.1)? 我可以改变这个超时吗? 我发现这一点 ,但这似乎并没有回答我build立连接的问题。

在发送SYN之后,NAT是否validation收到的SYN的源端口?

我不确定这个问题是否更适合于stackoverflow或serverfault。 如果你认为它更适合于stackoverflow,让我知道,我会删除这个并移动它。 我有一个STUNT实现。 如果您不知道STUNT是什么,那么这是一个协议,用于在两个单独的NAT之间build立直接的TCP连接。 我将简要介绍一下,尽pipe我的问题并不直接涉及到协议。 这是通过使用第三方来预测每个对等体的NAT将映射其下一个出局连接的端口。 第三方然后告诉每个同行对方的预测端口,他们都试图在预测的端口上彼此连接。 当它们相互发送SYN数据包时,它会在该端口的NAT中打开一个“空洞”,从而允许SYN数据包通过和握手进行。 我的一位同事build议让对方启动STUNT连接,试图将SYN数据包发送到预测的端口以及接下来的四个端口,以防止其他应用程序(甚至是我们的应用程序)使用预测的端口连接尝试,但在预测之后。 一个例子就是预测另一个端口将从端口80连接到我们,但是另一个应用程序最终使用端口80,所以连接实际上来自端口81。 但是向五个不同的端口发射SYN数据包,如果它来自80,81,82,83或84,我们将(理论上)成功。 但是,情况并非如此; 经过testing,只有第一个SYN包有成功的机会。 即使第一个SYN数据包被发送到错误的端口,但是接下来的四个数据包中的一个被发送到正确的端口,它们都被悄悄丢弃了。 没有任何反应,连接尝试只是超时。 一个简单的例子: 对等体A正在发起到对等体B的STUNT连接。 对等体A预计从端口1000连接到对等体B. 对等体B预计从端口2000连接到对等体A. 服务器发送1000到对等B和2000到对等A. Peer B的计算机上的另一个应用程序build立一个新的连接,接pipe端口2000。 Peer A的计算机上的另一个应用程序创build一个新的连接,接pipe端口1000。 对等端A同时尝试连接端口2000,2001,2002,2003和2004的端口B; 连接尝试来自端口1001,1002,1003,1004和1005。 对等体B尝试连接到端口1000上的对等体B; 连接尝试来自端口2001。 Peer A和Peer B的NAT在端口1001和2001分别创build一个空洞; 它应该允许SYN数据包通过。 我相信发生的事情是,Peer B的NAT不允许Peer A的SYN数据包通过端口2001,因为它期望连接来自1000,但它来自1002.这表明NAT正在validationSYN数据包。 然而,从我读到的,STUNT的一个缺陷是,当创build连接时,存在一个漏洞窗口,连接可能被另一个源劫持。 如果这是NAT的标准行为来validation传入连接的来源,那么我不明白这个漏洞窗口是如何存在的。 请注意,我的实现并非有缺陷。 如果其中任一个预测的端口是正确的,则连接将成功; 当两个预测的端口都是错误的,并且尝试同时尝试多个端口时,问题就会发生。 作为对协议熟悉的人的一个注意事项,我使用的方法涉及发送一个SYN,我希望在尝试实际连接之前默默地进行。 我没有使用低TTL的实现。 我的NAT是否拒绝SYN数据包,因为它们不是来自预期的端口,还是拒绝它的其他东西? 如果这是我的NAT,这是预期的/标准的行为? 请注意,被拒绝的意思是“无声地丢弃”,因为没有RST或任何响应正在返回,连接只是超时。 编辑:有问题的路由器都是你在沃尔玛家买的那种,而不是那种大的企业会使用的。

OSI模型中的端口敲击和TCP / IP

我已经读到由于TCP / IP的优化技术,端口可能会被误报(II类错误)。 由客户端给出的正确的端口敲击可能被服务器读取为不正确的。 这是否可以通过仅使用UDP和/或ICMP端口来避免,如果可以的话,端口敲入守护进程会打开未提及的TCP端口? 还是UDP和ICMP容易受到类似的数据包混合?

debian tcp – 针对丢包的客户端进行优化

我有一个带宽为100 Mbps的debian服务器。 我的客户大多使用3Gnetworking连接,平均持续时间为3千万。 它们中的很多很less有数据包丢失,但是每次数据包丢失时,tcp链路会在所有事情恢复正常之前停顿30秒或更长时间。 服务器使用大约5%的CPU,内存和带宽。 我已经列出了debian的选项列表和调整tcp堆栈: http : //www.linuxinsight.com/proc_sys_net_ipv4.html 我想知道哪个参数将允许服务器或客户端丢失数据包丢失较less的时间。 任何想法 ?

性能testing和TCP调优

我们正在进行性能testing,接收tcp请求的应用程序将其转换为其他服务工作的soap请求(WCF-httpBinding)。 服务器是Windows Server 2008 R2。 TCP请求由TcpListener实例(.NET C#)接收。 有三个http绑定的WCF服务在同一台服务器上运行。 我们已经构build了一个性能testing客户端,其目的是模拟多个并发请求(每个请求必须是不同的,应用程序可识别的)。 我们build立了一个运行150个请求的testing(通过150个不同的线程),我们立即注意到一些请求缓慢地获得了TCP连接,但是一旦它们获得了,它们的行为就会很快。 一个请求在相同的连接请求和应用程序确认中写入两次。 虽然单个请求+确认可能需要大约150ms,但是150个testing需要大约7秒。 问题 当我们尝试从两台不同的电脑上运行这个testing时,我们会失去请求 。 有些客户请求正在获取 no connection was made because the target machine actively refused it 所以我来到这里,并确信是因为积压。 我改变了TcpListener参数,并做了registryAFD积压更改写在这里,但它仍然没有工作,所以我插入了所有的TCP调优build议加上一些netsh命令,这是build议,但仍然没有改变,我们仍然得到这个错误。 还有什么我需要知道的吗? 还有其他解决scheme吗?

带宽*延迟产品

我试图计算各种主机之间的带宽延迟产品,并阅读这篇wiki文章 ,我很困惑。 从动作 住宅ADSL2 +:20 Mbit / s(从DSLAM到住宅调制解调器),50 ms RTT B×D = 20×106b / s×50×10-3s = 106b,或者1Mb或125kB。 我正在testing的一个连接到testing主机,是ADSL2 +连接。 它具有“11006 kbps”的下行同步速率,我估计10000Kbps是一个合理的理论最大吞吐量。 当从ADSL2 +线路“ping”testing主机时,我得到29ms的RTT。 testing主机通过100Mbps以太网连接连接到“Internet”。 现在,这是令人困惑的部分 。 对服务器进行速度testing(正在运行一个speedtest.net的迷你速度testing应用程序的副本),我得到9.23Mbps的下游。 根据那篇Wiki文章,10000000bps * 0.029s = 290000bps(290 Kbps),这远远低于我的9.23Mbps。 我错过了一些显而易见的东西,还是文章错了?

我可以在一台机器上testing广播数据包吗?

我想有一台服务器在同一台机器上发送广播UDP数据包和其他两个客户端,接收它们。 我能做些什么吗? 我会使用什么IP地址? @gravyface给了我希望,但我试过: 服务器发送到127.255.255.255:54321和客户端收听0.0.0.0:54321。 服务器发送到127.255.255.255:54321和客户端收听127.0.0.1:54321。 服务器发送到127.255.255.255:54321和客户端收听127.255.255.255:54321。 他们没有工作! 🙁 OBS:我正在使用REUSE_ADDR和SO_BROADCAST选项。

很多TCP:在CentOS 6中等待桶表溢出

我们从dmesg获得以下输出: __ratelimit: 33491 callbacks suppressed TCP: time wait bucket table overflow TCP: time wait bucket table overflow TCP: time wait bucket table overflow TCP: time wait bucket table overflow TCP: time wait bucket table overflow TCP: time wait bucket table overflow TCP: time wait bucket table overflow TCP: time wait bucket table overflow TCP: time […]

如何判断打开TCP连接的进程(在Linux上)是否设置了TCP_NODELAY标志

我有一个应用程序,我正在testing/debugging我想知道它的开放的连接有TCP_NODELAY设置。 有没有办法做到这一点,例如使用netstat来查看打开的连接的细节? 像strace或系统是我的最佳select?