375827_1344818852TSmQ.jpg

主机A的IP:192.168.10.2,网关:192.168.10.1

主机B的IP:192.168.20.2,网关:192.168.20.1

现在通过主机A ping 主机B来说明IP路由过程。

1、因特网控制报文协议将创建一个回应请求包,将把这个有效负核交给因特网协议,然后因特网协议会创建一个数据包。这个数据包中会包含源IP地址、目的IP地址和值为01h的协议字段。当数据包到达目的地时,所有这些内容会告诉接收方主机,应该把这个有效负核交给因特网控制报文协议处理。一旦数据包被创建因特网协议将判断目的IP地址是处于本地网络还是远程网络。

2、这里ICMP协议判断是远程网络,于是把这个数据包发给它的网关192.168.10.1,这时WINDOWS注册表将被使用,查找配置的默认网关。

3、要把数据包发送出去需要使用MAC地址,在本地局域网中主要只能通过硬件地址来进行通信。因此主机A查找ARP缓存,看一下是否已经解析了192.168.10.1的MAC地址,这里有这么两种情况:


 1)如果已经被解析,数据包将被释放、传送到数据链路层并成帧(目的方的硬件地址也将同数据包一起下传至数据链路层)。要查看你的主机上的ARP缓存,可以使用命令arp –a来查看。

2) 如果这个硬件地址在主机的ARP缓存中尚未被解析,一个ARP广播将被发送到此本地网络,以搜索192.168.10.1的硬件地址。路由器会响应这个请求请提供E0接口的硬件地址,接着主机将缓存这个地址。

4、一旦这个数据包和目的方硬件地址被交付给数据链路层,局域网驱动器将用来提供媒体访问,以通过所用类型的局域网。一个数据帧将产生,使用控制信息来封装此数据包。在这个帧中包含有目的硬件地址和源硬件地址,及以太网类型字段,在里使用的是因特网协议。在这个帧的结尾处是被称为帧校验序列的字段,它是装载循环冗余校验计算值的区域。一旦完成帧的封装,这个帧将被交付到物理层,以一次一位的方式发往物理媒体,在这里即为双绞线。

5、 数据包从帧中抽出,然后这个帧剩下的部分被丢弃。再把数据包传送给在以太网类型字段中列出的上层协议,在这里指的是因特网协议。 因特网会接收这个数据包,并检查其IP目的地址。由于数据包的目 的地址与接收路由器所配置的任一地址不相匹配,路由器将会在路由表中查看目的IP网络地址。路由表中需要有网络为192.168.20.0的表项,

    1)若路由表中需要有网络为192.168.20.0的表项,否则此数据包将立即丢弃,然后一个携带有destination network unavailable信息的ICMP包将被被发送到源方设备即主机A。

        2)若路由表中有表项,数据包将交给输出接口,这里是E1,数据包在E1端口中缓存。缓冲区需要了解目的方主机的硬件地址,它首先检查 ARP缓存。

A. 如果主机B的硬件地址已经被解析并被保存在路由器的ARP缓存中,则这个数据包和这个硬件地址将被传递到数据链路层以便组成帧。

B. 如果主机B的硬件地址没有被解析,路由器将会从E1发送一个ARP请求,查找192.168.20.2的硬件地址。主机B会使用它的硬件地址来进行响应,然后这个包和硬件地址都会被发送到数据链路层以组成帧。

6、数据链路层将使用这个目的主机和源主机的硬件地址以级以太网的类型字段和处于帧尾部的帧校验序列字段来创建一个帧。这个帧将被传送到物理层,并以一次一位的方式发送到物理媒体上,这里指的是双绞线。

7、   主机B会接收到此帧并立即运行循环冗余校验。如果运算结果与帧校验序列字段中的内容相区配,这个目的方的硬件地址将被检查。如果主机发现是匹配的,随后将检查 以太网类型字段中的值,以判断应该将数据包上传给网络层的什么位置,这里指的是IP协议。

8.   在网络层IP会接收这个数据包,并检查其目的方的IP地址。由于它们是匹配的,数据包的协议字段将被检查,以了解此有效负荷应该交付给谁。

9.   此有效负荷会交付给因特网控制报文协议,它将知道这是一个回应请求。因特网控制报文 协议会应答这个请求,通过即刻丢弃这个数据包并随后产生一个新的有效负荷来作为回应应答。

10.   随后创建的数据 包中将包含有源方和目的方的IP地址、协议字段和有效负荷。现在这里的源方指的是主机B目 的方指的是主机A。

11.   然后IP将检查了解这个目 的方的IP地址是本地网络地址还是远程网络地址。由于这个目的方地址是位于远程的网络,此数据包需要发送到默认网关。

12.   在此WINDOWS注册表上可以知道默认网关的IP地址,接着查看ARP缓存看是否完成了硬件地址解析。

13.   一旦默认网关的硬件地址找到了,此数据包和目的方的硬件地址都将被送往数据链路层,以完成帧的封装。要注意的是这里的目的方硬件地址指的是网关的硬件地址。

14.   数据链路层会封装数据包的内容,并在帧报头中包含目的方和源方的硬件地址,在以太网类型字段中填入0x0800(IP),在循环冗余校验中将填入帧校验序列字段。

15.   这时,帧将被下传给物理层,并以一次一位的方式发送到网络媒体上。

16.   路由器的E1接口将会收到这些位并重建为一个帧。循环冗余校验被运行,帧的帧校验序列字段被检验,以确认两个结果是否相符。

17.   一旦循环冗余校验校验通过,硬件目的地址将被检查。由于路由器的接口同这个地址是相匹配的,数据包将被从这个帧中取出,然后以太网类型字段将被检查,以了解此数据包应该投递给网络层上的哪一个协议。

18.   由于协议被判断了因特网协议,于是IP将得到这个数据包。首先IP将对IP报头运行循环冗余校验,然后检查目 的方的IP地址。由于目的IP地址和路由器的任何一个接口地址都不匹配那么路由器就会查找自己的路由表,了解是否存在一条到往192.168.10.0网段的路由。如果没有这个数据包将被立即丢弃。

19.   在这里路由器确实知道有这个一条路由到达目的方,这一输出接口就是路由器的E0接口,于是数据包将被交换到接口E0上。

20.   路由器会检查ARP缓存,确认192.168.10.2的硬件地址是否被解析。

21.   由于在将数据包传到主机B时,192.168.10.2的硬件地址已经被缓存起来了,所以这一硬件地址和数据包被传递到数据链路层

22.   数据链路层会使用这个目的方的硬件地址和源硬件地址,然后将IP放入以太网类型字段中,并对这个上帧进行循环冗余校验运算,将此运算结果放入帧校验序列字段中。

23.   这个帧然后被传送到物理层,以一次一位的方式 发送到本地网络。

24.   目的方的主机将接收到这个帧,运行循环冗余校验算法,检验目的方的硬件地址,并查看以太网类型字段中的内容以断定谁来处理这个帧。

25.   由于IP是被指定的接收者,随后这个数据包被传递给网络层的IP协议,它将检查包的协议字段,以确定进一步操作。IP发现要将此有效负荷交给ICMP的指示,接着ICMP将确定此数据包是一个ICMP的应答回复包。ICMP通过发送一个感叹号到用户接口来表明它已经接收到一个回复。这之后ICMP会尝试继续发送4个应答请求到目的方的主机。值得我们注意的是硬件地址的使用只会在同一广播域内绝对不会跨过路由器的接口。