Articles of tcp

TCP RST之前收到的数据是否有定义的行为?

Zebra内部打印服务器在ZE500等新型标签打印机上的devise存在问题。 在本说明中,打印服务器是Zebra的打印机以太网接口术语。 我们发现打印机并不总是打印所有要求的标签。 问题是当内部打印服务器收到TCP RST数据包时将转储其缓冲区。 他们的外部打印服务器没有这种行为。 这是情况。 打印服务器基本上是一个以太网到并行转换器。 内部卡连接到并行端口的内部接口。 当数据被发送到打印服务器时,将其caching,然后将其传送到打印机的内存缓冲区。 打印机缓冲区满时,打印服务器将继续接收数据,直到其缓冲区也已满。 此时发送者被告知接收者处于零窗口状态。 发件人完成打印作业时出现问题。 它将一个FIN数据包发送到打印服务器。 打印服务器发送一个带有ZeroWindow的ACK作为响应。 如果打印服务器缓冲区中没有数据,或者此后不久,打印服务器将发送自己的FIN数据包给发件人。 但是,如果数据保留在缓冲区中,发送方将最终发送RST数据包,从而导致连接中断。 这是正常的,但较新的内部打印服务器将重置缓冲区,从而丢失没有进入打印机的任何标签。 外部打印服务器和原始内部模型不。 在这些情况下打印所有的标签。 Zebra表示,新的行为是基于TCP标准的正确行为。 我的问题是,在TCP RST之前接收的数据会发生什么样的定义行为? 对于应用程序背景,操作是客户将X个单独的标签发送到打印机以运行X托盘。 每个托盘都有一些独特的信息,例如当前计数。 托盘可能需要30秒或更长的时间到达打印机,所以当发送者发送打印作业的最后一个包时,他们有2分钟时间清空以太网卡的缓冲区或丢失最后几个标签。

即使端口打开,也不能连接到PHP TCP / IP服务器?

