网络二三层转发

二层转发具体过程 转载至https://blog.csdn.net/hjq129520/article/details/60956536

网络二三层转发

根据路由表项的掩码和目的IP相与,判断主机A和主机B处于同一网段,采用二层转发。

1.      主机A向全网段的其他主机发送ARP广播报文,其SMAC为主机A 的MAC地址,SIP为主机A的IP地址192.168.1.1,DMAC为全零的广播地址,DIP为主机B的IP地址192.168.1.2。

2.      当全网段的主机都收到该ARP广播时,只有主机B发现ARP请求报文中的目的IP地址与自己的IP相同,则给予主机A 发送ARP应答报文,SMAC为主机B 的MAC地址,SIP为主机B的IP地址192.168.1.2,DMAC为主机A的MAC地址,DIP为主机A的IP地址192.168.1.1。在此过程中,主机B将主机A的MAC地址和主机A的IP地址写入自己的ARP表项中,以便之后的二三层转发。

3.      主机A收到主机B的ARP应答报文之后,将主机B的MAC地址和对应的IP地址写入自己的ARP表项中,以便后续的二三层转发,同时,将IP数据包封装发送给主机B。

三层转发具体过程

根据路由表项的掩码和目的IP相与,判断主机A和主机B处于不同网段,采用三层转发。

网络二三层转发

当PC A向PC B发起ICMP请求时:

PCA向网关(有网关时,对网关发送ARP请求,无网关时,需要设置静态路由,route add IP mask nextHop要到达IP,下一跳要选择的是 nextHop;网关的0.0.0.0/0代表能够到达任何一个IP)192.168.1.2/24发送ARP请求(广播,发送的ARP请求只有广播的形式),以获得交换机的MAC地址,网关发现PC A请求的IP地址为自己的三层接口IP,因此网关给予PC A发送ARP应答,并更新自己的ARP表项,告知PC A交换机的MAC地址,主机A也更新自己的ARP表项,PC A将ICMP报文发送给网关192.168.1.2,ICMP的目的MAC为交换机13端口的MAC、源MAC为MAC A、源IP为192.168.1.1、目的IP为192.168.2.1。

1. 交换机根据收到的ICMP报文的目的IP查找硬件三层表项,即FIB(内容包括IP、MAC、出口VLAN、出端口),因为之前未建立任何表项,查找失败,于是将报文送到交换机CPU进行处理。

2.  CPU根据报文的目的IP去查找软件路由表,发现匹配了一个直连网段(PC B 对应的网段),于是继续查找其软件ARP表,仍然查找失败。然后,交换机会在目的网段对应的VLAN 2的所有端口发送请求地址192.168.2.1对应的MAC的ARP请求(请求PC B的MAC地址)。

【根据目的IP与硬件的FIB作最长匹配,如果匹配的是32位的主机路由,则直接转发,如果匹配的是接口网段路由,则送CPU处理,CPU触发下一跳的ARP请求,在收到ARP应答之后根据ARP创建新的主机路由,后续即可匹配此主机路由,所谓“一次路由,多次交换”】fib表是根据路由表生成的,fib表下发到硬件,转发更快,数据转发过程中先查fib表,查不到再去查路由表    display fib

1.  主机B发现被请求的是自己的IP地址时,则向交换机发送ARP应答报文,SMAC为主机B的MAC,SIP为主机B的IP192.168.2.1,DMAC为交换机的MAC,DIP为192.168.2.2,并将交换机的MAC和对应网关的IP写入自己的ARP表项,交换机收到该ARP应答报文时,将主机B的MAC和其IP地址写入自己的ARP表项,以便后续的报文转发,交换机将收到的主机A的ICMP报文发送给主机B,报文的目的MAC修改为PC B的MAC,源MAC修改为自己的交换机14端口的MAC地址,源IP为主机A的IP192.168.1.1,目的IP为主机B的IP192.168.2.1。

2. 在交换机芯片的三层表项中根据刚得到的三层转发信息添加表项(内容包括IP、MAC、出口VLAN、出端口),这样后续的PC A发往PC B的报文就可以通过该硬件三层表项直接转发了。

3.  PC B收到交换机转发过来的ICMP请求报文以后,回应ICMP应答给PCA。ICMP应答报文的转发过程与前面类似,只是由于交换机在之前已经得到PC A的IP和MAC对应关系了,也同时在交换芯片中添加了相关三层表项,因此这个报文直接由交换芯片硬件转发给PC A。

4.  这样,后续的往返报文都经过查MAC表==>查三层转发表的过程由交换芯片直接进行硬件转发了。

注:交换机每个端口都有自己的MAC地址,display interface g1/0/?可以查看具体的交换机端口的信息,包含该端口的MAC可以查看到。交换机可以清楚的知道自己的每个端口的MAC地址,因此在交换机内部无需发送ARP请求查看自己端口的MAC地址。

 

【PC上设置静态路由:routeadd   IP mask  nextHop】

【交换机上设置静态路由:iproute-static   IP  mask  nextHop】

TCP/IP7层工作模式:

A向B发送一个QQ信息 “你好” A主机在应用层上将这条信息准备好(你从键盘上打字),然后表示层将这2个字的具体信息准备好(大小,粗细,颜色等),会话层就与B建立会话连接(喂,你在吗,我要发东西给你),传输层就让AB两台主机建立逻辑上的连接(QQ是UDP无连接的,MSN是TCP有连接的),传输层将数据分段 并在所有数据段之前打上端口号4000(QQ的端口号)的标签,网络层进行路由寻址,就是找到去往B的路,然后在数据段前面加上目的IP变成数据包送到数据链路层,数据链路层在数据包前面加上下一个路由的MAC地址(每经过一个路由变一次,直到B的MAC地址),然后将数据包转换为帧,最后到物理层,物理层将数据帧变成010101的比特流,发送出去,以上就是封装的过程,然后经过N个路由,最后送到主机B物理层上,开始解封装,将01010比特流转化为数据链路层可以识别的数据帧,并拆下最前面一段MAC地址,拿出来一看,哦,这是给我的数据包,然后将数据帧转化为数据包送给网络层继续拆,拆下IP地址,也符合,再转化为数据段送给传输层,传输层也拆开端口信息,然后将数据段重组成数据发给4000端口(否则计算机不知道到底应该将数据交给谁处理,端口就是电脑知道这到底是谁的数据,总不能发给音乐或者视频什么的吧),再到会话层完成终止这次会话,到表示层和应用层就在主机B上将“你好“两个字显示出来,整个过程就基本完成了。