• UDP的MTU发现


    一些典型的MTU值: 

    网络:                                    MTU字节
    超通道                                  65535
    16Mb/s信息令牌环(IBM)               17914
    4Mb/s令牌环(IEEE802.5)              4464
    FDDI                                   4352
    以太网                                  1500
    IEEE802.3/802.2                         1492
    X.25                                    576
    点对点(低时延)                         296

        路径MTU:如果两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的MTU。重要的不是两台主机所在网络的MTU的值,重要的是两台通信主机路径中的最小MTU。它被称作路径MTU。

    对于不同的PATH 的MTU,需要实现前期的MTU探索算法:

    1、把socket设置为ip包不可分片模式 ,这样从client发送一系列不同大小的包到server,超过MTU的包自然会被丢弃。这样可以得到路径MTU值。

    2、java 实例

    1. Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
    2. int count = 0;
    3. while (networkInterfaces.hasMoreElements()) {
    4. NetworkInterface next = networkInterfaces.nextElement();
    5. System.out.println("getName获取网络设备名称=" + next.getName());
    6. System.out.println("getDisplayName获得网络设备显示名称=" + next.getDisplayName());
    7. System.out.println("getMTU获得最大传输单元=" + next.getMTU());
    8. System.out.println("**********************" + count++);
    9. }
    1. import java.net.NetworkInterface;
    2. public static int getMaximumTransferUnit() {
    3. try {
    4. return NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getMTU();
    5. } catch (Throwable throwable) {
    6. try {
    7. boolean foundDevice = false;
    8. int lowestMaximumTransferUnit = Integer.MAX_VALUE;
    9. for (Enumeration<NetworkInterface> networkInterfaces = NetworkInterface
    10. .getNetworkInterfaces(); networkInterfaces.hasMoreElements(); ) {
    11. NetworkInterface networkInterface = networkInterfaces.nextElement();
    12. int maximumTransferUnit = networkInterface.getMTU();
    13. if (maximumTransferUnit < lowestMaximumTransferUnit
    14. && maximumTransferUnit >= RakNet.MINIMUM_TRANSFER_UNIT) {
    15. lowestMaximumTransferUnit = maximumTransferUnit;
    16. foundDevice = true;
    17. }
    18. }
    19. if (foundDevice == false) {
    20. throw new IOException("Failed to locate a network interface with an MTU higher than the minimum ("
    21. + RakNet.MINIMUM_TRANSFER_UNIT + ")");
    22. }
    23. return lowestMaximumTransferUnit;
    24. } catch (Throwable throwable2) {
    25. throwable2.printStackTrace();
    26. return -1;
    27. }
    28. }
    29. }​
    30. ​​

  • 相关阅读:
    XSS攻击(4), XSS扫描工具
    3Dslicer医学图像三维坐标系(xyz,RAS,IJK)差异及处理
    c++——map和set的封装
    C. Rooks Defenders - 树状数组
    深圳市商务局2022年电子商务创新发展扶持计划跨境电商通关监管场所服务奖励项目申报指南
    Android APP应用工程师转Android Framework系统工程师(仅此一篇够了)
    字节面试官:“这92道 Spring Boot 面试题都答不上来?”
    解决局域网内因为不在同一网段无法ping通的问题
    完全透彻了解一个asp.net core MVC项目模板1
    Spring框架系列(3) - 深入浅出Spring核心之控制反转(IOC)
  • 原文地址:https://blog.csdn.net/hqiangtai/article/details/125393859