Questions tagged «tcp»

TCP代表传输控制协议,并且是Internet协议套件的核心协议之一。TCP是Internet协议(IP)的补充,因此整个套件通常称为TCP / IP。


1
将sysctl tcp_retries1设置为3时,TCP数据包被重传7次-为什么?
Ubuntu 12.04 我试图更好地理解,当目标未收到确认时,TCP将尝试重传数据包多少次。阅读了tcp手册页后,似乎很明显这是由sysctl tcp_retries1控制的: tcp_retries1 (integer; default: 3) The number of times TCP will attempt to retransmit a packet on an established connection normally, without the extra effort of getting the network layers involved. Once we exceed this number of retransmits, we first have the network layer update the route …

1
启用时间戳后,对某些SYN数据包无响应
我有一个TCP服务器正在运行Ubuntu 12.04.3(内核3.8.0-31-通用)的机器(“服务器”)上侦听。它从2个不同的客户端计算机接收连接。机器A运行Ubuntu 12.04.4(3.11.0-17-generic),机器B运行Ubuntu 11.10(3.0.0-32-server)。 如果在服务器上启用了TCP时间戳(sysctl net.ipv4.tcp_timestamps = 1),则有时会“忽略”来自计算机A的SYN数据包。在服务器上使用tcpdump(处于非混杂模式),我可以看到SYN到达OK并具有正确的校验和-没有响应-没有SYN / ACK和RST。机器A在放弃前多次重传SYN。在计算机A(在本例中为wget)上运行的客户端软件会立即通过新连接重试并成功,并获得即时SYN / ACK。 机器B在同一台服务器上没有问题,并且流量看起来很正常-它也使用了与机器A相同的TCP选项(从捕获文件中可以看到)。在服务器上禁用TCP时间戳可使一切正常运行。 但是,对我来说,被忽略的SYN数据包中的时间戳似乎是有效的,因此我不确定它们为什么会引起问题,或者根本不是它们的根本原因。 我在这里放了一个匿名的pcap https://www.dropbox.com/s/onimdkbyx9lim70/server-machineA.pcap。它在服务器(10.76.0.74)上显示机器A(10.4.0.76)成功执行HTTP GET(数据包1至10),然后在1秒后尝试再次获取同一URL(数据包11至17),但取而代之忽略了其SYN。数据包18到27是另一个成功。 我怀疑这与“ 为什么服务器不发送SYN / ACK数据包来响应SYN数据包 ” 中描述的问题类似,并且禁用时间戳是一种解决方法,我想了解发生了什么。这只是一个错误吗? 没有运行本地防火墙。该服务器可处理许多TCP连接(任何时候大约32K),但具有大量的可用内存/ CPU。在pcap中显示的测试时,机器A与服务器之间没有其他TCP连接。没有迹象表明服务器应用程序的接受队列突然装满了(这可能会影响我假定的两个客户端)。由于数据包在服务器上的pcap中看起来不错,因此似乎没有中间的网络设备在破坏事物。 我最初将其发布在ubuntu论坛上,但事后看来,这可能是一个更合适的位置。希望借到一个线索。
9 tcp  timestamp  syn 

1
“卷曲:(56)SSL读取:errno -5961”错误的根本原因
我正在评估一些SSL失败,并注意到当我使用curl一个失败的站点时,我得到了curl: (56) SSL read: errno -5961; 但是,我的Google查询该错误未显示openssl失败的原因。 问题:卷发失败意味着什么curl: (56) SSL read: errno -5961? 我包括curl下面的完整内容... [mpenning@mpenning-lnx ~]$ curl -vk https://192.0.2.168/ * About to connect() to 192.0.2.168 port 443 (#0) * Trying 192.0.2.168... connected * Connected to 192.0.2.168 (192.0.2.168) port 443 (#0) * Initializing NSS with certpath: sql:/etc/pki/nssdb * warning: ignoring value …
9 ssl  tcp  timeout  curl 

1
为什么WireShark认为此帧是重组PDU的TCP段
请在这里找到一个小的pcap文件来说明我的问题。 我有一个三向TCP握手,然后有两个FIX登录。(FIX是用于交易的协议。)WireShark会很好地解释和解析第一个FIX登录(第4帧),但将第二个登录(第6帧)解释为TCP segment of a reassembled PDU。 但是,帧6 不是重组PDU的TCP段。它包含完整的TCP PDU,应将其解释为FIX登录并进行解析。我检查了序列号,ACK号,IP总长度等是否都很好。 为什么将帧6解释为重组PDU的TCP段?
9 tcp  wireshark 

