从Ilya Grigorik(高性能浏览器networking)的书中可以看出,SYN数据包select的随机序列号在SYN ACK数据包(N + 1)中递增。 最后,在ACK分组中,序列(N + 1)和确认(N + 1)数字都被递增。 当使用Wireshark进行testing时,我得到的ACK数据包的确认号= N + 1,但是序号= N。 这是作者的错误,他说,在ACK数据包中,序列号和确认号都递增了?
一些理论 我已经在tcp TIME-WAIT ( 这里和那里 )读了一些东西,我读到的是一个设置为2 x MSL (最大段寿命)的值,它在“连接表”中保持连接一段时间保证“在你允许创build与同一个元组的连接之前,所有属于该元组以前化身的数据包都将被删除” 。 由于在连接处于TIME-WAIT或不再存在的情况下,收到的段(除了特定情况下的SYN)将被丢弃,为什么不立即closures连接呢? Q1:这是否是因为在TIME-WAIT (即有性能优势)时处理旧连接中的段所涉及的处理较less而处理较less以在同一元组上创build新连接? 如果上面的解释不成立,我看到TIME-WAIT有用的唯一原因是如果一个客户发送一个连接的SYN ,然后它为同一个元组上的旧连接发送剩余的段,在这种情况下,接收者将重新打开连接,但得到坏段,并将不得不终止它。 Q2:这个分析是否正确? 问题3:使用TIME-WAIT还有其他好处吗? 一些实践 我一直在查看我pipe理的生产服务器上的munin图表。 这里是一个: 正如你所看到的, TIME-WAIT与ESTABLISHED有更多的连接,大部分时间是其中的两倍,在有些情况下是四倍。 问题4:这是否对性能有影响? 问题5:如果是这样,是否明智/build议减lessTIME-WAIT值(以及什么)? Q6:这个TIME-WAIT / ESTABLISHED连接的比例是正常的吗? 这可能与恶意连接尝试有关吗?
有没有办法在Ubuntu服务器上启动大于默认的TCP窗口大小? 我看到/proc/sys/net/ipv4/ eg中有一些参数: /proc/sys/net/ipv4/tcp_window_scaling (which is 1) /proc/sys/net/ipv4/tcp_adv_win_scale (2) /proc/sys/net/ipv4/tcp_slow_start_after_idle (1) /proc/sys/net/ipv4/tcp_window_scaling (1)
我有一个HTTP Web服务有时连接设置以一种奇怪的方式失败: 客户端发送一个SYN数据包 服务器发送SYN,ACK回复 客户端使用RST进行响应 在哪种情况下客户端系统可以决定使用RST数据包进行回复? 我可以想象这发生在SYN,ACK包含例如。 不正确的序列号(但这似乎不适用于我的情况 – 序列号看起来不错)。 所以我对一个详尽的:-)列表感兴趣,客户端收到SYN,ACK包后会发送一个RST包。 特别是,客户端应用程序代码(在Linux下使用普通的BSD风格套接字API)是否有可能导致这个RST包, 通过调用close()而三次握手仍在进行?
我们有一些PHP-FPM服务器,当他们需要一个数据库连接时,他们连接到一个HAProxy服务器,它select一个数据库服务器来使用,并打开连接。 当我们然后想要对HAProxy服务器执行一些维护(例如需要HAProxy重启的configuration更改)时,过程如下: 在HAProxy服务器上closuresKeepalived 等待浮动IP转移到备份HAProxy服务器(也运行Keepalived) 等到HAProxy统计报告只有一个连接(我们检查有多less连接) 重新启动HAProxy 重新启动Keepalived 当步骤2发生时,那个时候打开的mysql连接会发生什么? 根据这个TCP会话和IP变化问题 ,连接将被丢弃。 这是真的吗? 如果是这样,可以做些什么来防止这种情况发生? 连接可以以某种方式强制使用服务器的主(非浮动)IP? 我们也有两个运行Keepalived的Nginx服务器的类似设置,我们正在计划进行等效的过程。 如果我们这样做,同样的问题适用 – 当IP移动到另一个服务器时,现有的http连接会发生什么? 我感谢您的帮助。
比方说,我通过SSH从客户端连接到服务器,并在会话中间拉动服务器的networking电缆。 在客户端上,ssh连接保持活动状态约15分钟,之后发生“Broken pipe”消息。 我怎样才能调整这个超时? 在我的情况下,我需要减less它,以便在出现networking问题时提前SSH失败。 我发现了很多关于如何避免在空闲会话上断开连接的信息,或者有更长的连接build立超时,但是没有build立SSH连接本身的超时。 我也知道在TCP层有这样的超时,但是我怀疑SSH使用不同的值来设置套接字,因为TCP的时间通常在1分钟左右,而不是我用SSH观察的15分钟。 客户端和服务器都是Ubuntu 14.04服务器版本。
我如何授予应用程序访问权限以在一个特定的端口上侦听,而不以pipe理员身份运行或禁用UAC? 根据策略,必须从旧服务器(Windows Server 2003)过渡到Windows Server 2012。 此服务器的主要目的是运行第三方应用程序,该应用程序在特定(非标准)端口上侦听并响应请求。 (它必须手动运行,这不是Windows服务。) 在旧服务器上,只要防火墙设置为允许该端口打开,就可以像任何旧用户一样正常运行。 在2012年,即使防火墙configuration为允许,也必须以pipe理员身份运行才能被允许打开端口。 我明白这是出于安全目的的必要(任意用户不应该能够打开服务器上的任意端口,即使他们有login访问权限),但是当我真的需要允许访问时呢? 注意:我不希望应用程序以pipe理员身份运行。 我不想禁用UAC。 我希望所有的安全措施都保持原样,只要允许这个应用程序(它可以有自己的用户帐户)能够打开一个端口并在其上进行监听。 我search了一些有前途的search条件,但只获得了有关Windows Server 2012为自己的服务提供哪些端口的信息。 编辑关于应用程序的更多信息。 它只是用bind()和listen()和accept()使用纯Winsock。 它不使用像HTTPListener这样的任何Windows服务。 那么如何才能find导致套接字在正常用户下运行时无法打开的原因呢?
我知道networking足够危险。 NAT的细节低级细节并不是我特别了解的。 我在今天早些时候偶然发现自己正在讨论关于在NAT网关后面放置一堆节点的问题。 (1个公共IP地址和X个私有LAN地址)。 我调用了TCP协议中源端口和目的端口字段的16位限制( http://www.ietf.org/rfc/rfc793.txt – 第15页),并提到它将限制我们的65,000个连接( 65536)。 – 我对这个答案不再那么自信了。 你能帮我一些细节吗? 我知道我们这边的传入端口(服务器端口)可以接受与sourceIP x SourcePort组合一样多的连接。 让我们暂时打折一下,重点关注源自局域网的连接,穿越NAT网关,随机在一个随机的端口上结束。 在一个正常的[Linux]系统上,我认为传出连接限制为每个源IP 1个端口。 如果我们假装我们生活在一个简单的世界里,每个系统只有一个IP地址,那么一个“正常系统”将被限制在绝对最大的65536个连接。 1)在TCP中是一个单一的来源IP限于65536 MAX的理论输出连接? 2)或者是每个远程主机的实际限制65536个连接? 2) [以另一种方式写]: 同一个源端口是否可以用于不同的remoteHostIP:RemotePort组合? 例如:(以下是否正确?) Source IP |Source Port |Remote IP|Remote Port 192.168.0.20:36500 –> 8.8.8.8:23 192.168.0.20:36500 –> 8.8.4.4:23 3)问题1和问题2的答案对于“非常规系统”(Cisco路由器充当NAT网关)是否有所不同? 例如:一个专门的networking设备,它具有一个面向公众的IP和多达65,000个Lan IP [或更多]。 有没有地方有魔法,或者只是总是回答问题2:是的? (或没有) 4)上述问题都假设一个有状态的TCP连接。 这个故事与UDP这样的无状态连接有什么不同? 最终: 5)我们的局域网是否仅限于通过单个公共IP地址与外部世界同时连接的65536(或其他理论上的限制)? 谢谢! 🙂 对于这个问题,我们背后非常BEEFY和全新的思科Nexus设备(我认为7000系列)。 忽略记忆/等的限制可能会更好,除非它们可以被特别量化。
我试图让一个Memcached服务器响应,就好像我在哪里使用二进制协议。 如果可能的话,只需要命令行回答,任何编程语言都不需要代码。
在Linux服务器上,可以使用netstat -tan | grep ESTABLISHED| wc -l netstat -tan | grep ESTABLISHED| wc -l netstat -tan | grep ESTABLISHED| wc -l但是这对于使用watch -n1的高负载服务器不起作用。 如果服务器不是很忙或者监视间隔足够大的话,这种方法可以正常工作。 但是什么可以推荐作为高负载服务器的替代品?