我有一个活的服务器(Ubuntu 14.04,运行一个LAMP堆栈),这工作正常。 最近,我添加了一个使用PHP代码的TCP / IP服务器。 这是我使用的代码。 请注意,IP地址是一个占位符: <?php error_reporting(E_ALL); /* Allow the script to wait for connections. */ set_time_limit(0); /* Activate the implicit exit dump, so we'll see what we're getting * while messages come. */ ob_implicit_flush(); $address = '123.456.789.123'; $port = 1235; if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { echo "socket_create() failed: […]

在TLS握手期间的TCP重新传输

在我们局域网的TCP握手过程中,我正在有一个严重的延迟。 我没有解释为什么会出现这种情况,总共导致了大约20秒的加载时间。 如果你有任何提示或解释,我会很感激。 你find一个附件的截图。 在这里input图像描述 编辑: 首先,感谢您的build议。 我试图澄清我们的configuration及其组件:当我打开URL到指定的端口,wireshark日志显示目标IP 10.2.4.147,而我试图连接到10.0.0.10 [A],这将redirect到10.0 .1.10 [B](OAuth机制)。 每个服务器都运行一个安装有通配符证书的IIS服务器,中间证书存储在Microsoft本地存储(mmc)中。 注意:tcp重新传输的现象发生在我尝试的每个客户端(以及多个浏览器)上。 因此,10.2.4.147似乎是我们局域网中的networking设备(我还没有在该设备上安装证书,我甚至不知道我们局域网中的哪个服务器(+防火墙?))。 你需要备份configuration文件的IISconfiguration(applicationHost.config等?) 如您所说,是否有可能10.2.4.147服务器validationInternet / LAN中的证书链? 为什么我在wireshark日志中看不到服务器[A]或[B]? 还有什么我可以做/分析? ps:我更新了屏幕截图以查看TCP握手。

Samba性能tcp段的长度读取与写入

只是为了好玩,我试图优化一个旧的桑巴服务器。 这是一个关于debian wheezy的3.6.6的samba 。 它有4个保税千兆以太网端口。 我正在testing不同的客户端。 Linux Debian wheezy Linux Debian sid Windows 8.1 它已经有点优化了。 阅读(重要的事情)似乎只是受到客户networking的限制。 所以我可以读取超过100MB / s。 写在另一方面只有22MB / s(Windows)和32MB / s(Debian wheezy)之间。 服务器磁盘足够快,CPU很无聊,所以我试着看着tcp转储。 在那里,我发现所有机器上的写入和读取之间的区别:TCP段长度(和TCP窗口大小) 当读取每个TCP数据包的有效负载比读取时大得多。 比较客户端似乎是这样的:有效负载越小,写入速度越慢。 我已经调整了在服务器端读写的套接字缓冲区,但我无法更快地写入。 有任何想法吗? 我正在寻找问题的正确方向,还是应该关注其他问题。 我如何影响分段的写作长度? 谢谢

Squid代理TCP_DENIED / 407

我已经configuration我的项目在每个请求上使用代理。 最初,我是在没有任何forms的代理身份validation进行这些外拨电话。 在访问TCP_MISS/200我会看到TCP_MISS/200 ,当我发出一个GET请求时,这对我有意义。 在代理请求上添加基本身份validation后,我注意到日志有两个请求,第一个请求的结果代码是TCP_DENIED/407 ,另一个是TCP_MISS/200 。 从谷歌search我认为这是因为TCP_DENIED提示我的凭据和请求后提供他们? 这是想想这个的正确方法吗?

在TCP健康检查中预期是否是RST,ACK

我一直在遇到一些与我的VPS托pipe服务提供商有关的服务器问题,我一直在收到间歇性的连接错误。 我已经完成了服务器的局域网跟踪,我发现我认为负载均衡器(由主机提供商提供)连接到服务器之间的问题。 在跟踪中,我看到负载均衡器发送SYN,服务器响应SYN ACK,然后负载均衡器发回RST ACK,如下面的代码片段所示 192.168.255.20是负载均衡器,192.168.173.16是服务器。 从我对TCP的理解看,RST数据包跟踪是一件坏事,因为它意味着数据包无法识别,无效的连接,套接字不能打开等,并由于问题而中止连接。 我向我的托pipe服务提供商询问了这一点,他们说它正常,它只是负载平衡器和服务器之间的TCP健康检查的一部分。 这使我感到有点奇怪,我找不到任何具体的TCP健康检查做一些不同于普通的TCP连接的东西,但我认为健康检查就像打开连接到套接字一样简单,然后closures。 我testing了这一点,从我的笔记本电脑到家里的一个linux盒子,然后我看到笔记本电脑发送SYN,接收SYN ACK,笔记本电脑发回ACK。 当我断开连接时,然后从每个设备获得FIN,然后FIN ACKclosures连接。 这是我期望从负载平衡器看到的。 我再次与我的托pipe服务提供商询问,他们回来了以下声明: TCP健康检查中的重要数据包是来自后端节点的“SYN ACK”。 一旦后端节点证实TCP协议启动并且响应“SYN ACK”包,“RST ACK”就简单地丢弃连接。 这是一个健康检查,而不是一个连接,本身。 这是否听起来是正确的,因为我不能看到任何关于特定的TCP健康检查,在这种情况下,RST数据包将预计。 谢谢

Solaris非全局区域中的TCP可调参数

我正在修改Solaris上的exclusive-IP非全局区域中的一些TCP参数。 我已经通过ndd设置参数,如tcp_recv_hiwat, tcp_xmit_hiwat等 我希望这些更改在重新启动时保持不变,但是/ etc / system文件不在非全局区域中。 我可以使用rc.d启动脚本,还是有另一种方法来应用这些设置重新启动区域?

多个连接的聚合吞吐量(Linux)

为什么来自同一主机的多个连接比不同主机的多个连接获得更好的吞吐量? 我怀疑是与内核相关的东西(Linux),但确认会有很大帮助。 更多细节我有一个接收器进程,我们称之为R.它接受传入连接并使用select()接收数据。 我有3个发件人进程S1,S2,S3。 他们连接到R,并以固定的速率发送数据,即每秒200Mbit。 如果S1,S2和S3在同一台机器上,我得到的结果比在不同机器上的每台机器都要好。 (R在这两种情况下在其他一些机器上) 例如:主机2上的host0,S1,S2,S3上的R,R以600Mbit / s的速率接收 主机0上的R,主机1上的S1,主机2上的S2,主机3上的S3,R以480Mbit / s接收 这看起来反直觉对我来说,我期望相反,因为在第二种情况下,发件人不必共享网卡和处理器(不要指望处理器或网卡是瓶颈…) [上面的主机是具有专用全双工千兆位交换机的Linux群集中的节点。 他们正在运行2.6.24-24通用(最新的Ubuntu我猜)]

SQL Server远程查询TCP错误

我们正在转移到一个新的托pipe服务提供商,并在SQL Server 2005中build立一个非常简单的数据库后,我注意到,如果我等待超过10秒钟左右之间运行查询远程使用pipe理工作室,我得到以下错误: 将请求发送到服务器时发生传输级错误。 提供程序:TCP提供程序,错误:0 从我们的办公室运行SSIS包到托pipe数据库时,我们也遇到类似的错误。 主持人根本没有什么帮助,所以我试图缩小问题的可能性。 任何帮助将不胜感激。 谢谢!

TCP序列计数器溢出

我从课程中得到以下问题: 假设有一个可用的带宽为300Mbps的TCP连接,假设有些数据包的传输延迟非常大,在哪个延迟时间可能会出现严重问题,这是一个现实问题吗? 我计算了一个大约2分钟的延迟时间,在序列计数器中会有一个溢出(如果你认为它是从0开始的)。 根据RFC,序列计数器将溢出到零。 在RFC中我没有发现“如果发生这种情况”,但也许我忽略了它。 我的问题是:会发生什么? 这仅仅是TCP的限制吗? 有没有解决方法(除了使用更大的序列计数器)?