네트워크 인터페이스 통계 개요

Android 4.0에서 Linux 네트워크 인터페이스에서 보고한 통계는 시간이 지남에 따라 기록되며 네트워크 할당량 제한을 적용하고 사용자가 볼 수 있는 차트 등을 렌더링하는 데 사용됩니다.

각 네트워크 장치 드라이버(Wi-Fi 포함)는 표준 커널 장치 수명 주기를 따라야 하고 dev_get_stats() 를 통해 올바른 통계를 반환해야 합니다. 특히 반환된 통계는 인터페이스가 활성 상태인 동안 엄격하게 단조롭게 유지되어야 합니다. 드라이버는 unregister_netdev() 또는 register_netdevice_notifier() / register_inetaddr_notifier() / register_inet6addr_notifier() () 로 등록된 콜백에 대해 NETDEV_UNREGISTER 이벤트를 생성하는 동등한 작업을 성공적으로 완료한 후에만 통계를 재설정할 수 있습니다.

이동통신 사업자는 일반적으로 인터넷 계층(IP)에서 데이터 사용량을 측정합니다. Android 4.0에서 이 접근 방식을 일치시키기 위해 우리는 커널 장치의 경우 dev_get_stats() 에서 반환된 rx_bytestx_bytes 값이 전송된 인터넷 계층( IP ) 바이트를 정확히 반환한다는 사실에 의존합니다. 그러나 다른 장치의 경우 그렇지 않을 수 있음을 이해합니다. 현재 이 기능은 이 특성에 의존합니다. 새 드라이버에도 해당 속성이 있어야 하며 dev_get_stats() 값은 하위 네트워크 계층(예: 이더넷 헤더)의 캡슐화 오버헤드를 포함하지 않아야 하며 무시할 수 있는 경우가 아니면 다른 트래픽(예: ARP)을 포함하지 않는 것이 좋습니다.

Android 프레임워크는 ConnectivityServiceNetworkStateTracker 와 연결된 네트워크 인터페이스에서만 통계를 수집합니다. 이를 통해 프레임워크는 유형(예: TYPE_MOBILE 또는 TYPE_WIFI ) 및 가입자 ID(예: IMSI)를 포함하여 각 네트워크 인터페이스를 구체적으로 식별할 수 있습니다. 데이터를 라우팅하는 데 사용되는 모든 네트워크 인터페이스는 통계가 올바르게 설명될 수 있도록 NetworkStateTracker 로 표시되어야 합니다.