FreeBSD netstat -anx 中的 Send-Q 和 S-BCNT 有什么区别?

FreeBSD netstat -anx 中的 Send-Q 和 S-BCNT 有什么区别?

扩展 netstat 统计信息中的发送缓冲区字节数的具体含义是什么,为什么它总是大于 Send-Q?

换句话说,哪些内容对 S-BCNT 有影响,而对 Send-Q 则没有影响?

S-BCNT 是否是用于计算特定连接系统成本的更好数字?

答案1

您可以在以下位置找到定义以及注释sys/sys/sockbuf.h

    u_int   sb_cc;      /* (c/d) actual chars in buffer */
    u_int   sb_mbcnt;   /* (c/d) chars of mbufs used */

BSD 使用称为mbuf/ 的结构mbuf_cluster来存储网络数据。它们从驱动程序代码到套接字层无处不在。即使数据包的有效负载为 1 字节,它也会mbuf在 mbuf 中消耗 256 ( ) 个字节。如果数据包大小(包含所有帧/数据包头)>= 256,它将消耗 256 ( mbuf) + 2048 ( ) 个字节。因此,和mbuf_cluster之间存在差异。sb_ccsb_mbcnt

回答您的问题:S-BCNT使用更正确的值。

附言. 欲了解更多信息,请咨询TCP/IP 图解第 2 卷 - W. Richard Stevens 和 Garry R. Wright、第 16 章 - 套接字 I/O、第 16.3 节 - 套接字缓冲区、第 476 页

相关内容