Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么Unix域为小程序包占用这么多缓冲区_Linux_Sockets_Tcp_Unix Socket - Fatal编程技术网

Linux 为什么Unix域为小程序包占用这么多缓冲区

Linux 为什么Unix域为小程序包占用这么多缓冲区,linux,sockets,tcp,unix-socket,Linux,Sockets,Tcp,Unix Socket,我做了一些unix域和tcp/ip客户机/服务器测试并找到了答案 unix域占用的缓冲区比实际需要的要多得多, 他们都在使用SOCK_流 在3.10.0-327.el7.x86_64 linux中,unix域客户端连接到unix域服务器,unix域服务器每10秒向客户端发送44字节的包,客户端从不调用recv,这样从服务器发送的所有包都将 在缓冲区中,我观察到以下情况: ss -ax |grep "test" Netid State Recv-Q Send-Q

我做了一些unix域和tcp/ip客户机/服务器测试并找到了答案 unix域占用的缓冲区比实际需要的要多得多, 他们都在使用SOCK_流

在3.10.0-327.el7.x86_64 linux中,unix域客户端连接到unix域服务器,unix域服务器每10秒向客户端发送44字节的包,客户端从不调用recv,这样从服务器发送的所有包都将 在缓冲区中,我观察到以下情况:

ss -ax |grep "test"

Netid  State      Recv-Q Send-Q                                    Local Address:Port                                                     Peer Address:Port

u_str  ESTAB      0      768    /tmp/testud 22461998              * 22461997  
u_str  ESTAB      0      1536   /tmp/testud 22461998              * 22461997 
u_str  ESTAB      0      2304   /tmp/testud 22461998              * 22461997 
我正在tcp/ip中进行相同的测试,如下所示:

ss -at | grep "192.168"

State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port  
ESTAB      44     0      192.168.2.1:odnsp                192.168.2.2:distinct 
ESTAB      88     0      192.168.2.1:odnsp                192.168.2.2:distinct
ESTAB      132    0      192.168.2.1:odnsp                192.168.2.2:distinct 
如您所见,unix域Send-Q有768个字节,但实际的包只需要44个字节,而tcp/ip Recv-Q每个包只需要44个字节


我的问题是为什么要通过SOCK_流发送44字节的包,unix域缓冲区每个需要768字节,而tcp/ip缓冲区只需要44字节

顺便说一句,您在比较域与internet套接字时比较了send-q和recv-q。为什么send-q会堆积起来?您说过,您没有做
recv
。这不会导致ACK退出。那么为什么send-q会被填满呢?这个高值可能是因为重新传输计数?在unix域和tcp/ip测试中,客户端都没有故意调用recv,两个案例服务器都发送44个字节并等待10秒再发送44个字节,然后ss-ax将看到send-Q有7681536,。。。在测试unix域时,ss-at将看到44,88,。。。在测试tcp/ip的Recv-Q中,我不知道为什么会发生这种情况。顺便说一句,您正在比较send-Q和Recv-Q,比较域和internet套接字。为什么send-q会堆积起来?您说过,您没有做
recv
。这不会导致ACK退出。那么为什么send-q会被填满呢?这个高值可能是因为重新传输计数?在unix域和tcp/ip测试中,客户端都没有故意调用recv,两个案例服务器都发送44个字节并等待10秒再发送44个字节,然后ss-ax将看到send-Q有7681536,。。。在测试unix域时,ss-at将看到44,88,。。。在测试tcp/ip的Recv-Q中,我不知道为什么会发生这种情况。