Bluetooth MTU
来源:互联网 发布:mysql 自带记录行号 编辑:程序博客网 时间:2024/05/22 16:42
转自 http://blog.csdn.net/stevenliyong/article/details/3720850
//Call requires API level 22 (current min is 21): android.bluetooth.BluetoothGattServerCallback#onMtuChanged@Overridepublic void onMtuChanged(BluetoothDevice device, int mtu) { super.onMtuChanged(device, mtu);}在编写Android Ble服务端中的监听器BluetoothGattServerCallback时遇到该错误,然后就百度了下Mtu的定义,于是就找到了这篇文章。
最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据报小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。
在网络上如果本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。把本机的MTU设成比网关的MTU小或相同,就可以减少丢包。
蓝牙也一样,如果蓝牙发送方设备的MTU 值比接受端设备的MTU大, 大的数据包就会被拆开来传送,蓝牙传输速度就会降低. 蓝牙的MTU 值是在L2CAP(逻辑链路控制层)中定义的.
蓝牙官方推荐的值是最小48字节,默认672字节.
但是实际情况与是一些蓝牙设备特别是PC设备将MTU的默认值设的很高,
这样如果蓝牙设备接受端还是使用672字节的默认值,则PC类发送方设备数据传送到接受端速度就会显得很慢.
为了获得高的传输速度,接受端不得不牺牲内存为代价,将默认的MTU值也改大.
经过测试:
从VAIO笔记本传送1MB的文件到PXA板子上.
如果板子端 MTU值是 672
我们只能得到20KB(1MB/50s)的速度
而将板子端MTU值改为 60000
我们就可以得到75KB(1MB/13s)的速度了
相差还是很大的! 付出的代价是蓝牙数据接受端每个L2CAP连接的内存消耗增加了!
0 0
- Bluetooth MTU
- Bluetooth MTU
- MTU
- MTU
- mtu
- mtu
- mtu
- MTU
- mtu
- mtu
- MTU
- MTU
- Bluetooth
- bluetooth
- Bluetooth
- bluetooth
- Bluetooth
- bluetooth
- 使用spring-data-redis进行对redis的操作,封装的一些操作方法
- 25.html标签居然可以写事件
- SQL Server连接Oracle详细步骤
- HDU 1257 最少拦截系统
- SVN服务器搭建和使用(二)
- Bluetooth MTU
- Python Tricks(十九)—— switch 的实现
- GSON方式生成和解析json数据
- Unity Mecanim动画的实现(六):动画事件,实现动画过程中的事件处理
- Runnabel 与Thread
- Hibernate 参数设置一览表
- 指针和引用的区别
- Android TextUtils类介绍
- 使用AudioRecord实现暂停录音功能