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

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

换句话说,与S-BCNT相比,什么不算在Send-Q上?

S-BCNT是一个更好的数字来计算特定连接系统的成本吗?

你可以在sys/sys/sockbuf.hfind注释和注释:

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

BSD正在使用称为mbuf / mbuf_cluster结构来处理networking数据。 他们使用从驱动程序代码到套接字层。 即使数据包有1个字节的有效负载,它也会在mbuf中占用256( mbuf )个字节。 如果数据包大小(所有帧/数据包头)> = 256,则将消耗256( mbuf )+ 2048( mbuf_cluster )字节。 因此, sb_ccsb_mbcnt之间的区别。

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

PS 。 有关更多信息,请参阅TCP / IP Illustrated第2卷 – W. Richard Stevens和Garry R. Wright ,第16章 – 套接字I / O,第16.3节 – 套接字缓冲区,第476页