相关文件

H:\webrtc-20210315\webrtc-20210315\webrtc\webrtc-checkout\src\rtc_base\network.h

Networkmanager类关系图

image.png
1、BasicNetworkManager
重要的成员变量和成员函数:
thread:知道当前是在哪个线程;
network_monitor
: 监控网络变化
CreateNetworks:查找我们系统中都有哪些网络设备,并获取信息
QueryDefaultLocalAddress:用于获取本地绑定的socket,知道自己在使用哪个ip地址和端口
StartNetworkMonitor/StopNetworkMonitor:启动/停止网络监控器,被StartUpdating/StopUpdating调用。
2、NetworkManagerBase
重要的成员变量和成员函数:
networks: 遍历出的所有网卡信息
ipv4_any_address_network
:默认ipv4网卡信息
ipv6any_address_network: 默认ipv6网卡信息
void MergeNetworkList(const NetworkList& list, bool* changed); 将可以合并的网卡信息进行合并;
3、NetworkManager
Initialize():初始化
StartUpdating/StopUpdating:启动/停止网络监控
DumpNetworks(): 将所有网卡信息输出到终端上去

4、其他
MdnsResponderProvider类,是webrtc的新功能,隐藏ip地址,防止ip地址泄漏。防止信令交换后,一旦对端获取到本端的公网ip后,可能会被不良分子攻击利用。

创建Networks过程

image.png

触发的时间点

image.png
image.png

BasicNetworkManager::StartUpdating

image.png

  1. void BasicNetworkManager::StartUpdating() {
  2. thread_ = Thread::Current();
  3. // Redundant but necessary for thread annotations.
  4. RTC_DCHECK_RUN_ON(thread_);
  5. if (start_count_) {
  6. // If network interfaces are already discovered and signal is sent,
  7. // we should trigger network signal immediately for the new clients
  8. // to start allocating ports.
  9. if (sent_first_update_)
  10. thread_->Post(RTC_FROM_HERE, this, kSignalNetworksMessage);
  11. } else {
  12. thread_->Post(RTC_FROM_HERE, this, kUpdateNetworksMessage);
  13. StartNetworkMonitor();
  14. }
  15. ++start_count_;
  16. }
  17. void BasicNetworkManager::StopUpdating() {
  18. RTC_DCHECK_RUN_ON(thread_);
  19. if (!start_count_)
  20. return;
  21. --start_count_;
  22. if (!start_count_) {
  23. thread_->Clear(this);
  24. sent_first_update_ = false;
  25. StopNetworkMonitor();
  26. }
  27. }