路由器转发规则

原文源自:http://blog.51cto.com/echo1937/1281746

1、源主机在发起通信之前,将自己的IP与目标主机的IP进行比较,如果两者位于同一网段(用子网掩码计算后具有相同的网络号),那么源主机直接向目的主机发送ARP请求,在接收到目的主机的ARP应答后获取对方MAC地址,然后用对方的MAC地址作为目标MAC地址进行报文发送,位于同一VLAN(网段)的主机互访时属于这种情况,这是互联的交换机做二层转发。

2、当源主机判断目的主机与自己位于不同网段时,它会通过网关来提交报文,即发送ARP请求来获取网关IP地址对应的MAC,在得到网关的ARP应答后,用网关MAC作为报文目的MAC进行报文发送……也就是路由器的某个端口。注意,报文的源IP是源主机IP,目的IP依然是目的主机IP。

这里1,2步骤都是先进行IP信息封装处理,再通过ARP进行MAC封装处理(先3层,再2层),解包则相反。

3、当网关路由器接收到以太网数据帧时,发现数据帧中的目标MAC地址是自己的某一个端口的物理地址,这时路由器会把以太网数据帧的封装去掉。路由器认为这个IP数据包是要通过自己进行转发,接着它就在匹配路由表(包含目标地址和指向目标地址的指针)。匹配到路由项后,它就将包发往下一条地址。
路由器转发数据包也是这样,它始终是不会改IP地址的,只会改源/目标MAC。

4、万一路由遇到目的MAC是广播地址怎么办?IP的广播有三种:
255.255.255.255叫本地广播,也叫直播,direct broadcast,不跨路由器。
172.16.33.255叫子网广播,广播给172.16.33.0这个子网,可以跨路由器。
172.16.255.255叫全子网广播,广播给172.16.0.0这个主网,可以跨路由器。
路由器是三层设备,可以隔离广播,但并不是所有广播都隔离。事实上只有本地广播路由器才不转发,对于子网广播和全子网广播,路由器是转发的。为什么呢?我们来看255.255.255.255的广播,在MAC的封装中,对应的目的MAC是广播,而子网广播和全子网广播,对应的目的MAC是单播,所以路由器会转发。所以路由器隔离的广播是目的MAC为全1的广播,对于目的MAC是单播的上层广播,路由器是不能隔离的。

5、IP数据包经由路由转发的时候 源/目的IP,源/目的MAC是否发生改变,如何改变?
A—–(B1-B2)—–(C1-C2)——E
如上拓扑图为例,B1和B2是路由器B上的两个接口,C1和C2是路由器C上的两个接口,A和E是PC,由主机A向主机E发送数据包,那么在主机A形成的数据包的目的IP就是E的IP,源IP就是主机A的IP地址,目标MAC地址就是B1的MAC地址,源MAC地址就是A的MAC地址。
由A发给路由器B,B经过重封装后,源IP和目标IP是不变的,源MAC地址变成B2的MAC地址,目标MAC地址变成C1的MAC地址,封装完成发送给路由器C,路由器C接收到数据包后和B做的操作是一样的,源IP和目标IP的不变的,源MAC地址变成C2的MAC地址,目标MAC地址变成主机E的MAC地址,然后发送给主机E,这样E就收到了这个数据包,当恢复数据包的时候就是把收到的数据包的源IP地址(主机A的IP地址)和源MAC地址(接口C2的MAC地址)作为他的目标IP和目标MAC地址。

路由器不转发广播帧参考:

https://blog.csdn.net/zxh2075/article/details/53817754


  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在 Linux 中添加端口转发规则通常可以使用 iptables 命令或者 firewalld 服务来实现。 1. 使用 iptables 命令添加端口转发规则 使用 iptables 命令添加端口转发规则的具体操作步骤如下: 首先需要开启 IP 转发功能,可以使用以下命令开启: ``` sysctl -w net.ipv4.ip_forward=1 ``` 然后添加端口转发规则,比如将主机的 8080 端口映射到虚拟机的 80 端口,可以使用以下命令: ``` iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 虚拟机IP:80 iptables -t nat -A POSTROUTING -d 虚拟机IP -p tcp --dport 80 -j SNAT --to-source Linux主机IP ``` 其中,`虚拟机IP` 是虚拟机的 IP 地址,`Linux主机IP` 是主机的 IP 地址。 2. 使用 firewalld 服务添加端口转发规则 使用 firewalld 服务添加端口转发规则的具体操作步骤如下: 首先需要开启 IP 转发功能,可以使用以下命令开启: ``` sysctl -w net.ipv4.ip_forward=1 ``` 然后添加端口转发规则,比如将主机的 8080 端口映射到虚拟机的 80 端口,可以使用以下命令: ``` firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toaddr=虚拟机IP:toport=80 firewall-cmd --zone=public --add-masquerade ``` 其中,`虚拟机IP` 是虚拟机的 IP 地址。 无论是使用 iptables 命令还是 firewalld 服务,添加端口转发规则后需要保存设置,以便重启后生效。可以使用以下命令保存 iptables 规则: ``` service iptables save ``` 可以使用以下命令保存 firewalld 规则: ``` firewall-cmd --runtime-to-permanent ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值