一、网络基本模型
一般网络分层有两种分法:TCP/IP模型和OSI模型,先介绍下OSI模型。
OSI七层模式从下到上依次是物理层,数据链路层,网络层,传输层,会话层,表示层,和应用层。
应用层:这一层作为用户的应用程序(例如电子邮件、文件传输)来提供网络服务。
表示层:可以确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
会话层:通过传输层建立数据传输的通路,主要是在系统之间发起会话或者接受会话请求
传输层:定义了一些传输数据的协议和端口号,主要负责端到端的传输。
网络层:主要负责寻址和路由选择,拥塞控制,使不同的网络互连。
数据链路层:提供介质访问链路管理等,使数据编码成帧和数据帧的识别,另外有控制数据链路的建立维持和释放,传输资源的控制,寻址,差错验证,识别上层帧及流量控制的作用。
物理层:定义物理介质的各种特性如机械特性电子特性功能特性等,承载基本物理设备及其中比特流的传输。

TCP/IP四层模型:应用层、传输层、网络层、数据链路层。
应用层对应OSI的应用层、表示层、会话层,传输层对应OSI的传输层,网络层对应OSI的网络层,数据链路层对应OSI的数据链路层和物理层。
数据的转发主要发生在七层模型的链路层和网络层,链路层主要是交换转发,网络层主要是路由转发,也就是我们所说的网络的二层三层。
二、二层数据转发
网络拓扑如下:

假设所有设备都是刚加点开机,PC1和PC2在同一个网段,PC1 地址为20.20.20.2,PC2地址是20.20.20.1,测试的是PC1pingPC2。
两台电脑刚配置好地址后,会在网络中发送免费的ARP数据包,以广播的形式发送出去,
数据包的源Mac地址为自己的Mac地址,IP地址为0.0.0.0 请求的目的Mac为00:00:00:00:00:00 目的IP地址为自己的IP地址,
这样做主要是为了检查网络中有没有IP地址冲突,具体的数据包分析如下:

网络中的其他主机收到这个广播包后,发现请求的不是自己的IP地址,就会把这个数据包丢掉。
发现没有IP地址冲突,现在用PC1去pingPC2,首先PC1会把PC2的地址和自己的地址做校验,发现在同一网段,这个时候PC1会向网络中发送ARP请求包,
源Mac地址是自己的Mac,源IP为20.20.20.2,目的Mac为ff:ff:ff:ff:ff:ff,目的IP地址为20.20.20.1.

交换机是根据Mac地址表转发数据,刚开机Mac表为空的,数据包到达交换机,交换机发现这是一个广播包,
会将数据包泛洪到除入接口的其他接口,同时会将PC1的Mac地址和数据的入接口对应起来,记录到Mac地址表中。
PC2收到PC1的广播包后,发现是请求自己的IP地址,就会对这个数据包做回应,将自己的Mac地址告诉PC1,这个时候数据包就不是广播包了,
数据报的源Mac、IP地址是PC2的,目的Mac、IP地址是PC1的,PC2会将PC1的Mac地址和IP地址记录到自己的ARP表中。数据到达交换机,
交换机发现数据是给PC1的,同时Mac地址表中有PC1对应的接口,直接将数据从那个接口转发出去,
同时将PC2的Mac地址和接口对应记录到Mac地址表中。数据到达PC1后,PC1会将PC2的IP地址和Mac地址记录到自己的ARP表中。


之后PC1pingPC2的数据包到达交换机,交换机根据学习到的Mac地址表从对应的接口转发数据,使两台PC通信。
下图为PC1pingPC2的请求包

下图为PC2的回复包

三、三层数据转发
网络拓扑

还是假设所有设备都是刚插电,PC还是会发免费的ARP包看有没有IP地址冲突,
这个就不详细介绍,当PC1pingPC2的时候,PC1发现PC2的地址和自己不在一个网段,这个时候它要将数据发给自己的网关,PC1还是通过ARP请求找自己的网关,
这个和二层里面请求是一样的,数据经过交换机,交换机记录记录Mac地址和接口信息,路由器收到数据后,发现目的Mac地址是一个广播地址,将数据包接收继续解封装,
发现目的IP地址是自己接口的IP地址,路由器将数据回复给PC1,将自己的接口的Mac地址告诉PC1,数据在经过交换机,交换机路由器接口Mac地址和对应的接口,
数据到达PC1后,PC1会将网关的Mac地址记录到自己的ARP表中。之后PC1将数据发送给路由器,源Mac、IP地址是PC1的地址,目的Mac地址是路由器的地址,目的IP地址是PC2的地址数据包如下

路由器收到数据后,发现数据目的Mac地址是给自己的,目的IP地址不是自己,需要查找路由表将数据转发到对应接口,
但是路由器ARP表中没有PC2的IP地址对应的Mac地址,路由器还不知道PC2在哪,这时路由器就会发送ARP请求包,
找到192.168.2.2对应的Mac地址,PC2也会将路由器的Mac地址和IP地址记录到自己的ARP表中。
同时路由器会将PC1地址和Mac地址记录到自己的ARP表中。等PC2回复路由器之后,路由器将192.168.2.2对应的Mac地址记录到ARP表中。

然后路由器将PC1的数据封装,将数据的源Mac地址改为自己的Mac地址,源IP地址不变还是PC1的地址,目的Mac地址为PC2的地址,
目的IP地址为PC2的地址,将数据发送给PC2,PC2收到数据后,给PC1回复,就会将数据先发给自己网关,数据到达路由器后,
路由器将数据拆封装,将源Mac改为PC1网关接口的Mac地址,源IP地址不变,目的Mac、目的IP地址不变,查路由表,在对应的接口将数据转发出去,数据到达PC1.

就这样PC1和PC2就可以夸网段通信了,数据经过网关设备,把数据解封装再分装,改变其中的Mac地址,在网关出做一次转发。



