- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Linux 中进行一些有关路径 MTU 发现的实验。据我从 RFC 1191 中了解到,如果路由器收到一个具有非零 DF 位的数据包,并且该数据包无法在没有分段的情况下发送到下一个主机,那么路由器应该丢弃该数据包并将 ICMP 消息发送到初始主机。发件人。
我在我的计算机上创建了多个虚拟机,并通过以下方式链接它们:
VM1 (192.168.100.2)
R1 (192.168.100.1,
192.168.150.1)
R2 (192.168.150.2,
192.168.200.1)
VM2 (192.168.200.2)
Rx - 是安装了 Linux 的虚拟机,它们有两个带有静态路由的网络接口(interface)。从 V1 ping V2 成功,反之亦然。
traceroute from 192.168.100.2 to 192.168.200.2 (192.168.200.2)
1 192.168.100.1 (192.168.100.1) 0.437 ms 0.310 ms 0.312 ms
2 192.168.150.2 (192.168.150.2) 2.351 ms 2.156 ms 1.989 ms
3 192.168.200.2 (192.168.200.2) 43.649 ms 43.418 ms 43.244 ms
tracepath 192.168.200.2
1: ubuntu-VirtualBox.local 0.211ms pmtu 1500
1: 192.168.100.1 0.543ms
1: 192.168.100.1 0.546ms
2: 192.168.150.2 0.971ms
3: 192.168.150.2 1.143ms pmtu 750
3: 192.168.200.2 1.059ms reached
网段 100.x 和 150.x 的 MTU 1500。网段 200.x 的 MTU 750。
我正在尝试发送启用 DF 的 UDP 数据包。事实上,如果数据包大小大于 750,VM1 根本不会发送数据包(我收到 send() 调用的 EMSGSIZE 错误)。
但是,我期望大小超过 1500 的数据包出现这种行为。并且我期望 VM1 向 R1 发送大小在 750 到 1500 之间的数据包,并且 R1(或 R2)丢弃此类数据包并返回 ICMP 数据包到VM1。但这并没有发生。
有两个问题:
1)为什么?
2) 是否可以根据 RFC 1191 设置我的虚拟网络来接收 ICMP 数据包?
谢谢。
最佳答案
VM1 可能缓存了 PMTU 信息。默认情况下,这些缓存条目的超时时间为 10 分钟。您可以通过写入/proc/sys/net/ipv4/route/mtu_expires(秒)来更改超时。
对于您的实验,请尝试在发送 1500 字节数据包之前刷新缓存(删除 PMTU 缓存):
echo "0" > /proc/sys/net/ipv4/route/flush
您将收到一条需要 ICMP 分段的消息,该消息将再次填充此目的地的 PMTU 条目!因此,您需要在重试实验之前不断刷新此缓存。
关于icmp - 路径 MTU 发现 - ICMP 响应在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6789305/
获取 MTU 大小值的 POSIX 函数是什么??谢谢。 最佳答案 不,没有通用的 POSIX 函数。您可以做的最好的事情是在套接字上调用 GET_MTU/SIOCGIFMTU ioctl,但这不在
我是 BLE 开发的新手。我想通过 BLE 连接以最大吞吐量发送大量数据。 我有一个在 Linux 上运行的 GATT 服务器,以及一个在 Android 上作为应用程序运行的客户端。我创建了一个具有
我想通过ifconfig docker0 mtu 1400将docker0 mtu修改为1400,并且成功。 但过了一会儿,MTU回到1500。请帮忙,如何在我的K8S集群中修改docker0。 最佳
我是一名新手,正在尝试一些网络编程。我正在通过多播读取数据(请参见下面的代码),并且想要找到最大传输单元(MTU)或我可以读取的传输单元。任何人都可以指导我找到来源或方法来做到这一点。谢谢。 tr
我想知道是否有任何方法可以调整(在 Linux 系统上)给定套接字的 MTU。 (使 IP 层分段成比实际设备 MTU 更小的 block )。 当我说对于给定的套接字时,我并不是指在拥有套接字的应用
ifconfig 1.2.3.4 mtu 1492 这会将传入、传出数据包或两者的 MTU 设置为 1492?我认为它仅适用于传入 最佳答案 TLDR:两者都有。它只会传输有效载荷长度小于或等于该大小
我用 BluetoothGatt.requestMtu(512)在我的安卓应用程序中。 第一次效果很好 但是在 Mtu 自动更改为 23 之后(默认) 我不知道是什么问题... 这是一个日志 `D/B
我正在开发与 BLE 设备通信的应用程序。我可以轻松地在特征上写 20 个字节,但是当它超过 20 个字节时就会产生问题。我正在使用 mBluetoothGatt.requestMtu(512); 成
我的手机在向网络发送数据时出现问题。我认为我必须更改其 MTU 大小才能使其正常工作。 最佳答案 要更改 MTU 设置,您需要对手机进行 Root。在论坛中搜索如何操作。之后你需要安装一个终端模拟器并
我在 iOS 7 中使用 CoreBluetooth,并成功地让两台设备在彼此之间发送大量数据(一个是中央设备,一个是外围设备)。 在 iPhone 5 和 4S 之间我有一个 20 字节的 MTU,
我需要将 MTU 永久更改为 1500。我所说的永久是指如果我重新启动系统或将执行 service network restart,它将始终为 1500。 我关注了这篇文章http://www.cyb
如何找到连接之间的路径 MTU?我需要它来定义我的 UDP 连接的数据包大小。 .Net 中有 Path MTU Discovery 之类的东西吗? 最佳答案 我找到了一种方法(解决方法)来在 C#
我正在开发一个应用程序,我需要在多个 UDP 数据包中向客户端发送大量数据,我如何以编程方式确定我的 UDP 套接字的 MTU? 我需要能够在 Windows 和 Linux 上执行此操作。 最佳答案
对智能手机上 BLE 的参数进行一些跨平台研究。 我有 iOS 设备,因此嗅探了适用于 iOS 的 ATT_Exchange_MTU_Req/Rsp。 有没有人为 Android 做过同样的事情并获得
写入器程序使用固定缓冲区的多次写入发送几 MB(几乎没有延迟)。处理程序在 EPOLLOUT | 中注册。 EPOLLET 标志。 MTU=16KB,写入缓冲区 = 4KB 或更多。 write(..
我的 RAW-Socket 有一个小问题。我必须捕获网络中的数据包才能修改它们。为此,我必须添加特殊数据,例如时间戳。一切正常,但我的 MTU (Linux) 有问题。 如果上层的某些应用程序生成接近
我正在使用 ioctl(s, SIOCSIFMTU, (caddr_t)&ifr) 更改接口(interface)的 MTU。 代码类似这样 struct ifreq ifr; ifr.ifr_add
当我通过 TCP 套接字连接时,我的设备出现问题,因为客户端在 SYN 连接中发送 MSS,并且服务器(我的设备)使用相同的 MSS 设置,但我不想在我的设备中设置此 MSS。 那么我怎样才能在MSS
class A : boost::noncopyable { int type; A(int type, enum e) : type(type) { /* ... */ } } ty
我正在学习内核模块并且是新手。我想更改 eth0 的 MTU 大小。这是我写的模块程序。 本意是将 eth0 的 MTU 大小更改为 1000。但它没有得到更改。谁能告诉我,我错过了什么。如果方法本身
我是一名优秀的程序员,十分优秀!