一、回顾交换机工作原理
交换机里面维护了一张MAC地址表,主要记录的是MAC地址和接口的对应关系。
交换机在初始状态下,MAC地址表是空的,当收到一个来自某接口的数据时,首先查看数据帧中的MAC地址表,对照自己的MAC地址表,如果不在表中,将发送方的MAC地址学习并记录到自己的MAC地址表中,并附上对应的接口(Fa0/1),再查看目的MAC地址,如果目标MAC地址也不在MAC地址表中,将数据从除接收接口(Fa0/1)外的其他所有连接接口转发出去(广播方式),此时,目的主机接收到,其他主机也会接收到 ,其他主机接收到后直接丢弃,目的主机接收到后进行回应,回应的过程中数据同样会交由交换机进行转发,目的主机这时候就变成了回应的发送主机,当交换机接收到来自目的主机的回应报文的时候(Fa0/10),同样查看发送方的MAC地址,进行学习记录,并附带对应接口(Fa0/10),再去查看目的MAC,由于已经有记录了,所以直接从记录的接口(Fa0/1)进行转发。
总结:交换机学习源MAC、广播数据帧、接收方回应后,回应使用单播直接进行转发。
二、回顾路由器相关知识
- 网络层的功能:
路由器是属于三层(网络层)设备,进行逻辑地址(IP地址)寻址,实现不同网络之间的路径选择。
a、不同网络指网络地址不等或者内网和外网的分隔;
b、内网的IP地址是无法在外网进行路由的;
去查找目的是否可以到达,如果可以到达,选择一条最优的路径,如果不能到达,直接返回给发送方一个消息。
网络层所传输的PDU(传输数据单元)是数据包(IP数据包)。
三、网络层IP数据包的格式
1、IPV4的数据包格式
字段 | 长度 | 含义 |
版本 | 4bit | 标识当前使用的IP版本号(IPV4或IPV6) |
首部长度 | 4bit | IP数据报文首部有一个可选字段,造成首部是可变的,所以需要一个字段去标识首部有多长。 |
区分服务/服务质量/优先级和服务类型 | 8bit | 为了保证更好的服务,主要是在IP层做qos; 只有在使用区分服务时,这个字段才起作用。 |
总长度 | 16bit | 主要用来标识整个数据包(首部和数据)的总长度 |
标识 | 16bit | IPv4在存储器中维持了一个计数器,每差生一个数据报,计数器就加1,并将此值赋给标识字段。 |
标志 | 3bit | 目前只有两位有意义,最低位为1标识后面还有分片数据报,为0表示已经是最后一个数据片;中间一位为1表示“不能分片”,为0才允许分片。 |
片位移 | 13bit | 指出较长的分组在分片后,该片在原分组中的相对位置。 |
生存时间(TTL值) | 8bit | 数据包在路由器转发消耗时间如果小于1秒,TTL值就会减1. |
协议 | 8bit | 标识上层数据是使用何种协议(TCP是6,UDP是17) |
首部校验和 | 16bit | 校验数据报文的首部。数据报每经过一个设备,设备都要重新计算一下首部校验和,若首部未发生变化,则此结果必为0,于是保留这个数据报。该字段只检验数据报的首部,不包括数据部分。 |
源地址 | 32bit | 发送方的IP地址 |
目的地址 | 32bit | 接收方的IP地址 |
选项字段(长度可变) | 0~40字节 | 用来支持排错、测量以及安全等措施,在必要时插入值为0的填充字节。 |
数据部分 | 可变 | 用来填充报文 |
![](https://i-blog.csdnimg.cn/blog_migrate/019016b226463a3a2d8fa0cb95d589d2.png)
2、IPV6的数据包格式
IPV6没有标识、标志、片偏移,它是放在了流标签里面
![](https://i-blog.csdnimg.cn/blog_migrate/9a62e5328ab9109b70ed9262de80f55c.png)
四、路由器的工作原理
1、路由
- 从源主机到目标主机的转发过程(跨网络访问)
- 包含两个内容:
- 确定最佳路径(手动指定、根据动态路由协商方式)
- 通过网络传输信息
2、路由器的工作原理
路由器里面维护了一张路由表,路由表中会有对应关系。
(1)直连路由
R1 192.168.10.0 F0/0 192.168.50.0 F0/1
R2 192.168.100.0 F0/0 192.168.50.0 F0/1
当 192.168.10.1要和 192.168.100.1进行通信,发现目的IP和自己不在一个网络中,它会把数据交给自己直连的网关,R1会解封到第三层查看目的的IP地址是 192.168.100.1发现它的网络是 192.168.100.X网络,然后再去查看自己的路由表,发现 192.168.100.0网络不在自己的路由表中,它会反馈给PC1目标不可达。
此时我们想要它能够访问就需要在路由表中添加一条路由条目。
R1 192.168.100.0 F0/1
然后PC1发送数据过来,R1先解封装到第三层,查看目标IP地址所在网络,然后查看目的IP所在网络是否在自己的路由表中,如果在自己的路由表中,重新进行封装,找到对应接口转发出去。
转发到R2之后,R2同样会解封到第三层,看到源IP是192.168.10.1,目的IP是192.168.100.1,查看自己的路由表,目的IP所在网络在自己的路由表中,重新封装,然后找到对应接口进行转发。
PC2接收到数据库会进行回应,PC2作为发送方发送数据,过程同上。
(2)工作原理
接收数据包
查看目的IP地址
看目的IP地址所处IP地址在不在自己的路由表中
如果在,重新封装数据,然后在路由表中找到对应接口转发出去
如果不在,返回给发送方,目标不可达
(3)路由表
直连路由:当路由器的接口配置好对应的Ip地址并开启接口后自动生成
非直连路由:需要手动配置静态路由或者使用动态路由协议学习到
3、静态路由
- 由管理员手动配置,不灵活,而且是单向的
- 特殊的静态路由:默认路由,路由器中找不到 目标网络的路由条目时,再去查看默认路由
- 使用场景:一般应用于末节(末梢)网络(网络的最末端)(路由器的一端只连接一个网络)
4、动态路由
- 通过某种动态路由协议自动去建立路由表
- 常见的动态路由协议:RIP OSPF IS-IS BGP IGRP EIGRP
五、路由器转发数据包的封装过程
1、案例说明GNS3
GNS3通过
- 先通过no ip routing 把两台主机的路由功能关闭
PC2#conf t #进入全局模式 Enter configuration commands, one per line. End with CNTL/Z. PC2(config)#no ip routing #关闭c3640的路由模式 PC2(config)#
- 全局配置模式下配置PC1的IP、子网掩码和网关(PC2设置方法如是)
PC1#conf t Enter configuration commands, one per line. End with CNTL/Z. PC1(config)#int f0/0 PC1(config-if)#ip add 192.168.10.1 255.255.255.0 #设置PC的IP地址和子网掩码 PC1(config-if)#no shut PC1(config-if)#exit PC1(config)# *Mar 1 00:06:28.811: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up *Mar 1 00:06:29.811: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up PC1(config)#ip def PC1(config)#ip default-ga PC1(config)#ip default-gateway 192.168.10.254 #设置PC的默认网关 PC1(config)#
- 配置路由器
路由器R1的两个端口的IP地址、子网掩码并开启路由功能。
R1#conf t Enter configuration commands, one per line. End with CNTL/Z. R1(config)#int f0/0 R1(config-if)#ip add 192.168.10.254 255.255.255.0 R1(config-if)#no shut R1(config-if)#exit *Mar 1 00:30:33.163: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up *Mar 1 00:30:34.163: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up R1(config-if)#int f1/0 R1(config-if)#ip add 192.168.50.1 255.255.255.0 R1(config-if)#no shut R1(config-if)# *Mar 1 00:31:10.939: %LINK-3-UPDOWN: Interface FastEthernet1/0, changed state to up *Mar 1 00:31:11.939: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet1/0, changed state to up R1(config-if)#
路由器R2的两个端口的IP地址、子网掩码并开启路由功能
R2#conf t Enter configuration commands, one per line. End with CNTL/Z. R2(config)#int f0/0 R2(config-if)#ip add 192.168.100.254 255.255.255.0 R2(config-if)#no shut R2(config-if)#exit R2(config)# *Mar 1 00:35:55.247: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up *Mar 1 00:35:56.247: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up R2(config)#int f1/0 R2(config-if)#ip add 192.168.50.2 255.255.255.0 R2(config-if)#no shut R2(config-if)#exit R2(config)# *Mar 1 00:36:25.243: %LINK-3-UPDOWN: Interface FastEthernet1/0, changed state to up *Mar 1 00:36:26.247: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet1/0, changed state to up R2(config)#
2、 添加路由
- 全局模式添加静态路由
(1)第一种方式:指定出口路由器接口
R1#
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#ip route 192.168.100.0 255.255.255.0 fast
R1(config)#ip route 192.168.100.0 255.255.255.0 fastEthernet 1/0
R1(config)#
(2)第二种方式,指定下一个路由器接口的IP地址
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#ip route 192.168.100.0 255.255.255.0 192.168.50.2
R1(config)#
在R2上配置PC1网段的路由
R2#
R2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#ip route 192.168.10.0 255.255.255.0 192.168.50.1
R2(config)#
- 查看路由表命令(show ip route)
(3)ping连通性测试
PC1连接 PC2设备中默认发送五个数据包当出现!代表连通,当出现...代表不通。
因为前面配置了路由,会去查找路由,查找路由有个过程,所以前面3个数据包不通
3、路由器转发数据包的封装过程
查看接口的信息并查看PC1的MAC地址
同样去查看R1路由器、R2路由器以及PC2接口的MAC地址
PC1访问PC2
第一个报文:源IP:PC1的IP 源MAC是PC1的MAC 目的IP:PC2的IP 目的MAC、是路由器R1的MAC
当R1收到数据报文后,会解封到网络层,查看目的是否可到,如果可以到转发到对应接口,重新进行二层封装,源MAC变成R1路由器的 F1/0接口MAC 目的MAC变成R2 的F1/0接口MAC。
当R2收到数据报文后,会将数据交给对应接口,重新进行二层封装,源MAC变成R2路由器的 F0/0接口MAC, 目的MAC是PC2的MAC。
总结:路由器在转发数据包的封装过程:源IP和目的IP始终是没有发生变化的,源MAC地址和目的MAC是一直在变换的,因为路由器会重新进行二层封装。
- 同网段传输主要是二层转发(不需要进行重新封装)
- 跨网段传输是三层转发(需要重新进行二层封装)
六、抓包分析
ping是ICMP协议,所以直接看ICMP报文
(1)PC1到R1的报文
(2)R1到R2的报文
从Sequence Number可以看出它们是同一条报文