Android 根据操作系统提供各种数字的Websocket

Android 根据操作系统提供各种数字的Websocket,android,ios,xcode,tcp,websocket,Android,Ios,Xcode,Tcp,Websocket,我正在做一个小测试,每0.5秒使用Node.js服务器向客户端发送一个短字符串(4-8字节)。客户端使用iOS/Android或web浏览器。客户端不会将任何内容发送回服务器,我想TCP-ACK除外。奇怪的是,当我使用XCode network report在iOS中调试应用程序时,我只能看到客户端在连接建立时(可能在HTTP握手期间)发送一些字节(大约500字节)。剩余的时间零数据从设备流出,只有数据进入。当在Chrome中接收数据并使用Nettop跟踪数据时,可以获得相同的结果 令人困惑的是

我正在做一个小测试,每0.5秒使用Node.js服务器向客户端发送一个短字符串(4-8字节)。客户端使用iOS/Android或web浏览器。客户端不会将任何内容发送回服务器,我想TCP-ACK除外。奇怪的是,当我使用XCode network report在iOS中调试应用程序时,我只能看到客户端在连接建立时(可能在HTTP握手期间)发送一些字节(大约500字节)。剩余的时间零数据从设备流出,只有数据进入。当在Chrome中接收数据并使用Nettop跟踪数据时,可以获得相同的结果

令人困惑的是,在Android上,当使用Android profiler/Battery Historian/TrafficStats检查网络使用情况时,进入设备的数据量几乎与进入设备的数据量相同。我尝试过使用不同的库来实现Websocket,并使用不同的Android设备

我很难相信安卓系统发出的ACK和收到的信息一样大,尽管它只是一个由四个字符组成的小字符串

因此,我的问题是:

  • 这种情况可能是Nettop/XCode网络报告只是忽略了所有的ACK,所以实际上在Chrome/iOS中发送的数据和在Android中发送的数据一样多吗

  • 安卓系统中使用的库有什么“错误”吗?或者它的操作系统有什么问题吗

  • ACK是否可以像一个包含4个字符的简单TCP包那样大

  • 使用Websocket时的结果如下所示

    使用Android电池Historian时接收/传输的数据

    使用网络报告在iOS上接收/传输的数据

    ACK是否可以像一个包含4个字符的简单TCP包那样大

    ACK由IP和TCP报头组成,没有有效负载。对于IPv4,这意味着至少20字节的IP头和20字节的TCP头,即40字节。有效负载为4字节的数据包仅比4字节大,即44字节或仅10%

    Android的网络报告显示68350字节,而61370字节,相差11%。这与预期的差异相符


    我不熟悉iOS在这里测量的内容,但它可能只测量应用程序负载(即4个字节),或者干脆忽略没有负载的数据包,即ACK。

    您的nodejs代码是什么?这听起来像是测量工具的不同。XCode可能只在应用层进行测量,而不计算TCP内务管理的内容,而Android工具可能在计算发送的所有字节,不管是哪一层。初始连接请求将包括客户端保存的与该域相关联的任何cookie,因此,根据该域以前的浏览历史,不同客户端之间的cookie可能会有很大差异。