UDPクライアントとサーバーの間のRTT(Round Trip Time)を計算しようとすると、非常に直感的な結果が発生します。 20バイトのパケットサイズを使用する場合、RTTは4.0ミリ秒ですが、パケットサイズを15000バイトに増やすと、RTTは2.8ミリ秒になります。なぜこうなった?パケットサイズが増加するにつれてRTTが増加してはいけませんか?パケットサイズを増やすとRTTが減少する
ここにUDPサーバーのコードを示します。私はこれを実行するjava RTTServer 8080
です。
public class RTTServer {
final static int BUFSIZE = 1024, COUNT=100000;
public static void main(String args[]) {
long start=Integer.MAX_VALUE;
byte[] bufferRecieve = new byte[BUFSIZE];
DatagramPacket recievePacket = new DatagramPacket(bufferRecieve, BUFSIZE);
for (;;)
try (DatagramSocket aSocket = new DatagramSocket(Integer.parseInt(args[0]));) {
aSocket.receive(recievePacket);
DatagramPacket sendPacket = new DatagramPacket(recievePacket.getData(), recievePacket.getLength(), recievePacket.getAddress(), recievePacket.getPort());
aSocket.send(sendPacket);
} catch (Exception e) {
System.out.println("Socket: " + e.getMessage());
}
}
}
ここでは、UDPクライアントのコードを示します。私はこれをjava RTTClient 192.168.1.20 8080 15000
として実行します。
public class RTTClient {
final static int BUFSIZE = 1024;
final static int COUNT = 1000;
public static void main(String args[]) throws UnknownHostException {
InetAddress aHost = InetAddress.getByName(args[0]);
byte[] dataArray = args[2].getBytes();
byte[] bufferReceive = new byte[BUFSIZE];
DatagramPacket requestPacket = new DatagramPacket(
dataArray, dataArray.length, aHost, Integer.parseInt(args[1]));
DatagramPacket responsePacket = new DatagramPacket(bufferReceive,BUFSIZE);
long rtts = 0;
for (int i =0 ; i < COUNT; i++){
try (DatagramSocket aSocket = new DatagramSocket();) {
long start = System.currentTimeMillis();
aSocket.send(requestPacket);
aSocket.receive(responsePacket);
System.out.println(i);
rtts += System.currentTimeMillis() - start;
} catch (Exception e) {
System.out.println("Socket: " + e.getMessage());
}
}
System.out.println("RTT = "+(double)rtts/(double)COUNT);
}
}