浅谈通信网络(四)——报文转发(IP/MAC)

看此文前,建议先看:

http://www.cnblogs.com/daiaiai/p/8994932.html

https://www.cnblogs.com/daiaiai/p/9047713.html

前面说过数据包的处理顺序为:数据链路层、网络层、传输层、最后才是应用层。

路由转发:通过IP地址转发
二层转发:在处理数据链路层的时候,一般说的即通过MAC地址转发报文,就是二层转发。
三层转发:在处理网络层的时候,一次路由(首包CPU转发并建立三层硬件表项)、多次交换(后续包芯片硬件转发)
具体细节如下:
路由转发:
1.接收数据
检查目的MAC;
处理部件:网络接口——网卡、光模块、电模块等。
三层网络接口一般只接收两种MAC地址的数据:
目的MAC是自己、目的MAC是全1的广播地址
其他MAC地址的数据包将丢弃。
但是如果开启混杂模式,mac同样会接收所有监听到的数据包。
二层网络接口会接收所有MAC地址的数据报文。
2.MAC地址表学习
剥离目的MAC,再检查源MAC
核实MAC地址表里面,是否已经学习了MAC地址:
如果已经学习,则刷新老化时间为最新;
如果没有学习,则将MAC地址和和接收到该数据包的接口加入MAC地址表
备注:广播MAC地址不加入MAC地址表
3.剥离源MAC地址,检查目的IP
处理部件:TCP/IP协议栈
如果是自己的IP地址,则交由TCP层处理;
如果不是自己的IP地址内,在同一个网段内,直接进行下一步;
如果在不同网段内,查询路由表,进行三层转发
查询路由表的最终结果是查询到最小子网掩码直连路由,得到下一跳的IP地址(如果没有指定下一跳IP地址,则目的IP地址作为下一跳IP地址)

4.学习/查询ARP表
查询ARP表到下一跳IP地址的目的MAC地址
如果其中没有该IP地址的记录,则发起免费ARP学习得到MAC地址;
如果其中有记录,则标记该数据包的目的MAC地址
备注:该处并未开始封装目的MAC地址,因为源MAC地址需要优先封装,但是还没确定
5.查询MAC地址表
根据目的MAC地址,查询得到需要转发的出接口
6.根据出接口,得到源MAC地址,并完成源MAC和目的MAC封装
备注:三层接口,从接口直接获得源MAC地址;二层接口则从所在vlan的逻辑接口处获得源MAC
7.发送数据
网络接口对局域网内,进行转发

二层转发(交换机):
一般只发生在一个交换设备内多个接口处于同一个VLAN内的情况。
1.接收数据,并不会筛选目的MAC,二层接收所有数据包
2.MAC地址表学习/刷新,同上
3.查询目的MAC地址是否在MAC地址表内
如果在,则根据查询到的端口,直接转发;
如果不在,则在VLAN内除了接收口外的所有接口转发

三层转发(三层交换机)
一次路由:
过程同路由转发,
并学习了三层转发信息表,包括目的IP、目的MAC、出口VLAN、出接口
多次交换(精确地址匹配转发):
当后续有同样目的IP的数据包流,直接查询三层转发信息表进行转发。过程如下:
1.刷新源MAC地址表项;
2.筛选目的MAC地址为自己,交由IP层处理
3.查询到目的IP地址和接口不在同一网段;
4.查询三层转发信息表,直接得到出接口予以转发。

备注一:
交换机只有一个MAC地址,所有vlanif接口共享一个MAC地址;
路由器每个三层接口(包括vlanif)对应一个MAC地址。
备注二:
为了便于理解查询路由表的最终结果是查询到最小子网掩码直连路由,首先罗列如下几个概念:
I.路由选路原则
a.子网掩码最长匹配
b.管理距离最小优先
c.度量值最小优先
II.路由分类
一般我们路由分类为:静态路由和动态路由
静态路由:黑洞路由、直连路由、缺省路由、甚至包括策略路由等
动态路由:OSPF、RIP、BGP、EBGP、ISIS等
而此处,我想告诉你一个更重要的分类,即:直连路由和迭代路由。
直连路由从何而来?
a.当你的网络接口上电,这个时候叫物理up;
如果该网络接口配置了IP地址或者所在VLAN的虚接口配置了IP地址,则会使能协议UP,此时就会生成直连路由
b.另外一种是你手动注入路由表的,凡是你的路由不仅仅指定或者不指定下一跳IP地址,还指定了出接口的时候,则该条路由直接变为直连路由
除了介绍之外的路由,都将是迭代路由。
直连路由的意义为:通过该路由,你可以直接终止路由表查询,通过它的下一跳IP地址查询ARP表,或者出接口可以直接到达转发目的网络。
迭代路由的意义为:通过该路由得到的下一跳IP,继而查询ARP表不一定能够到达转发目的网络;还需要额外查询到达该下一跳IP的路由如何到达才行。
迭代路由如何理解勒?
比如从昆明开车到北京,中间会经过昆明-成都-西安-北京。当在昆明的时候,听A说要想去北京,得先到达西安;可问题是如何到达西安勒?又听B说,要想去西安,得先到达成都。
而从昆明到成都,是可以直接走成昆高速到达的。所以A说的相当于是迭代路由,而B说的是直连路由。

一般所谓定义的冲突域、广播域的概念是怎么回事?
所谓冲突域,就是通过二层转发的局域网内,一般有三种场景:
a.设备和设备直接对接的口子,包括服务器、PC、交换机、路由器等;
b.设备内部同在一个vlan内,允许接口之间进行二层转发
c.通过集线器,对接多个通信设备的接口,将这些接口同在一个物理网络内,可以进行直接二层转发
所谓广播域,就是同在一个IP网段内。

免费ARP存在的意义:
我们知道MAC地址表,标记了MAC地址和接口的对应关系;
而ARP表,则标记了IP地址和MAC地址的对应关系。
MAC地址表,通过查询数据包的源MAC和进接口学习;
ARP表,通过发起免费ARP学习获得。

那ARP表,是否也可以通过查询数据包获得MAC地址和IP地址的关系学习勒?而并不需要再次发送免费ARP。甚至都不再需要ARP表,直接在MAC地址表内添加就行了?
答:由于IP地址的数量有千千万万,对于维护这个表是完全不可能的。比如对接互联网设备来的数据流,MAC地址只有一个,但是该MAC地址对应的IP地址却有千千万万个。
那是否可以抓取同一网段内IP的数据包来获取MAC地址和IP地址对应关系?
答:如果采用这种方式,当需要转发的IP地址在一个网段内,可是又没有学习到该IP地址的MAC地址怎么办呢?那就还是得发送免费ARP。
采用这种方式,实现起来并不比免费ARP简单;
还会不断刷新老化时间,增加额外开销;
还需要同时再运行免费ARP,显得过于多余,增加性能负担。


场景1:
如果本段设备要使用路由转发的原理检查对端是否存活,该如何构造数据包呢?好吧,这就是单臂还回路由。
场景2:
如果在路由器上,做了关于到公网IP的策略路由的出接口,但是并没有指定下一跳,是否可以?也就是弱策略路由的适用范围。

更多场景,空了再继续添加。

由于确实没在一个大厂待过,有错之处还望大家指正!

猜你喜欢

转载自www.cnblogs.com/daiaiai/p/9080738.html