1、 数据报文的下发和上送

图1
如图1(采用简单的网络分层,非传统的OSI分层)所示,一个数据报文由应用层生成,封装数据,协议头,交给传输层处理,例如是TCP协议,此时封装TCP头,交给网络层处理,例如是IP协议,此时封装IP报文头,交给链路层处理,例如是以太协议,此时封装以太头,交给物理层处理。这个过程可以称之为数据报文的下发过程。
数据报文到达物理层后,根据特殊的标记,分发到相应的链路层处理,比如以太协议,以太协议根据协议号,再上送到不同的网络层处理,比如是IP协议,就将报文放到IP队列等待网络层处理。在网络层,还是以IP协议举例,解析IP头后,知道传输层协议是TCP,就交给TCP处理,TCP头剥掉后,就交给相应的应用层去处理了。这就是报文的上送过程。
总之,可以简单认为,报文的下发就是一层层的封头,报文的上送就是一层层的剥头。
2、 数据报文的转发
1. 二层交换
(1) 在一个二层网络内部(比如一个VLAN),将收到的帧选择适当的端口发出去。
(2) 通过MAC学习得到MAC与端口的对应信息,称之为FDB表。
(3) 对收到的包按目的MAC做交换,不修改帧里的源和目的MAC地址。
(4) 没有表项的帧在VLAN内做广播。

图2

图3
2. 三层转发
(1) 链路层收到一个以太网帧
(2) 检查校验和等参数是否合法
(3) 如果目的MAC地址不是我的,也不是组播和广播MAC,就进行二层转发
(4) 如果目的MAC地址是设备的MAC地址,则删除帧头,把数据部分按帧头里的协议类型交给上层协议处理(如IP)
(5) IP层收到IP包(就是以太网帧的数据)
(6) 检查校验和等参数是否合法
(7) 如果IP地址是接口IP地址之一,说明是本地报文,按IP头里的协议类型交上层协议处理(如TCP)
(8) 否则,用目的IP地址查转发表
(9) 由路由则交"出接口"对应的链路协议发出,没有路由则送cpu处理
(10) 链路协议(以太)得到这个要发出的IP包,以及出接口和下一跳IP地址信息
(11) 在IP包前面添加以太网帧头,源MAC地址是我的MAC地址,目的MAC地址是下一跳的MAC地址(用下一跳查ARP表得到),发出。
(12) 如果ARP表里没有找到下一跳IP地址,则需要发送ARP请求去解析这个IP,暂缓发送IP包或丢包。

图4

图5

图6

图7
发现更多精彩内容:
