2018年7月

STL中的string类有两个方法size()length()用来返回字符串的长度。 两者在实现上没有区别:

> sed -n 907,918p /usr/include/c++/7/bits/basic_string.h 
      // Capacity:
      ///  Returns the number of characters in the string, not including any
      ///  null-termination.
      size_type
      size() const _GLIBCXX_NOEXCEPT
      { return _M_string_length; }

      ///  Returns the number of characters in the string, not including any
      ///  null-termination.
      size_type
      length() const _GLIBCXX_NOEXCEPT
      { return _M_string_length; }

MTU: Maximum transmission unit,最大传输单元,IP报文段的最大大小。

MSS: Maximum segment size,最大的帧大小,是TCP数据段的最大大小。

其中MTU工作于数据链路层,取决于网络环境。而MSS只是TCP负载部分的大小,它受限于MTU。要注意的是MSS描述的只是TCP负载部分的长度,不包括头部。

计算公式:

$MSS = MTU - IPHeader - TCPHeader $

大部分情况下,MTU的值是1500,IP头部和TCP头部各占20字节,所以MSS的长度最大也就是1460字节。如果TCP负载长度超出这个值,IP数据报将被分段发送。