网络接口扫盲

(1)网络接口的命名

  这里并不存在一定的命名规范,但网络接口名字的定义一般都是要有意义的。例如:

  eth0: ethernet的简写,一般用于以太网接口。

  wifi0:wifi是无线局域网,因此wifi0一般指无线网络接口。

  ath0: Atheros的简写,一般指Atheros芯片所包含的无线网络接口。

  lo:   local的简写,一般指本地环回接口。

  (2)网络接口如何工作

  网络接口是用来发送和接受数据包的基本设备。

  系统中的所有网络接口组成一个链状结构,应用层程序使用时按名称调用。

  每个网络接口在linux系统中对应于一个struct net_device结构体,包含name,mac,mask,mtu…信息。

  每个硬件网卡(一个MAC)对应一个网络接口,其工作完全由相应的驱动程序控制。

  (3)虚拟网络接口

  虚拟网络接口的应用范围非常广泛。最着名的当属“lo”了,基本上每个linux系统都有这个接口。

  虚拟网络接口并不真实地从外界接收和发送数据包,而是在系统内部接收和发送数据包,因此虚拟网络接口不需要驱动程序。

  虚拟网络接口和真实存在的网络接口在使用上是一致的。

  (4)网络接口的创建

  硬件网卡的网络接口由驱动程序创建。而虚拟的网络接口由系统创建或通过应用层程序创建。

  驱动中创建网络接口的函数是:register_netdev(struct net_device *)或者register_netdevice(struct net_device *)。

  这两个函数的区别是:register_netdev(…)会自动生成以”eth”作为打头名称的接口,而register_netdevice(…)需要提前指定接口名称.事实上,register_netdev(…)也是通过调用register_netdevice(…)实现的。

  2、LINUX中的lo(回环接口)

  1) 什么是LO接口?

  在LINUX系统中,除了网络接口eth0,还可以有别的接口,比如lo(本地环路接口)。

  2) LO接口的作用是什么?

  假如包是由一个本地进程为另一个本地进程产生的, 它们将通过外出链的’lo’接口,然后返回进入链的’lo’接口.具体参考包过滤器的相关内容。

  PART2 实验:

  本地一个进程发起连接,到一个本地的daemon监听的内网IP地址(eth1: 10.1.1.1)的端口(8085),此时在eth1上是抓不到包的,在 lo 上抓到,说明使用的是本地回环接口lo,而网络层的IP地址则是内网IP地址.

原文链接: http://linux.chinaitlab.com/admi...

### 以太网基础介绍 以太网是一种用于将多台计算机或其他网络设备连接在一起并实现通信的技术,主要用于构建局域网(LAN)。它不仅限于局域网的应用,在某些情况下也可以扩展到更广范围的网络环境。以太网技术通过一系列标准化协议来规定数据如何被封装、发送以及接收[^2]。 #### 数据帧结构 以太网的核心概念之一是其数据帧结构。每一帧都包含了源地址、目标地址、数据负载以及校验字段等内容。这种设计使得以太网能够在复杂的网络环境中可靠地传递信息[^1]。 #### 工作原理概述 以太网交换机作为数据链路层的关键组件,负责管理多个端口之间的流量分配与转发操作。当一台主机向另一台主机发送数据包时,该过程大致如下: 1. **学习阶段**: 当某个设备首次接入交换机的一个特定端口并向其他节点广播消息时,交换机会记录下此设备MAC地址及其对应的物理接口编号。 2. **过滤功能**: 接收到的数据帧如果只针对单一目的地,则仅会沿着最短路径传送到指定出口;而对于未知目的或者组播/广播类别的数据流则会被复制分发给所有可能关联的方向上除原输入外其余各条线路之上直到找到确切匹配为止。 3. **消除回路冲突机制(Cut-through vs Store-and-forward)**: 存在两种主要模式处理接收到的信息单元——快速转发方式即cut-through mode允许几乎立即开始重新传输新到达的部分字节序列而无需等待整个报文完全抵达后再做决定; 而store-and-forward method 则先缓冲完整的消息体再执行后续动作, 这样可以提供更好的错误检测能力但由于增加了延迟所以通常适用于高可靠性需求场景. ```python # 示例代码展示简单的 MAC 地址表更新逻辑 class Switch: def __init__(self): self.mac_table = {} def learn_mac(self, mac_address, port_number): """ 更新MAC地址表 """ self.mac_table[mac_address] = port_number def forward_frame(self, frame): destination_mac = frame['destination'] if destination_mac in self.mac_table: output_port = self.mac_table[destination_mac] print(f"Forwarding to port {output_port}") else: # 如果不知道目标位置,则泛洪至所有端口 print("Flooding the frame to all ports except incoming one.") ``` 上述脚本片段模拟了一个简化版的学习型桥接器行为模型,其中`learn_mac()`函数用来维护内部状态关于哪些硬件标识符映射到了哪个实际插槽号上面去;而另一个方法则是依据当前已知情报指导下一步行动方向要么精准投递要么广泛扩散出去寻找最终归属地点.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值