UNIX 世界中的“一切都是文件”。
上面这句话很有名。当我运行时echo "hello programmer" >> /dev/tty1,我可以在TeleType 1 ...上观看给定的字符串。
每个文件是什么以及在哪里socket?假设我的朋友连接到我的电脑,它的 IP 是h.h.h.h,我如何访问相应的文件?是否可以?
出于测试目的,我需要创建一个 shell 脚本,该脚本与远程 IP>Port 连接并发送一个简单的文本 TCPIP 套接字消息。
在 Unix 系统上,路径名通常几乎没有长度限制(Linux 上为 4096 个字符)...除了套接字文件路径限制为大约 100 个字符(Linux上为 107 个字符)。
我已经检查过是否可以通过更改当前工作目录并在各个目录中创建多个使用相同路径的套接字文件来解决此限制./myfile.sock:客户端应用程序似乎正确连接到预期的服务器进程,即使lsof显示所有他们在同一个套接字文件路径上侦听。
我知道“一切都是文件”是 Unix 的主要概念之一,但是套接字使用内核提供的不同 API(如套接字、sendto、recv 等),而不是像普通的文件系统接口。
“一切都是文件”在这里如何应用?
当我运行netstat --protocol unix或lsof -U我看到某些 unix 套接字路径前面带有 @ 符号,例如@/tmp/dbus-qj8V39Yrpa。然后当我运行时,ls -l /tmp我没有看到名为的文件dbus-qj8V39Yrpa 的。
问题是前面的@ 符号表示什么?第二个相关问题是——我在哪里可以找到文件系统上的unix 套接字文件(@/tmp/dbus-qj8V39Yrpa)?
对于我们服务器环境的网络灾难模拟,我们正在寻找一种有意使 TCP 套接字超时的方法。现有的套接字有什么简单的方法吗?此外,小的 C 测试用例程序将是一个加分项。
我们已经尝试在 TCP 缓冲区读取期间关闭网络接口,并从断开连接的挂载资源 (samba) 中读取。
出测试服务器是 Ubuntu 12.04.4。
我正在开发一个连接到实时数据服务器(使用 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
Run Code Online (Sandbox Code Playgroud)
我的问题是:内存部分是什么意思?查看该工具的源代码,我发现数据来自内核结构(sockin sock.h)。更准确地说,它来自领域:
r = sk->sk_rmem_alloc
w = sk->sk_wmem_queued;
f = sk->sk_forward_alloc;
t = sk->sk_wmem_alloc;
Run Code Online (Sandbox Code Playgroud)
有人知道他们的意思吗?我的猜测是:
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
net.ipv4.tcp_mem = 786432 1048576 1572864
net.core.rmem_default = 110592
net.core.wmem_default = 110592
net.core.rmem_max = 1048576
net.core.wmem_max = 131071
Run Code Online (Sandbox Code Playgroud) 对于像这样的套接字文件:
# ls -alti socket
14112 srw------- 1 root root 0 Nov 15 20:03 socket
# cat socket
cat: socket: No such device or address
Run Code Online (Sandbox Code Playgroud)
由于cat命令在这里没用,有什么方法可以获取有关套接字文件的更多信息?比如它在监听哪个端口?等等。
我在 emacs 中运行 zsh shell。当我运行时,ls我=在.sock文件末尾得到一个。这是什么=意思?它是unix套接字独有的吗?
您可以看到lscpu命令的输出-
jack@042:~$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 56
On-line CPU(s) list: 0-55
Thread(s) per core: 2
Core(s) per socket: 14
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 79
Model name: Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz
Stepping: 1
CPU MHz: 2600.000
CPU max MHz: 2600.0000
CPU min MHz: 1200.0000
BogoMIPS: 5201.37
Virtualization: VT-x
Hypervisor vendor: vertical
Virtualization type: full
L1d cache: 32K
L1i cache: 32K …Run Code Online (Sandbox Code Playgroud)