Questions tagged «tcp»

传输控制协议(TCP)是Internet使用的协议栈的低级部分。它直接位于IP层上方,负责确保重新发送丢弃的数据包。

3
内核套接字结构和TCP_DIAG
我正在开发一种连接到实时数据服务器(使用TCP)的软件,但有些连接掉线了。我的猜测是客户端无法足够快地读取来自服务器的数据。因此,我想监视我的TCP套接字。为此,我找到了“ ss”工具。 这个工具可以查看每个套接字的状态-这是命令输出的示例行 ss -inm 'src *:50000' ESTAB 0 0 184.7.60.2:50000 184.92.35.104:1105 mem:(r0,w0,f0,t0) sack rto:204 rtt:1.875/0.75 ato:40 我的问题是:记忆部分是什么意思?查看该工具的源代码,我发现数据来自内核结构(sock中的sock.h)。更确切地说,它来自以下领域: r = sk->sk_rmem_alloc w = sk->sk_wmem_queued; f = sk->sk_forward_alloc; t = sk->sk_wmem_alloc; 有人知道他们的意思吗?我的猜测是: rmem_alloc :入站缓冲区的大小 wmem_alloc :出站缓冲区的大小 sk_forward_alloc :??? sk->sk_wmem_queued :??? 这是我的缓冲区大小: net.ipv4.tcp_rmem = 4096 87380 174760 net.ipv4.tcp_wmem = 4096 16384 131072 …
18 linux  tcp  socket 

1
如何终止bash本身建立的TCP连接?
我曾经使用exec 3<>/dev/tcp/192.168.0.101/6435192.168.0.101:6435建立TCP连接。而且我已经收到并通过pipe命令发送了一些消息。 现在,我要终止TCP连接。但是,ss -anpet从中我可以看到bash本身保持了此连接,而没有派生子进程。 我试图将信号9和15发送到bash进程,但是如您所知,bash无法杀死自己。 因此,我可以在不终止正在使用的pt的情况下终止已建立的TCP连接(既不通过root杀死它也不发送Ctrl + D)吗?

