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

Android 4.0에서는 Linux 네트워크 인터페이스에서 보고한 통계가 시간 경과에 따라 기록되며 네트워크 할당량 한도를 적용하고 사용자에게 표시되는 차트를 렌더링하는 등의 작업에 사용됩니다.

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

일반적으로 이동통신사는 인터넷 계층(IP)에서 데이터 사용량을 측정합니다. Android 4.0에서 이 접근 방식에 맞추기 위해 Google에서는 관심 있는 커널 기기의 경우 dev_get_stats()에서 반환하는 rx_bytestx_bytes 값이 전송된 인터넷 계층(IP) 바이트를 정확하게 반환한다는 점을 이용합니다.  하지만 다른 기기의 경우에는 다를 수도 있습니다. 현재 이 기능은 이러한 특성을 기반으로 합니다. 새 드라이버에는 이 속성도 있어야 하고 dev_get_stats() 값은 이더넷 헤더와 같은 하위 네트워크 계층의 캡슐화 오버헤드를 포함해서는 안 됩니다. 또한 무시해도 되는 정도가 아니라면 ARP와 같은 다른 트래픽도 포함하지 않는 것이 좋습니다.

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