Когда я читаю из буфера tcp, какое число я должен выбрать для значения mtu - PullRequest
0 голосов
/ 26 октября 2018

Вот мой код с 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 голосов
/ 26 октября 2018

В схеме вещей 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 или другие подходы к управлению буферами

...