Bluetooth MTU

转自 http://blog.csdn.net/stevenliyong/article/details/3720850

//Call requires API level 22 (current min is 21): android.bluetooth.BluetoothGattServerCallback#onMtuChanged
@Override
public 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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值