4
TCP在Linux笔记本电脑上消失
每隔几天我就会遇到以下问题。我的笔记本电脑(经过Debian测试)突然变得无法使用与Internet的TCP连接。 以下内容可以正常运行: UDP(DNS),ICMP(ping)—我得到即时响应 与局域网中其他计算机的TCP连接(例如,我可以ssh到邻居笔记本电脑) 局域网中的其他机器一切正常 但是,当我尝试从笔记本电脑进行TCP连接时,它们会超时(对SYN数据包无响应)。这是典型的curl输出: % curl -v google.com * About to connect() to google.com port 80 (#0) * Trying 173.194.39.105... * Connection timed out * Trying 173.194.39.110... * Connection timed out * Trying 173.194.39.97... * Connection timed out * Trying 173.194.39.102... * Timeout * Trying 173.194.39.98... * Timeout …
17 debian  networking  tcp 


1
为什么我的TCP吞吐量比UDP吞吐量大得多?
我没有对硬件或内核配置(所有默认设置,全新的操作系统安装,Linux内核3.11 TCP / IP堆栈)进行任何异常处理,通过TCP我平均每秒平均发送约383万条消息,而我平均仅为0.75每秒通过UDP的百万条消息。这似乎完全违背了我对这两个协议的期望。 造成这种巨大差异的最可能原因是什么,如何在Ubuntu 13.10上进行诊断? #TCP RESULTS Recv Send Send Utilization Service Demand Socket Socket Message Elapsed Send Recv Send Recv Size Size Size Time Throughput local remote local remote bytes bytes bytes secs. 10^6bits/s % S % S us/KB us/KB 87380 65536 64 10.00 1963.43 32.96 17.09 5.500 …

2
实际使用TCP_DEFER_ACCEPT?
我在网上仔细阅读了Apache httpd手册,并遇到了启用它的指令。在手册页中找到以下内容的描述tcp: TCP_DEFER_ACCEPT (since Linux 2.4) Allow a listener to be awakened only when data arrives on the socket. Takes an integer value (seconds), this can bound the maximum number of attempts TCP will make to complete the connection. This option should not be used in code intended to be …

3
使用输入/输出命名管道进行TCP连接
我一直很想让它工作一段时间,所以我怀疑对管道如何工作的某种根本误解是造成麻烦的根本原因。 我的目标是通过netcat文件系统上的某个远程主机启动TCP连接,并在文件系统上有两个命名管道:一个可以读取进程以获取传入数据,另一个可以写入进程作为传出数据。我目前正在使用以下构造: mkfifo in mkfifo out cat out | netcat foo.bar.org 4000 > in & 从这里开始,我想允许其他进程对该开放的TCP连接进行读写。这应该“起作用”,还是有这样的构造不能起作用的原因? 什么似乎目前发生的是,我可以读取out没有问题,但是当我写到in我得到的输出提一个破碎的管道和所有后续通信似乎是死了。有什么想法吗? (相关:我最初使用: netcat foo.bar.org 4000 < out > in & 但发现它阻止了等待输入。我对此也很好奇,但最好在一个单独的问题中解决。)
15 bash  pipe  tcp  netcat 

6
如何确定要使用SSH登录的端口?
我有一个远程安装的Ubuntu 10.04服务器,前一段时间已经安装了。当我记录用户名和密码时,我似乎很聪明,并将通常的ssh端口从22更改为...。 我如何找出那个端口可能是什么? 我确实可以通过托管公司的后门访问服务器,因此我可以执行所需的所有Unix命令-但我无法使用计算机上的普通腻子外壳登录。
15 ssh  tcp 


4
如何在非标准端口上使用SSH配置SVN / SSH?
我已将SSH配置为端口20000。尝试时: svn co svn+ssh://server.com:20000/home/svn/proj1 proj1 --username jm 我懂了 svn: To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file. svn: Network connection closed unexpectedly 我想我还需要告诉SVN也使用端口20000吗? 我在Ubuntu 11.10上
14 ssh  tcp  subversion 


1
如何确定这些Linux TCP默认设置?
最近,我花了相当多的时间来查找生产中的问题,其中poll()连接的客户端的数据库服务器消失将导致最多2个小时的挂起(长时间等待libpq客户端库中的调用)。深入研究问题,我意识到应该调低这些内核参数,以便及时发现断开的TCP连接: net.ipv4.tcp_keepalive_time = 7200 net.ipv4.tcp_keepalive_probes = 9 net.ipv4.tcp_keepalive_intvl = 75 net.ipv4.tcp_retries2 = 15 上面的四个值来自Ubuntu 12.04计算机,看起来这些默认值与当前的Linux内核默认值保持不变。 这些设置似乎严重偏向于保持现有连接的打开状态,并且对于keepalive探针极为ing。AIUI,默认tcp_keepalive_time值为2小时,这意味着当我们等待远程主机的响应时,我们将耐心等待2小时,然后再发起一次keepalive探测以验证我们的连接仍然有效。然后,如果远程主机不响应keepalive探测,则我们将对这些keepalive探测重试9次(tcp_keepalive_probes),相隔75秒(tcp_keepalive_intvl),因此,在我们确定连接真正失效之前,还需要再花11分钟。 这与我在该字段中看到的内容相符:例如,如果我启动一个psql连接到远程PostgreSQL实例的会话,并且有一些查询等待响应,例如 SELECT pg_sleep(30); 然后使远程服务器严重死亡(例如,丢弃该机器的流量),我发现我的psql会话等待长达2个小时11分钟才能发现连接已死。您可能会想到,这些默认设置会对我们在数据库故障转移事件期间与数据库交谈的代码造成严重问题。调低这些旋钮很有帮助!而且我发现我并不孤单地建议调整这些默认值。 所以我的问题是: 这样的默认设置多长时间了? 使这些TCP设置成为默认设置的最初理由是什么? 有任何Linux发行版会更改这些默认值吗? 对于这些设置的任何其他历史或观点,将不胜感激。
13 linux  tcp  history 

1
D-Bus身份验证和授权
我正在尝试设置对D-Bus的远程访问,但我不了解身份验证和授权的工作方式(不)。 我有一台D-Bus服务器在抽象套接字上侦听。 $ echo $DBUS_SESSION_BUS_ADDRESS unix:abstract=/tmp/dbus-g5sxxvDlmz,guid=49bd93b893fe40d83604952155190c31 我跑去dbus-monitor看发生了什么。我的测试用例是notify-send hello,当从本地计算机执行时可以工作。 从同一台计算机上的另一个帐户,我无法连接到该总线。 otheraccount$ DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-g5sxxvDlmz,guid=49bd93b893fe40d83604952155190c31 dbus-monitor Failed to open connection to session bus: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network …

1
关闭后绑定的TCP本地套接字地址多长时间不可用?
在Linux上(我的实时服务器在RHEL 5.5上-下面的LXR链接是其中的内核版本),man 7 ip说: 除非已设置SO_REUSEADDR标志,否则已绑定的TCP本地套接字地址在关闭后的一段时间内不可用。 我没有使用SO_REUSEADDR。“一段时间”是多长时间?我如何知道它有多长时间,以及如何更改它? 我一直在仔细研究这个问题,发现了一些信息,但是从应用程序程序员的角度来看,这些信息都无法真正解释。以机智: TCP_TIMEWAIT_LEN in net/tcp.h是“等待破坏TIME-WAIT状态的时间”,固定为“大约60秒” / proc / sys / net / ipv4 / tcp_fin_timeout为“如果套接字已被我们关闭,则将套接字保持在状态FIN-WAIT-2的时间”,并且“默认值为60秒” 我遇到的困难是弥合TCP生命周期的内核模型与程序员的端口模型不可用之间的差距,即了解这些状态与“某个时间”的关系。

2
阅读“ / proc”以了解进程是否已打开端口
我需要知道是否使用给定PID的进程在不使用外部命令的情况下打开了端口。然后,我必须使用/proc文件系统。/proc/$PID/net/tcp例如,我可以读取文件并获取有关进程打开的TCP端口的信息。但是,在多线程进程上,该/proc/$PID/task/$TID目录还将包含一个net/tcp文件。我的问题是: 我需要遍历所有线程net/tcp文件,还是将线程打开的端口写入进程net/tcp文件。
13 linux  tcp  proc  open-files 

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.