为什么Unix域为小包装需要这么多缓冲区

时间:2016-12-12 01:04:55

标签: linux sockets tcp unix-socket

我已经做了一些unix域和tcp / ip客户端/服务器测试并找出答案 unix域比实际应用的缓冲区要多得多, 他们都使用SOCK_STREAM。

在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_STREAM发送44字节的包,unix域缓冲区每个花费768个字节,但tcp / ip缓冲区仅花费44个字节?!

0 个答案:

没有答案