3
在大型RTT上,1Gbps服务器的TCP吞吐量比100Mbps服务器的TCP吞吐量低
我们的基础设施分布在全球几个主要地区-新加坡,伦敦和洛杉矶。任何两个位置之间的RTT均超过150ms。 我们最近将所有服务器升级为使用1Gbps链接(从100Mbps开始)。我们已经在不同位置的服务器之间运行了一些基于TCP的测试,并且看到了一些令人惊讶的结果。这些结果是完全可重复的。 洛杉矶(100Mbps)到伦敦(100Mbps):〜96Mbps吞吐量 洛杉矶(100Mbps)至伦敦(1Gbps):〜96Mbps吞吐量 洛杉矶(1Gbps)至伦敦(100Mbps):10-40Mbps吞吐量(易失) 洛杉矶(1Gbps)至伦敦(1Gbps):10-40Mbps吞吐量(易失) 洛杉矶(1Gbps)至洛杉矶(1Gbps):吞吐量> 900Mbps 看起来,只要发件人以1Gbps的速度运行,在长链路上,我们的吞吐量就会受到极大影响。 先前的测试方法非常简单-我只是使用cURL从目标服务器下载1GB二进制文件(因此,在上述情况下,cURL客户端在London服务器上运行并从LA下载,因此LA是发送者) 。当然,这是使用单个TCP连接。 使用iperf在UDP上重复相同的测试,问题消失了! 洛杉矶(100Mbps)到伦敦(100Mbps):〜96Mbps吞吐量 洛杉矶(100Mbps)至伦敦(1Gbps):〜96Mbps吞吐量 洛杉矶(1Gbps)至伦敦(100Mbps):〜96Mbps吞吐量 洛杉矶(1Gbps)至伦敦(1Gbps):吞吐量> 250Mbps 这直指我眼中的某些TCP或NIC /端口配置问题。 两台服务器都运行带有TCP三次的CentOS6.x。两者都具有最大8MB的TCP发送和接收窗口,并启用了TCP时间戳和选择性确认。所有测试用例都使用相同的TCP配置。完整的TCP配置如下: net.core.somaxconn = 128 net.core.xfrm_aevent_etime = 10 net.core.xfrm_aevent_rseqth = 2 net.core.xfrm_larval_drop = 1 net.core.xfrm_acq_expires = 30 net.core.wmem_max = 8388608 net.core.rmem_max = 8388608 net.core.wmem_default = 131072 net.core.rmem_default = 131072 net.core.dev_weight = 64 …

1
在哪里可以将专有信息嵌入第2层或第3层数据包中?
Citrix Netscaler具有一个有趣的属性,该属性将信息嵌入到发送到主机的TCP数据包中。此属性以使Netscaler可以使用它确定必须采用的虚拟服务器,主机和路由的方式回显给Netscaler。 将专有信息回显到主机的能力具有有趣的应用程序。 Citrix Netscaler如何做到这一点(在哪里填充位),以及Netscaler(或类似设备)理论上可以在数据包中的其他什么位置填充数据? 哪些设备将(或将不允许)使这些自定义数据保持不变?

2
为高带宽连接设置一个(非常大的)initcwnd可能有哪些不利之处?
我已经在Linux(3.5内核)中试验TCP参数。基本上关于此连接: 服务器:数据中心的千兆上行链路,从另一个数据中心进行测试时,实际带宽(由于共享上行链路)约为70 MB / s。 客户端:连接到200mbit光纤的千兆本地局域网。实际上,获取测试文件的速度为20 MB / s。 延迟:大约50毫秒往返。 远程服务器用作10到100mb范围内文件的文件服务器。我注意到,使用10的initcwnd传输这些文件的时间会受到TCP缓慢启动的严重影响,由于加载速度缓慢,然后加载速度提高,因此加载10mb所需的时间为3.5秒(达到最高速度:3.3 MB / s)。在达到最大速度之前完成。我的目标是调整这些文件的最小加载时间(因此,不是最高的原始吞吐量或最低的往返延迟,如果这会减少加载文件的实际时间,我愿意牺牲两者) 因此,我尝试了一个简单的计算来确定理想的initcwnd应该是什么,而忽略了其他任何连接以及对其他连接的可能影响。带宽延迟乘积为200 Mbit / s * 50ms = 10 Mbit或1.310.720字节。考虑到initcwnd是以MSS为单位设置的,并且假设MSS约为1400字节,则需要设置为:1.310.720 / 1400 = 936 此值与默认值相差很远(Linux中为10 * MSS,Windows中为64kb),因此将其设置为这样不是一个好主意。像这样配置它的预期缺点是什么?例如: 会影响同一网络的其他用户吗? 会为其他连接造成不可接受的拥塞吗? 在路径上某处泛洪路由器缓冲区? 增加少量丢包的影响?

2
在Mac OS X上,我的TIME_WAIT在哪里?
TIME_WAIT在Mac OS X上为否 通常,当关闭TCP连接时,close()首先被调用的那一侧的套接字将保持该TIME_WAIT状态。 当对等方是Mac OS X(Lion)机器时,如果在Mac端首先被调用,则在Mac 上没有TIME_WAIT列出。然而,似乎插座的实际状态,因为试图调用一次(不使用套接字选项)会导致失败。netstat -anclose()TIME_WAITlisten()SO_REUSEADDRlisten() 等待2 * MSL(最大分段生存时间,在Mac OS X Lion上为15秒,如报告的sysctl net.inet.tcp.msl)将清除TIME_WAIT状态,并且listen()可以再次调用而不会出现错误。 为什么看不到插座TIME_WAIT? 测试中 这是Python中的两个简单测试程序。 服务器 #!/usr/bin/env python import socket HOST = '' PORT = 50007 l = socket.socket(socket.AF_INET, socket.SOCK_STREAM) l.bind((HOST, PORT)) l.listen(1) print("Listening on %d" % PORT) (s, _) = l.accept() print("Connected") raw_input("Press <enter> to …

