2016-10-03 24 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

在理想系统上,mutlicast的MTU将为64千字节,因为它使用UDP服务发送消息。但是,真正的MTU将由网络上的物理硬件决定。 IIRC当数据包对于最小MTU来说太大时,数据包将被底层服务(假设它仍然低于64KB)分割,发送和重新创建(透明地)。所以我不认为你可以通过使用Java DatagramPacket对象来找到它。 – flakes

回答

0

我不知道什么是你的意图,但对于这个答案,我会假设你想要得到的大小BB,以确保没有数据包将被截断。

MulticastSocket类从DatagramSocket继承。 DatagramSocket有一个getReceiveBufferSize()方法,以字节为单位返回最大套接字接收缓冲区。

0

最大数据报可以收到由65507(IPv4)的边界或您的套接字接收缓冲区大小,以较低者为准。

MTU是最大可以是发送的,它是发件人的几件事的财产加上65507的总体限制如上。它与接收没有任何关系。在实践中,由于IP分割,它低至576或534或一些这样的数字。

相关问题