2016-10-03 12 views
1

Я новичок и завязываю руки на некоторых сетевых программах. Я читаю данные через многоадресную рассылку (см. Код ниже) и хочу найти блок максимальной передачи (MTU) или блок передачи, который я могу прочитать. Может ли кто-нибудь направить меня к источнику или способу сделать это. Спасибо.Как измерять пакеты Максимальный блок передачи (MTU), полученный от сервера при чтении многоадресной рассылки

try { 
     InetAddress add = InetAddress.getByName("127.0.0.1"); 

     MulticastSocket socket = new MulticastSocket(1234); 
     socket.joinGroup(add); 

     byte[] bb = new byte[2500]; 

     while (true) { 

      DatagramPacket data = new DatagramPacket(bb, bb.length); 
      datagramSocket.receive(data); 
      processDataReceived(bb); 
     } 

     datagramSocket.leaveGroup(socket); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
+1

MTU of mutlicast будет 64 килобайта в идеальной системе, так как он использует службу UDP для отправки сообщений. Однако реальный MTU будет определяться физическим оборудованием в сети. IIRC, когда пакет слишком велик для самого маленького MTU, тогда пакет будет разделен, отправлен и обновлен (прозрачно) базовым сервисом (при условии, что он все еще находится под 64 КБ). Поэтому я не думаю, что вы можете найти его, используя объекты Java 'DatagramPacket'. – flakes

ответ

0

Я не уверен, что ваши намерения, но для этого ответа я предполагаю, что вы хотите получить размер для бб, чтобы убедиться, что ни один пакет не будет обрезано.

Класс MulticastSocket наследуется от DatagramSocket. И у DatagramSocket есть метод getReceiveBufferSize(), который возвращает максимальный буфер приема сокета в байтах.

0

Максимальная дейтаграмма вы можете получить ограничена 65507 (IPv4) или сокет получить размер буфера, в зависимости от того, что меньше.

MTU - это максимум, который может быть отправлен, и это свойство нескольких вещей у отправителя плюс общий предел 65507, как указано выше. Это не имеет никакого отношения к получению. На практике это всего лишь 576 или 534 или какое-то такое количество из-за обделки IP.