在下面的netstat输出中bad segments received坏的部分是什么构成了一个坏的部分? 我会认为一个TCP头的校验和可以做到这一点,但还有其他的东西吗? 如果段超时后到达? 或者如果重复的部分到达? $ netstat -s <snip…> Tcp: 183975 active connections openings 110830 passive connection openings 5140 failed connection attempts 2649 connection resets received 19 connections established 18272496 segments received 18712556 segments send out 25163 segments retransmited 824 bad segments received. 9557 resets sent <snip…>
在WireShark中观察以下场景: 我在这里看到的问题是,在从服务器(4090)接收到[FIN, ACK]并确认(4092)之后,http客户端尝试发送另一个HTTP请求,而不是立即closures(并且可能重新build立)TCP连接。 它看起来像[FIN, ACK]被HTTP客户端简单地忽略。 根据RFC 7230(6.3),HTTP协议使用Connection头指定了它的持久连接pipe理机制。 它工作得很好,因为它支持客户端和服务器。 但是HTTP通常运行在TCP之上。 TCP连接pipe理对协议不在意,可以独立于HTTP使用。 但是,HTTP客户端不支持处理这个(可能不应该,它应该在套接字级支持)。 但是服务器确实利用它,因为它允许在不发送额外的HTTP请求的情况下正常closures连接。 例如,当连接超时或configuration重载时,nginx发送FIN包。 注意当HTTP客户端从服务器接收到RST ,会closures连接。 它似乎是在套接字级别上完成的,因为在HTTP客户端的源代码中找不到与此相关的任何内容。 我对情况的理解是否正确? 客户端忽略FIN消息,而服务器使用它,似乎是完全错误的。 为什么RST在套接字级别上处理,但是FIN不是? HTTP客户端应该如何处理TCP连接closures有什么RFC /其他标准? 是nginx做非标准的事情还是HTTP客户端不遵循标准? PS我可以在Python 2/3中使用HTTP客户端,用C编写的Java和httperf实用程序来重现它。所以我认为HTTP客户端忽略FIN消息是很常见的。 我想明白为什么。
我有一个服务器上的客户端请求Web服务behide NAT。 我的客户IP是10.54.10.193 NAT地址:10.54.28.183服务器地址:62.209.39.203 当客户端请求服务器上的Web服务时,我们有TCP前面的段不被捕获为如下图所示: 但在服务器端,一切似乎正常,如下图所示: 当我运行debuggingip nat详细我得到这个错误: *Aug 21 20:52:52.256: NAT*: Can't create new inside entry – forced_punt_flags: 0 *Aug 21 20:52:52.256: NAT*: i: tcp (62.209.39.203, 8083) -> (10.54.10.193, 64652) [30259] *Aug 21 20:52:52.256: NAT*: s=62.209.39.203->10.54.28.183, d=10.54.10.193 [30259] 我的configuration如下: Current configuration : 2873 bytes ! version 12.4 service timestamps debug datetime msec service timestamps […]
我有一台运行CentOS-7的ESXi虚拟机。 我的应用程序被部署在运行在这个服务器上的一个tomcat实例中。 该应用程序每隔15秒定期发送 1200个“ 外发 ”http连接。 我在下面看到两个问题,真的很感激,如果有人可以阐明如何debugging这些: 在1200个传出http连接中,less数(从10到100)间歇性超时。 当这种情况发生时,如果我尝试ping这些目标IP地址,那么即使ping失败,错误“无效的参数”。 但经过一段时间之后,它会再次开始工作。 对于不同的IP端点,这种情况一直在发生。 有1000个并行连接,效果很好。 所以我想我可能会碰到一些内核限制。 我观察到在任何特定情况下的TIME_WAIT连接,它们仍然在5000左右。 运行此设置几个小时后,5-10小时,突然CPU突然达到100%,并保持这种状态,直到我重新启动虚拟机。 发生这种情况时,虚拟机完全没有响应,即我不能ssh进入它,也不能使用vmware控制台连接到它。 重新启动后,我检查了/ var / log / messages,但是从这个问题出现的时间点来看没有进入。 请让我知道,如果有人对可能发生的事情有一些粗略的想法,我该如何debugging。 只是为了澄清 – 我不是一个全职的系统pipe理员。 我是一个软件开发人员,需要调整这个虚拟机来获得一些可伸缩性数字:) 谢谢M
在使用Microsoft Lync Client(Mac OS X)进行应用程序共享期间,带有RST标志的TCP ACK从应用程序端发送到针对TCP零窗口数据包的Lync端,并且调用被取消。 图像链接。 供参考: My Application End: 172.16.6.106:55848 Lync End (Remote): 172.16.14.58:18627 Environment: My Application End: Centos/Linux Lync End: Mac OSX Shared Over Wifi.
对于Linux内核2.6.32,如果我设置net.ipv4.tcp_syncookies = 1将始终使用或仅在SYN洪水攻击期间? 我发现有两个来源说相反。 1: “但是,在使用SYN cookie时,有两个警告会起作用:首先,服务器仅限于8个唯一的MSS值,因为这些都可以用3位编码;其次,服务器必须拒绝所有TCP选项(例如大窗口或时间戳),因为服务器会丢弃将以其他方式存储信息的SYN队列条目。 虽然这些限制必然导致次优的体验,但是它们的效果却很less被客户注意到,因为它们只有在受到攻击时才被使用。 在这种情况下,为保存连接而丢失TCP选项通常被认为是合理的妥协。“ 2: “缺点是并不是所有的TCP数据都可以放入32位的序列号字段,因此高性能所需的某些TCP选项可能会被禁用。” 这意味着,即使您的服务器当前没有受到攻击,如果启用SYN Cookie,select性应答和TCP窗口缩放等选项也将不起作用。
我们的环境是EC2上的Ubuntu 12.04。 我知道TIME_WAIT是一件好事,我知道一般情况下,根据我所做的所有阅读,可以在TIME_WAIT中保持连接长达2分钟。 然而,我们有一些在TIME_WAIT有很多连接的实例已经在这个状态中保持了24个多小时,而另一方却没有相应的连接。 现在,我意识到我可以重新启动networking甚至是整个实例来closures这些连接,但是我更加好奇这里的机制,以及为什么这些连接在“2 *最小段间隔”内没有closures我听说过。 谢谢!
在apache中超时指令的文档指出: 向客户端写入数据时,如果发送缓冲区已满,则等待数据包确认的时间长度。 但是如果TCP栈没有收到ACK,它将重新发送数据包。 那么这两件事如何相互作用呢? 在中止连接之前,apache超时是否设置了重试的总体限制? 上下文是一个curl拉的周期性失败,错误的情况: curl:(18)传输closuresXXXXXX剩余的字节读取 我试图确定确切的原因。 在客户端和服务器端都使用Wireshark跟踪,似乎服务器(apache)由于某种原因提前终止会话(所以不是防火墙或其他的强制closures会话)。 这是经常下载的两种types的文件:大二进制文件(100MB mb)和小文本文件(~10kb)。 对于大文件有一个Apache日志消息: 指定的超时已过期:[client:] AH01581:向客户端写入URI / xxxx / xxxx / xxxx /的数据时超时 我目前最好的猜测是,这只是networking拥塞,因为在某些时候,失败往往会聚集在一起,但是如果可能的话,我想尽可能地把它们放在一起。 组态: CentOS 6.6 Apache 2.4.16 curl7.19.7
可以iptables日志tcp分裂握手和同时开放连接以及tcp三方握手? 这是两种types的TCP连接描述。 在这里我find了如何在特定端口上logging新的tcp连接,是否也将这些连接logging到tcp连接?
我试图设置iptables导致docker容器之间的现实networking故障。 在服务器上,我运行netcat -lk 1234和一个Erlang牛仔服务器。 在客户端上运行客户端: echo blah | netcat myserver 1234 curl myserver/xyz 最初,这些工作正常,有客户端 – 服务器通信的证据。 接下来,我在客户端的OUTPUT上引入iptables DROP规则。 iptables -A OUTPUT -j DROP echo blah | netcat myserver 1234 curl myserver/xyz netcat和curl通信都没有通过, 直到我删除了DROP规则,在这一点上他们无缝地恢复! 最后,我重复上述,但在删除DROP规则之前,我ctrl-c客户端可执行文件。 删除DROP规则后,我发现服务器没有收到客户请求。 我的结论是netat / curl客户端必须试图无限期地重新传输? 我不应该最终期望失败吗? 顺便说一句,同样的事情发生在与其他客户,例如。 Erlang http / websocket_client。