package logicface; import component.ComponentException; import component.Identifier; import encoding.BlockException; import encoding.EncoderException; import encoding.SelfEncodingBase; import mgmt.MgmtException; import mgmt.RegisterPrefixHelper; import minsecurity.Common; import minsecurity.certificate.cert.CertUtils; import minsecurity.certificate.cert.Certificate; import minsecurity.crypto.sm2.SM2KeyPair; import minsecurity.identity.Identity; import minsecurity.identity.KeyParam; import org.junit.Test; import packet.CPacket; import packet.PacketException; import security.KeyChain; import java.util.Arrays; import java.util.Date; /* * @Author: Wang Feng * @Description: 测试Face的传输速率 * @Version: 1.0.0 * @Date: 9:19 2021/5/27 * @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室 */ public class FaceTransmissionSpeedTest { /** * 随机生成身份数据 * @return Identity */ private Identity createRandomIdentity() throws Exception{ // 测试PersistIdentity SM2KeyPair pair = SM2KeyPair.generateKeyPair(); Identity identity = new Identity(); identity.setName("/wzq"+Math.random()); // 身份名称必须以/开头 Identifier规定 KeyParam keyParam = new KeyParam(); keyParam.PublicKeyAlgorithm = 0; keyParam.SignatureAlgorithm = 0; identity.setKeyParam(keyParam); identity.setPrikey(pair.getSm2PrivateKey()); identity.setPubkey(pair.getSm2PublicKey()); identity.setPasswd("2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99"); // identity.lock("0123456789abcdef", Common.SM4ECB); Certificate cert = new Certificate(); cert.setVersion(1); cert.setSerialNumber(1); cert.setPublicKey(pair.getSm2PublicKey()); cert.setSignatureAlgorithm(Common.SM3withSM2); // TODO 名字有误? SM2withSM3? cert.setPublicKeyAlgorithm(Common.SM2); cert.setIssueTo("root"); cert.setIssuer("root"); long timestamp = System.currentTimeMillis() / 1000; cert.setTimestamp(timestamp); // 10bit timestamp cert.setNotAfter(timestamp); // 10bit timestamp cert.setNotBefore(timestamp + 1000); // 10bit timestamp cert.setKeyUsage(Common.CertSign); cert.setCA(true); CertUtils.signCert(cert, pair.getSm2PrivateKey()); identity.setCert(cert); return identity; } /** * 测试方法: * UDP发送未签名的推式网络包(CPacket); * 每次测试发包100w个; * 控制变量为不同负载:1300、8000。 * 负载-1300 * * @throws ComponentException * @throws LogicFaceException */ @Test public void testSendCPacketByUdp_UnSign() throws ComponentException, LogicFaceException { int size=8000; //发包负载 long npackets=1000000; // 初始化face LogicFace face = new LogicFace(); face.initWithUdp("127.0.0.1", 13899); // 记录时间 long startTime=System.currentTimeMillis(); // 循环构造包、发包 for (int i = 0; i < npackets; i++) { // 构造CPacket CPacket cPacket = new CPacket(); byte[] value = new byte[size]; cPacket.payload.setValue(value); Identifier name = new Identifier("/wefree"); Identifier nameTo = new Identifier("/wf"); cPacket.setSrcIdentifier(name); cPacket.setDstIdentifier(nameTo); // 发包 face.sendCPacket(cPacket); } long endTime=System.currentTimeMillis(); // 计算发包速率 cpacket头部长度约为80 long bitNums= npackets *(size+80)*8; // 总传输比特数 long times=(endTime-startTime)/1000; // 总耗时(/s) double speed1=((double) bitNums)/(double)(times*1024*1024);// 网速 int speed2= (int) (npackets/times); System.out.println("**************************"); System.out.println("发包类型:CPacket"); System.out.println("发包负载:"+size+" byte, 总长度:"+(size+80)+" byte"); System.out.println("发包个数:"+npackets); Date date=new Date(); date.setTime(startTime); System.out.println("发包开始时间:"+date); date.setTime(endTime); System.out.println("发包结束时间:"+date); System.out.println("发包总耗时:"+times+" s"); System.out.println("发包速率1:"+speed1+"Mbps"); System.out.println("发包速率2:"+speed2+"个CPacket/s"); System.out.println("**************************"); } @Test public void testSendCPacketByUdp_Sign() throws Exception { int size=8000; //发包负载 long npackets=1000000; // 初始化face LogicFace face = new LogicFace(); face.initWithUdp("127.0.0.1", 13899); // 初始化keychain KeyChain keyChain=new KeyChain("./"); // Identity id = createRandomIdentity(); // keyChain.getIdentifyManager().setDefaultIdentity(id, true); // 记录时间 long startTime=System.currentTimeMillis(); // 循环构造包、签名包、发包 for (int i = 0; i < 10; i++) { // 构造CPacket CPacket cPacket = new CPacket(); byte[] value = new byte[size]; cPacket.payload.setValue(value); Identifier name = new Identifier("/wefree"); Identifier nameTo = new Identifier("/wf"); cPacket.setSrcIdentifier(name); cPacket.setDstIdentifier(nameTo); // 对该包进行签名签名 keyChain.signCPacket(cPacket); // 发包 face.sendCPacket(cPacket); } long endTime=System.currentTimeMillis(); // 计算发包速率 cpacket头部长度约为80 long bitNums= npackets *(size+80)*8; // 总传输比特数 long times=(endTime-startTime)/1000; // 总耗时(/s) double speed1=((double) bitNums)/(double)(times*1024*1024);// 网速 int speed2= (int) (npackets/times); System.out.println("**************************"); System.out.println("发包类型:Signed CPacket"); System.out.println("发包负载:"+size+" byte, 总长度:"+(size+80)+" byte"); System.out.println("发包个数:"+npackets); Date date=new Date(); date.setTime(startTime); System.out.println("发包开始时间:"+date); date.setTime(endTime); System.out.println("发包结束时间:"+date); System.out.println("发包总耗时:"+times+" s"); System.out.println("发包速率1:"+speed1+"Mbps"); System.out.println("发包速率2:"+speed2+"个CPacket/s"); System.out.println("**************************"); } @Test public void testSendCPacketByTCP_UnSign() throws ComponentException, LogicFaceException { int size=8000; //发包负载 long npackets=1000000; // 初始化face LogicFace face = new LogicFace(); face.initWithTcp("127.0.0.1", 13899); // 记录时间 long startTime=System.currentTimeMillis(); // 循环构造包、发包 for (int i = 0; i < npackets; i++) { // 构造CPacket CPacket cPacket = new CPacket(); byte[] value = new byte[size]; cPacket.payload.setValue(value); Identifier name = new Identifier("/wefree"); Identifier nameTo = new Identifier("/wf"); cPacket.setSrcIdentifier(name); cPacket.setDstIdentifier(nameTo); // 发包 face.sendCPacket(cPacket); System.out.println(i); } long endTime=System.currentTimeMillis(); // 计算发包速率 cpacket头部长度约为80 long bitNums= npackets *(size+80)*8; // 总传输比特数 long times=(endTime-startTime)/1000; // 总耗时(/s) double speed1=((double) bitNums)/(double)(times*1024*1024);// 网速 int speed2= (int) (npackets/times); System.out.println("*************TCP*************"); System.out.println("发包类型:CPacket"); System.out.println("发包负载:"+size+" byte, 总长度:"+(size+80)+" byte"); System.out.println("发包个数:"+npackets); Date date=new Date(); date.setTime(startTime); System.out.println("发包开始时间:"+date); date.setTime(endTime); System.out.println("发包结束时间:"+date); System.out.println("发包总耗时:"+times+" s"); System.out.println("发包速率1:"+speed1+"Mbps"); System.out.println("发包速率2:"+speed2+"个CPacket/s"); System.out.println("*************TCP*************"); } }