pc双网卡实现路由转发_网络工程师(33):路由转发工作原理

网络中各种网络设备对业务数据的转发主要有二层转发和三层转发。二层转发主要由交换机在同一个VLAN内实现,其转发依据是MAC地址表。如果MAC地址表中存在目的MAC地址表项,就从对应接口发出去,否则会从所有接口都发出去寻找接收者,同时,对ARP请求等广播帧也会从所有接口发出去。二层转发的特点导致可能存在环路,需要STP等协议防止二层环路。

三层转发主要由三层交换机或路由器在不同VLAN间或不同网段间实现,其转发依据是路由表。如果路由表中有目标网段的路由表项,就从对应接口或下一跳发出去,否则就把数据包丢弃。同时,三层转发不会在不同网段间转发广播包。

那么,是不是说三层转发没有环路呢?

并不是!我们在《网络工程师(10):让路由告诉你该去哪》一文中曾介绍了静态路由。如果因为静态路由配置错误,依然会造成环路。

b0c6c9a2a9befb8b4d95f284d84ecdd7.png

如图中,在RTA上配置静态路由,目标网段20.0.0.0/24的下一跳为RTC,RTC上配置目标网段20.0.0.0/24的下一跳为RTB,而RTB上错误地配置的目标网段20.0.0.0/24的下一跳为RTA。

其实,这样并不会有环路!不同的路由来源拥有不同的优先级。20.0.0.0/24网段是RTB的直连路由,拥有最高优先级,即使在RTB上配置了目标网段20.0.0.0/24的静态路由,也不会选择。

那么,如果RTB连接PC的链路故障了呢?

这时,由于RTB上20.0.0.0/24的直连路由消失,所配置的静态路由就起作用了,于是形成了环路:RTA把目的地址为20.0.0.1的数据包发给RTC,RTC发给RTB,RTB又发给RTA,RTA再发给RTC,如此循环下去!

数据包会永远循环下去吗?

事实上,在设计IP协议时就考虑到了这个问题。如果网络中因为配置或其他错误而造成路由环路,由IP协议报文封装中的TTL字段来解决,避免永远循环下去。

IP封装中的TTL字段字面意思是Time to Live包生存时间,实际上和时间没什么关系。路由器在转发数据包之前,会先把TTL字段内容减去1,如果结果大于零,则正常转发给下一跳,如果结果为零,则把数据包丢弃。

所以,三层转发不像二层转发,没有专门的协议来防止路由环路。三层转发的环路一是依靠TTL,二是依靠路由协议本身来考虑。

我们所说的路由表,通常是指IP路由表,也叫全局路由表。每台网络设备只有一个全局路由表,路由器转发数据也是查找全局路由表。

但并不是说路由器只有一个路由表,事实上,除了直连和静态路由,每个动态路由协议都有自己的路由表,如RIP路由表、OSPF路由表、BGP路由表,等等。

所以,为了正确选择路由,不同的路由来源拥有不同的优先级(思科叫管理距离),包括直连、静态及各种动态路由协议。如果目标网段和掩码都相同,会优选优先级最高的路由来源加入全局路由表;如果路由来源相同,则优选开销最小的路由加入全局路由表;如果都相同,那么都加入到全局路由表中,称为多路径等值路由或等价路由,可以实现负载分担。

b14b7b3b2d9546943b56f1126eb3f799.png

有了路由表,路由器就可以根据路由表来转发三层数据包了。当路由器收到一个数据包,先遍历整个全局路由表,如果没有找到匹配项,则丢弃数据包,否则在找到的所有匹配项中选择掩码最长的路由表项,查看该表项的下一跳地址是否是路由器的直连路由,如果是直连,把数据包送到对应接口,封装为帧后发给目标电脑。如果不是直连,则解析下一跳的MAC地址,封装为帧后发给下一跳路由器。

42399a15f670babfa33bb1782191b54d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Linux双网卡端口转发,可以使用iptables来进行配置。以下是一个基本的示例命令: ```shell sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport <localport> -j DNAT --to-destination <destaddress>:<destport> sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport <destport> -d <destaddress> -j ACCEPT sudo sysctl -w net.ipv4.ip_forward=1 ``` 解释: 1. 第一条规则将来自eth0接口指定端口的流量导向到目标地址和端口。 2. 第二条规则允许转发流量从eth0接口到eth1接口。 3. 最后一条命令用于启用IP转发。 请注意,上述示例中的eth0和eth1是两个网卡的名称,<localport>是本地监听端口,<destaddress>是目标地址,<destport>是目标端口。 此外,你还可以使用sysctl命令将net.ipv4.ip_forward设置为1来启用IP转发功能。 请根据自己的网络配置和需求进行适当修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [流量转发之端口转发](https://blog.csdn.net/qingzhantianxia/article/details/121956966)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [内网入口——代理搭建&端口转发](https://blog.csdn.net/Captain_RB/article/details/108250946)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值