2
将转发器DNS请求强制为TCP模式
我在多宿主服务器上的SLES10(当前绑定9.6)上设置了DNS服务器。可以从所有内部网络查询此服务器,并为所有内部网络提供答案。我们有两个单独的DNS“主”区域。每个区域都由许多权威的Windows-DNS服务器提供服务。 现在,我的linux服务器是这些区域之一(私有内部区域)的辅助DNS服务器,并充当另一个区域(公共内部区域)的转发器。 直到最近,该设置仍能正常工作。现在我得到了-在查询公共内部区域(例如,通过hostLinux客户端上的命令)时,错误消息 ;; 截断,以TCP模式重试 一个Wireshark转储揭示了此问题的原因:第一个查询在UDP模式下发出,答案不适合UDP(由于权威NS列表过多),然后在TCP模式下重试,给出了正确的答案。 现在的问题是:是否 可以将绑定配置为以TCP模式查询转发器而无需先尝试UDP? 更新:尝试使用ASCII艺术... +--------------+ +--------------+ +-----------------+ | W2K8R2 DNS | | SLES 10 DNS | | W2K8R2 DNS | | Zone private +---+ All internal +---+ Zone public | | internal 2x | | Zones | | internal 30+ x | +--------------+ +-+----------+-+ +-----------------+ …

3
一种简单的方法来“编辑”来自TCP主机的流量(Linux)
在处理连接的进程获取流之前,我需要对来自已知tcp host:port的传入流量进行一些小的修改。 例如,让192.168.1.88成为运行Web服务器的远程主机。 我需要这样,当我本地主机上的某个进程从192.168.1.88:80(例如浏览器)接收到数据时,首先将数据更改text-A为text-B,如下所示: 127.0.0.1:...连接到192.168.1.88:80 127.0.0.1:...发送到192.168.1.88:80: GET / 192.168.1.88:80发送到127.0.0.1:...: HTTP/1.0 200 OK Content-Type: text/plain Some text-A, some other text 该数据在某种程度上被系统拦截,并传递给程序,其输出为: HTTP/1.0 200 OK Content-Type: text/plain Some text-B, some other text 系统会将更改后的数据提供给处理127.0.0.1:...的过程,就像它来自192.168.1.88:80一样。 假设我有一种基于流的方法来进行此更改(sed例如使用),预处理传入的tcp流的最简单方法是什么? 我想这会涉及到iptables,但我不是很擅长。 请注意,该应用程序应具有处理原始主机的感觉,因此设置代理不太可能是一种解决方案。

4
自动重新连接TCP隧道
我的两台计算机之间的网络连接不可靠:有时活动的TCP连接由于我无法控制的原因而掉线。我想在两台机器之间建立可靠的TCP连接。 如果网络可靠,我将运行ssh -L 1234:localhost:1234 remotehost,服务器侦听端口1234 remotehost,并将客户端指向localhost:1234。但是,如果ssh连接断开,则转发连接也将断开。如何安排自动恢复客户端和服务器之间的连接? 非解决方案: 这不适用于交互式应用程序,因此屏幕不适用。 这不只是自动地重新连接一个SSH隧道,拉autossh。我想继续使用相同的隧道式TCP连接,而不是开始新的连接。 原则上,VPN可以解决问题。但是,当我只想要一个TCP连接时,这似乎有些矫kill过正,而且我希望即使我在任一端都没有root权限,该解决方案也能起作用。 我对一个叫做rocks那样的程序记忆犹新,但这似乎已经从网络上消失了。我对双方都对Linux最感兴趣(尽管我希望这个级别的程序可以移植到其他unices上),但是如果您知道一个在QNX和VMS之间工作的程序,那就更好了。
9 ssh  unix  tcp  tunneling 


2
我的网卡丢了很多数据包
我有一台在CentOS 5.3上运行的服务器(一个彗星聊天服务器,将有很多tcp连接)。最近,我发现它运行非常缓慢(http服务和ssh),因此我使用“ ifconfig”命令来了解发生了什么。 eth0 Link encap:Ethernet HWaddr 00:1C:C0:B5:D5:EA inet addr:10.0.0.61 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::21c:c0ff:feb5:d5ea/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:871861 errors:0 dropped:489662344145 overruns:0 frame:0 TX packets:639044 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:207239658 (197.6 MiB) TX bytes:169416201 (161.5 MiB) Interrupt:225 Base address:0x6000 lo Link encap:Local …
9 linux  networking  centos  tcp  nic 

4
为什么创建新的TCP连接被视为昂贵?
我不明白为什么创建新的TCP连接被认为是一项昂贵的任务。基本上,建立新连接是指执行TCP的3向握手。因此,这将发送两个数据包,而接收一个。考虑到将会有成千上万的(数据)数据包,握手不能成为昂贵的部分。它可以?
9 networking  tcp 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.