当我从tcp缓冲区读取数据时,应该为mtu值选择哪个数字

时间:2018-10-26 04:17:01

标签: go mtu

这是我准备读取缓冲区时使用golang的代码:

func Listen() {
  listen, _ := net.Listen("tcp4", "127.0.0.1:7000")
  defer listen.Close()
  for {
    conn, _ := listen.Accept()
    go handler(&conn)
  }
}

func handler(c *net.Conn) {
  for {
    buf := make([]byte, 1464)
    n, _ := (*c).Read(buf)
    if n == 0 {
      continue
    }
  }
}

1464是我的网络mtu 1492-28 IP头,那么我应该在这里输入哪个数字?

我的网络使用ppoe协议,因此默认值为(1518-18-8)8是ppoe协议标头,rasult为1492,那么我应该在其中输入哪个数字1492或1464?(1492-28)

1 个答案:

答案 0 :(得分:0)

按事物的方案,1464与1492的区别不大,所以选择较大的。也许增加一点空间!

如果您想要大小完全合适的超紧缓冲区,请执行以下操作

func handler(c *net.Conn) {
  maxSize:=1464
  for {
    buf := make([]byte, maxSize)
    n, _ := (*c).Read(buf)
    if n == 0 {
      continue
    }
    if n > maxSize {
      maxSize=n
    }
  }

它将进行调整。 NB make()是一个相对昂贵的调用,因此您可能想看看sync.pool或其他管理缓冲区的方法