问题标签 [mtu]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 读取多播时如何测量从服务器接收的数据包最大传输单元(MTU)
我是一个新手,正在从事一些网络编程。我正在通过多播读取数据(请参见下面的代码),并希望找到最大传输单元 (MTU) 或我可以读取的传输单元。任何人都可以指导我找到一个来源或一种方法来做到这一点。谢谢你。
networking - 使用 hping2 验证巨型帧
我想知道是否有人使用 hping2/3 来验证巨型帧。
例如,我知道你可以这样做:
使用 ping 执行此任务,但我不想使用 ICMP 来检查这一点,因为 ICMP 被某些环境和数据中心阻止,而 TCP/IP 无处不在。
有人知道等效的 hping2/3 命令以及它是如何工作的吗?
非常感谢
ios - 方法外围:didWriteValueForCharacteristic:错误:未调用
我使用以下调用通过 BLE 发送数据
当 dataPiece 大小为180 bytes
或小于时,一切正常:接受设备接收所有数据,在调用设备上调用相应的回调 ( peripheral: didWriteValueForCharacteristic: error:
)。当大小变大时>180
(180 bytes
但是在后一种情况下,不会调用传输设备上的回调。
还[peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse]
返回512
超过180
,所以我希望200
工作正常。
我错过了什么(显然是的,但是什么)?
ios - 在 iOS 上协商 BLE MTU
我目前正在为 iOS 开发一个 BLE 应用程序。在我的应用程序中,我需要实现一个分段协议来使用 BLE 发送大量数据。我的应用程序需要具有中心角色。
我的问题是我无法获得协商 MTU。我可以得到maximumWriteValueLength
我的外围设备,但它比我的大,找不到maximumWriteValueLength
我的中心对象。
有人知道找到协商 MTU 的方法或访问CBCentral
my 对象的方法CBCentralManager
吗?
ios - 在 iOS 中央设备和外围设备上协商 BLE MTU 和特征大小
我有一个应用程序,它将充当 BLE 中心(扫描外围设备),在 iOS 8 及更高版本上运行。此外,我有一个自定义附件充当外围设备(宣传具有自定义特征的自定义服务)。
我发现默认的 MTU 和特征大小是 20 字节,但它们似乎可以协商到 512 字节。更大的尺寸对我的应用程序非常有用,因为我打算以突发方式发送大约 20KB 的数据,大约每小时 10 次。
据我了解,外围设备和中央设备都应在连接阶段协商 MTU(和特性?)大小。
这会自动发生还是我必须在我的中央应用程序中编写一些特殊代码?
如何在我的应用程序中确定当前 MTU 和支持的最大特征大小?
在单个连接会话期间大小会保持不变还是会突然改变,然后我的应用程序如何找出改变发生的时间?
我一直在阅读 BLE 规范文档和 Apple 开发人员文档,但仍然不清楚 BLE MTU 和特征大小协商在实践中是如何工作的,以及如何在我的代码中正确处理它。
如有必要,我也许可以联系外围配件制造商并要求他们进行一些软件调整;因此我可以确定它们将支持更大的 MTU 大小。我只是不确定我应该在 iOS 端做什么。
linux - Linux gretap - net/ipv4/ip_gre.c - 如何设置 key->tun_flags 的值
我正在尝试通过两个 Linux(Centos 6)主机之间的 gretap 隧道传输一些克隆的 IP pkts,以便为 IDS 风格的设备提供数据。
鉴于 PMTU 发现不适用于我尝试传输的克隆 pkts,我必须找到一种方法来清除 GRE pkt 标头中的 DF 位,以便它可以被发送主机分段并重新组装在另一端。否则,在添加 GRE 开销后,较大的 pkts(...接近 1500 字节 nmark)将被静默丢弃。
我找到了一个可行的解决方案,其中涉及配置 iptables 插件以清除所述 DF 位,但该解决方案有点过于复杂。见这里:http ://backreference.org/2013/07/23/gre-bridging-ipsec-and-nfqueue/ 。
我查看了 net/ipv4/ip_gre.c 的源代码,在那里我发现了这些有趣的行(从这里开始的第 432 行附近:https ://github.com/torvalds/linux/blob/master/net /ipv4/ip_gre.c ):
特别是第一行似乎使某些逻辑能够有条件地设置传出 GRE pkt 上的 DF 位。假设我正确理解了代码,这将允许 pkts 在没有设置 DF 位的情况下离开我的 Linux 主机,这反过来又应该允许碎片化。
我一直在试图弄清楚如何设置 key->tun_flags 的值,以便条件语句导致“0”,但我找不到任何允许我这样做的 CLU(ip li, ifconfig、udevadm 等...)。
有人知道如何操纵 key->tun_flags 的值吗?
android - 在实践中协商 Android 和 iOS 中央/外围设备上的蓝牙 LE ATT MTU
在 Android 上,我们有requestMtu
和onMtuChanged
,这似乎意味着我们必须手动协商 MTU 大小,如果中央设备和外围设备都是基于 Android 的(但我可能错了,它可能在连接时自动发生而无需我干预)。仅讨论写入请求(无响应写入)操作的文档requestMtu
并没有提及通知,并且还说它是用于“连接”但没有提及它是来自中央还是外围。
因此,尚不清楚连接的哪一侧可以/应该使用requestMtu
以及它如何影响通知大小和写入大小?
在 iOS 上,似乎没有直接的替代方案requestMtu
,我们只有central.maximumUpdateValueLength
(我猜是从 iOS 7 开始)。它的文档(与 Android 的文档相反)说这maximumUpdateValueLength
仅用于通知更新,这意味着它仅在外围设备端有用,因为您将通知从外围设备发送到中央。
但是写呢?如果我正在写入(再次没有响应)从中央到外围的特征,我如何知道我的批量大小以确保高效写入?
考虑到混合系统(Android/iOS 中央/外围),这一切都变得令人困惑,并且完全不清楚哪一方以及何时可以/应该请求/响应 MTU 大小协商。是否有任何文档描述 ATT MTU 交换选项,对应于真正的 Android 和 iOS 实现?
sockets - Windivert 可以注入大于 MTU 的数据包吗?
我使用了winpcap,但在“pcap_sendpacket”上出现错误,我将数据包分割成MTU大小的小IP数据包,即使wireshark在我分割的数据包中没有显示错误,也无法正常工作。
现在我有这个问题,windivert 可以注入大于 MTU 的数据包吗?我需要知道在尝试禁用“大发送卸载”之前,如果我禁用它,我将能够发送具有大于 MTU 的 winpcap 和 windivert 的数据包?这是解决这个问题的唯一方法吗?
有时在我的程序中,我必须转发我在 winpcap 中收到的大小为 2300 字节的数据包,而我的 MTU 有 1500,但它失败了。如果我收到带有 windivert 的数据包并使用 windivert 发送它,我会出错吗?是否有禁用 LSO 的解决方案?
问候。
android - 我可以请求将 MTU 从外围设备更改为 android 设备(即使在较旧的 API 中)?
我有一个硬件作为外围设备,我想读取它的所有内存,它有 1081344 字节。使用 23 字节的标准大小(20 字节对数据有用 -> 请参阅编辑以了解它是如何工作的)读取所有内存需要一分钟多的时间,所以我想提高吞吐量。为此,我可以使 MTU 更大,正如我在这篇有用的文章 ( https://punchthrough.com/blog/posts/maximizing-ble-throughput-part-2-use-larger-att-mtu ) 中看到的那样。听说用较大的 MTU 传输不稳定。是不是太不稳定以至于不值得使用,或者不管不稳定,它都能提供更好的吞吐量?
问题是android仅从API 21提供requestMtu方法。我想知道是否可以从外围更改MTU而无需在android端实现任何回调或函数(这样它可以在18之后的任何API上工作)。从这个答案(Requesting MTU with Bluetooth Low Energy connection on Android 4.3-4.4 (API 18-20))看来是可能的,但我不确定我是否应该在android端做一些实现。
如果 android 不接受这个请求,是否有另一种方法可以在不依赖 API 21 的新功能的情况下更改 MTU?这个答案(Change the MTU or Packet Size for Bluetooth in Android?)让我相信这是可能的,但我不清楚它是如何完成的。
如果我可以向外围设备请求 MTU 大小(固件开发人员向我确认这是可能的),外围设备能否知道它是否成功?我认为使用它就足够了,因为我可以通过特性与我的外围设备进行通信,它可以告诉我请求是否被接受。我只是想知道是否可以相信 android 会接受并发送成功响应,或者在 21 之前的 API 上是否存在 23 字节 MTU 的限制。
由于在硬件上实现它需要一些时间,我想知道它是否值得尝试,或者是否绝对行不通。
编辑:外围设备现在一次更新一个包含 20 个字节的包的特性,并向我的中心发送更改通知。因此,块的划分是在服务器端完成的。我想要的是使这些块更大。