加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长资讯 > 动态 > 正文

Linux网桥工作原理与实现

发布时间:2021-04-01 09:48:05 所属栏目:动态 来源:互联网
导读:_add_bridge() 函数主要完成以下几个工作: 调用 new_nb() 函数创建一个 网桥 设备对象。 调用 __dev_get_by_name() 函数检查设备名是否已经被注册过,如果注册过返回错误信息。 将 网桥 设备对象添加到 bridge_list 链表中,内核使用 bridge_list 链表来保

_add_bridge() 函数主要完成以下几个工作:

  • 调用 new_nb() 函数创建一个 网桥 设备对象。
  • 调用 __dev_get_by_name() 函数检查设备名是否已经被注册过,如果注册过返回错误信息。
  • 将 网桥 设备对象添加到 bridge_list 链表中,内核使用 bridge_list 链表来保存所有 网桥 设备。
  • 调用 register_netdev() 将网桥设备注册到网络设备中。

从上面的代码可知,网桥 设备使用了 net_bridge 结构来描述,其定义如下:

 net_bridge 结构中,比较重要的字段为 port_list 和 hash:

  • port_list:网桥端口列表,保存着绑定到 网桥 的网络接口列表。
  • hash:保存着以网络接口 MAC地址 为键值,以网桥端口为值的哈希表。

网桥端口 使用结构体 net_bridge_port 来描述,其定义如下:

见,要将 网络接口设备 绑定到一个 网桥 上,需要使用 net_bridge_port 结构来关联的,下面我们来分析怎么将一个 网络接口设备 绑定到一个 网桥 中。

网桥是工作在 TCP/IP 协议栈的第二层,也就是说,网桥能够根据目标 MAC 地址对数据包进行广播或者单播。当目标 MAC 地址能够从网桥的 hash 表中找到对应的网桥端口,说明此数据包是单播的数据包,否则就是广播的数据包。

2. 将网络接口绑定到网桥

要将一个 网络接口设备 绑定到一个 网桥 上,可以使用以下命令:

add_if() 函数主要完成以下工作:

  • 调用 new_nbp() 函数创建一个新的 网桥端口 并且添加到 网桥 的 port_list 链表中。
  • 将网络接口设备设置为 混杂模式。
  • 调用 br_fdb_insert() 函数将新建的 网桥端口 插入到网络接口 MAC地址 对应的哈希表中。

也就是说,br_add_if() 函数主要建立 网络接口设备 与 网桥 的关系。

3. 网桥中的网络接口接收数据

当某个 网络接口 接收到数据包时,会判断这个 网络接口 是否绑定到某个 网桥 上,如果绑定了,那么就调用 handle_bridge() 函数处理这个数据包。handle_bridge() 函数实现如下:

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读