1、我们以下面一个网络为例:有 A、B、C、D 四台主机,一台路由Router,子网掩码均为 255.255.255.0,A、B 两台主机的默认网关为 192.168.0.1,C、D 两台主机的默认网关为 192.168.1.1,四台主机的 IP 地址分别如下:A:192.168.0.2 B:192.168.0.3 C:192.168.1.2 D:192.168.1.3网络拓扑图如下所示:OSI/RM 与 TCP/IP 对应关系:两台主机通信过程(OSI 封装与解封装):1在同一网段内(主机 A ping 主机 B)在主机 A 上运行“Ping 192.168.0.3”后,都发生了些什么呢? 首先
2、,ping 命令会构建一个固定格式的 ICMP 请求数据包,然后由ICMP 协议将这个数据包连同地址“192.168.0.3”一起交给 IP 层协议,IP 层协议将以地址“192.168.0.3”作为目的地址,本机 IP 地址作为源地址,加上一些其他的控制信息,构建一个 IP 数据包,并想办法得到 192.168.0.3 的 MAC 地址(即物理地址),以便交给数据链路层构建一个数据帧。关键就在这里,IP 层协议通过目标 IP地址(即 192.168.0.3)和主机 A 的子网掩码(255.255.255.0)作“逻辑与”运算,发现得到的网络地址(192.168.0.0)与主机 A 的网络地址
3、(192.168.0.0)相同,就直接在本网络内查找目标主机的 MAC,如果以前两机有过通信,在主机 A 的 ARP 缓存表应该有主机D 的 IP 与其 MAC 地址的映射关系;如果没有,就发一个 ARP 请求广播包,得到主机 D 的 MAC 地址,并交给数据链路层,并由其构建一个数据帧,目的地址是 IP 层传过来的 MAC 地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。主机 B 收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层协议
4、。同样,IP 层检查后,将有用的信息提取后交给 ICMP 协议,后者处理后,马上构建一个 ICMP 应答数据包,发送给主机 A,其过程与主机 A 发送 ICMP请求数据包到主机 B 一模一样。2不在同一网段内(主机 A ping 主机 C)在主机 A 上运行“Ping 192.168.1.3”后,开始跟上面一样,到了怎样得到目标主机的 MAC 地址时,IP 协议通过目标主机的 IP地址与本机的子网掩码(255.255.255.0)作“逻辑与”运算,发现得到的网络地址(192.168.1.0)与自己的网络地址(192.168.0.0)不在同一网段内,就直接通过默认网关(192.168.0.1)将交由路由器处理,通过 ARP 协议获取到路由器接口 A(IP 地址为 192.168.0.1)的 MAC 地址,封装成数据帧最终转交给路由器,路由器得到这个数据帧后,再跟主机 C 进行通信,如果找不到,就向主机 A 返回一个超时 ICMP 应答信息;如果找到,则向主机 A 回送正常的 ICMP 应答信息。