报文转发简介

1、二层转发
  这里讨论以太报文的二层转发,即基于MAC地址的转发。一般在交换机的二层口(说明1)上,通过MAC层将接口设置为支持混杂模式(说明2),性能允许(说明4)的情况下,将所有报文上送CPU,接口上收到报文以后,对于合法报文(说明3)(说明5),首先检查该MAC地址对目的MAC为0xFFFFFFFF的广播报文在VLAN内进行广播,对MAC地址第一个字节BIT0为1的多播报文,按照多播报文处理。对于单波报文,先查MAC地址表,如果查到,则将报文发往相应的接口;如果未查到,未知单播向VLAN内的所有接口进行广播;还有一种情况就是如果目的MAC就是本接口的MAC,则说明报文发往本机,报文上送CPU,对IP地址进行检查,如果目的IP为本VLAN接口的IP地址,则作为正常报文接收;如果IP地址不是本机VLAN接口的IP地址,则查路由表,将报文进行三层转发。
说明1:二层口即用MAC地址唯一标识出的以太口,无法配置IP地址,若要配置IP,需要建立一个VLAN,并将二层口划归该VLAN,然后为VLAN建立一个VLAN接口,VLAN接口是一个三层虚接口,可以通过vlan接口,间接的为其配置IP地址。 一般情况下,二层口都会默认属于一个VLAN。
说明2:混杂模式允许目的MAC不是本接口MAC的报文进行上送;非混杂模式先将本接口的MAC地址设置到MAC层,然后开启非混杂模式,MAC层将自动丢弃目的MAC为非本接口MAC的报文,三层口一般设置为非混杂模式,让MAC曾屏蔽不是发往本接口的报文。
说明3:报文上送CPU以后,CPU首先会判断报文合法性,长度不足64B的runt帧、长度不足64B并且CRC检查错误的帧、长度正常但是CRC检查错误的帧、长度超大的帧等都会被直接丢弃;另外,MAC芯片还可能丢弃字节检查出现不够8bit的un-aligned帧,前述报文也可能被某些MAC芯片直接丢弃,并在MAC寄存器中给出丢弃报文的统计。
说明4:对于非线速转发的设备,如果打入线速的流量,CPU处理不过来,端口上的收包BUFF不够用后,会有报文被直接丢弃,这些丢弃的报文不会被统计到。一般情况下,会开启端口上的流控功能,通过MAC芯片自动向对端发送PAUSE帧,以通知对方自己无法处理所有报文,要真正生效,需要对端解析PAUSE帧才行。
说明5:对于STP相关的BPDU等不需要参与转发的协议报文,直接由上层协议模块处理。
2、三层转发
如果接口收到的报文,目的MAC是本接口的MAC,但是目的IP并不是本接口的IP地址,那么就需要根据IP地址进行转发。三层转发根据路由表进行,路由表记录了本设备学习到的IP地址与接口的关系。路由表中的路由表项分为直连路由、静态路由和动态路由。直连路由由设备从与其直接相连的网络设备中获取到(说明1),报文转发优先选择直连路由指向的接口。静态路由是网络管理员手工配置的路由表项,优先级低于直连路由。动态路由是通过路由协议从别的路由器获取到的,在转发中优先级最低。在负载分担的场景中,可能为同一个IP地址制定多条不同的等价路由,可以将报文发往不同的接口。如果无法给报文找到路由信息,报文将被丢弃。
说明1:路由学习的一个重要手段就是ARP协议,如果没有为一个报文找到路由信息,并且某个接口与该报文的目的IP在一个网段,那么将通过改接口发送广播报文,询问是否有设备持有报文的目的IP,如果直连的网络中有设备,该设备回复报文,完成路由学习,报文将被转发。设备上有可能支持免费ARP功能,它将定制向网络发送特定的ARP报文,实时上报字节的IP/MAC地址,防止IP地址冲突。有一种基于ARP的攻击时向路由器发送错误的ARP报文,携带一些重要的IP地址,这样路由器就会误以为攻击发起方持有那个重要IP,将报文转发给它,导致服务不可用,这种情况下,管理员一般在接口上配置拦截一些ARP报文,保证重要的IP地址的MAC不被更新。

时间: 2024-10-06 04:27:18

报文转发简介的相关文章

TCP的请求代理与报文转发

