How to find the socket buffer size of linux

后端 未结 4 544
情歌与酒
情歌与酒 2020-11-28 22:00

What\'s the default socket buffer size of linux? Is there any command to see it?

4条回答
  •  自闭症患者
    2020-11-28 22:16

    Whilst, as has been pointed out, it is possible to see the current default socket buffer sizes in /proc, it is also possible to check them using sysctl (Note: Whilst the name includes ipv4 these sizes also apply to ipv6 sockets - the ipv6 tcp_v6_init_sock() code just calls the ipv4 tcp_init_sock() function):

     sysctl net.ipv4.tcp_rmem
     sysctl net.ipv4.tcp_wmem
    

    However, the default socket buffers are just set when the sock is initialised but the kernel then dynamically sizes them (unless set using setsockopt() with SO_SNDBUF). The actual size of the buffers for currently open sockets may be inspected using the ss command (part of the iproute package), which can also provide a bunch more info on sockets like congestion control parameter etc. E.g. To list the currently open TCP (t option) sockets and associated memory (m) information:

    ss -tm
    

    Here's some example output:

    State       Recv-Q Send-Q        Local Address:Port        Peer Address:Port
    ESTAB       0      0             192.168.56.102:ssh        192.168.56.1:56328
    skmem:(r0,rb369280,t0,tb87040,f0,w0,o0,bl0,d0)
    

    Here's a brief explanation of skmem (socket memory) - for more info you'll need to look at the kernel sources (e.g. sock.h):

    r:sk_rmem_alloc
    rb:sk_rcvbuf          # current receive buffer size
    t:sk_wmem_alloc
    tb:sk_sndbuf          # current transmit buffer size
    f:sk_forward_alloc
    w:sk_wmem_queued      # persistent transmit queue size
    o:sk_omem_alloc
    bl:sk_backlog
    d:sk_drops
    

提交回复
热议问题