HTTP做请求代理和TCP请求代理模式的区别TCP请求代理模式运行在ISO/OSI网络结构的4层上面,而使用HTTP做请求代理时运行在7层上.TCP的代理做的工作是:接收请求,选择后端节点,连接后端节点,转发内容:可以将上层其他协议的报文直接转发至后端RS.HTTP代理的工作是:接收请求,解析请求,根据转发规则选择backend pool,根据ULB算法选择后端节点,连接后端节点,接收响应,解析响应头,添加适当的响应头(如Set-cookie等),返回响应内容给客户端. TCP请求代理模式与TC

IP 层收发报文简要剖析6--ip_forward 报文转发

//在函数ip_route_input_slow->ip_mkroute_input注册, /* * IP数据包的转发是由ip_forward()处理,该函数在ip_rcv_finish() * 通过输入路由缓存被调用. */ int ip_forward(struct sk_buff *skb) { u32 mtu; struct iphdr *iph; /* Our header */ struct rtable *rt; /* Route we use */ struct ip_optio

Linux路由转发简介

要求: 需要让Linux01通过Linux02访问Linux03,把Linux02转换成一个路由器. 实施步骤: (1)  准备环境:Linux01(ip:10.0.0.10)Linux02(双网卡eth0:10.0.0.11  eth1:10.0.1.11)Linux03(ip:10.0.1.10) (2)  配置Linux01,添加路由:route add -net 10.0.1.0/24 gw10.0.0.11 (3)  配置Linux02,开启路由转发功能:echo "1" &

深入理解Linux网络技术内幕——IPv4 报文的接收(转发与本地传递)

我们知道,报文经过网卡驱动处理后,调用net_receive_skb传递给具体的协议处理函数,对于IPv4报文来说,其协议处理函数就是ip_rcv了,ip_rcv在进行一些健康检查等操作后,会调用ip_rcv_finish来处理报文.这也是IPv4协议对报文接收处理的开始. 我们先看下ip_rcv_finish源代码: ip_rcv_finish: //ip数据报文的主要处理程序(ip_rcv仅仅只是对ip数据报做一些健康性检查) //ip_rcv_finish 其实是进行路由表查询,,决定报文

LVS简介

----------------------------------- 一.LVS简介 二.LVS体系结构 三.LVS集群的特点 四.适用环境 五.ipvsadm常用命令 ----------------------------------- 一.LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org.现在LVS已经是 Linux标准内核的一部分,在

深入理解Linux网络技术内幕——IPv4 报文的传输发送

报文传输,指的是报文离开本机,发往其他系统的过程. 传输可以由L4层协议发起,也可以由报文转发发起. 在深入理解Linux网络技术内幕--IPv4 报文的接收(转发与本地传递)一文中,我们可以看到,报文转发最后会调用dst_output与邻居子系统进行交互,然后传给设备驱动程序. 这里,我们从L4层协议发起的传输,最后也会经历这一过程(调用dst_output).本文讨论的是L4层协议发起的传输,在IPv4协议处理(IP层)中的一些环节. 大蓝图 我们先看下传输环节的大蓝图,以便对传输这一过程有

LVS负载均衡(LVS简介、三种工作模式、、调度原理以及十种调度算法)

LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然

深入浅出网工第二个协议---Internet控制报文协议ICMP

ICMP简介 ICMP(Internet Control Message Protocol)是网络层的一个重要协议ICMP的作用:用来在网络设备间传递各种差错和控制信息,它对于收集各种网络信息.诊断和排除各种网络故障具有至关重要的作用ICMP协议中用到的报文类型:Echo-Request和Echo-Reply 两种报文 使用的都是单播报文 ICMP错误报告 ICMP定义了各种错误消息,用于诊断网络连接性问题:根据这些错误消息,源设备可以判断出数据传输失败的原因.比如,如果网络中发生了环路,导致报

前端学HTTP之报文首部

前面的话 首部和方法配合工作,共同决定了客户端和服务器能做什么事情.在请求和响应报文中都可以用首部来提供信息,有些首部是某种报文专用的,有些首部则更通用一些.本文将详细介绍HTTP报文中的首部 结构 HTTP首部字段是构成HTTP报文的要素之一.在客户端与服务器之间以HTTP协议进行通信的过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外重要信息的作用.使用首部字段是为了给浏览器和服务器提供报文主体大小.所使用的语言.认证信息等内容 HTTP首部字段是由首部字段名和字段值构成的,中间用