今天学了做了IP实验,也跟大家分享一下吧,写这个东西,一方面是检查自己学的怎么样,另一方面也算是复习吧,通过实验加深自己的理解。
IP是TCP/IP协议里的核心协议了,它是网络层的协议,上层的数据包,比如TCP,UDP,ICMP,IGMP等等都要通过它的封装才能在网络上跑的,所以学好它很重要。
拓扑图如下:
这是实验的拓扑图,我是在虚拟机里做的实验,简单说明一下,其中B起着路由器的功能,2块网卡分别连着2个网络,A,D,C在一个子网,网关都指向B的192.168.1.1,E,F在另一个子网,网关都指向B的192.168.2.1。用B能使这2个网络互相连通。
一.
首先来做第一个实验,理解TTL生存时间,通俗的理解就是每经过一个路由器就要值减1,减到0还没到目的地的话,则路由器丢弃它,并向源站发回一个差错报文。因为IP协议是不可靠的数据包发送方式,这样就保证了数据离开源站后,即使找不到目的站也不会无休止的在路由器间循环游历。
启动主机A上的科来软件,并用编辑数据包工具,编辑一个IP数据报,其中:
MAC层:
目的MAC地址:主机B的MAC地址(对应于192.168.1.1接口的MAC)。
源MAC地址:主机A的MAC地址。
协议类型或数据长度:0800。
IP层:
总长度:IP层长度。
生存时间:128。
源IP地址:主机A的IP地址(192.168.1.2)。
目的IP地址:主机E的IP地址(192.168.2.2)。
校验和:在其他所有字段填充完毕后计算。
(计算校验和是理解IP数据包格式的最好方式,建议大家都手工计算一下,那样就会对IP包格式有感性的认识,比如IP在计算校验和时包括哪些内容?)
在主机B(选定两块网卡)、E上启动科来软件,设置过滤条件(提取IP协议),开始抓包。
主机A发送第1步中编辑好的报文。
主机B、E停止捕获数据,在捕获到的数据中查找主机A所发送的数据报,并回答以下问题:
可以看到在E主机中抓到的数据包的生存时间变成了127,在主机B上分别观察192.168.1.1的网卡和192.168.2.1网卡上所捕获的数据包,发现,在1.1网卡上的数据包没有任何改变,而在2.1网卡上捕获的数据包的生存时间则变为了127,相应的校验和当然也就改变了,可见当数据包经过路由器B(该主机当作路由功能)的时候,生存时间值递减了1。
为了看的更清楚,咱们把主机A里所编辑的数据包的生存时间改为1,然后再打开主机E和B的2块网卡分别抓包。
发送A机上改变了TTL值的数据包。
停止E和B抓包,看看会有什么样的结果?
可以看到只有B的1.1的网卡上抓到了数据包,且和A机上所编辑的数据包完全相同。而在E机和B机上的2.1网卡上都抓不到任何数据。证明了数据包在经过路由器时,因为TTL值减为了0,数据包直接就被路由器给丢弃了。
二.
好了,接下来做第二个实验,理解特殊的IP地址。
1.编辑主机A的IP数据报1,其中:
目的MAC地址:FFFFFF-FFFFFF。
源MAC地址:A的MAC地址。
源IP地址:A的IP地址。
目的IP地址:192.168.2.255。
校验和:在其他字段填充完毕后,计算。
主机A再编辑IP数据报2,其中:
目的MAC地址:主机B的MAC地址(对应于192.168.1.1接口的MAC)。
源MAC地址:A的MAC地址。
源IP地址:A的IP地址。
目的IP地址:192.168.2.255。
校验和:在其他字段填充完毕后,计算。
主机B、C、D、E、F启动协议分析器并设置过滤条件(提取IP协议,捕获192.168.1.2接收和发送的所有IP数据包,设置地址过滤条件如下:192.168.1.2双向到Any)。
主机B、C、D、E、F开始捕获数据。
主机A发送这两个数据报。
主机B、C、D、E、F停止捕获数据。
E和F捕获不到任何的数据包,主机C和D也捕获不到本地网卡上的任何数据包,但是由于设置了过滤条件为主机A的ip地址,所以在主机C和D上能抓到在A主机网卡上捕获的数据(注意,这里抓到的数据包是A主机的,并不是C和D的。)数据包1和数据包2,为什么会是这样的结果呢?
我们来看主机A的第一个数据包,它的MAC地址为全F, 还记得ARP的寻址过程吗?这显然是在寻找目的IP为192.168.2.255的MAC地址,但是这种全F的目标地址是在本网段询问的,所以当在本网段(包括主机B的1.1网卡)找不到目标地址为192.168.2.0网段的任何地址的时候就丢弃了该包(即C,D,B的1.1网卡都丢弃了该包),所以说路由器隔离了MAC为全1的广播包。
再来分析数据包2,只有A机和B机的1.1网卡捕获到了该数据包而其它的都不能,为什么会这样呢?按理说它的目的MAC地址是主机B的1.1网卡地址,这是MAC地址的单播,数据包2就是在单播MAC上的IP子网广播,参考范伟导老师的话如下 :
“IP的广播有三种:255.255.255.255叫本地广播,也叫直播,direct broadcast,不跨路由器。
172.16.33.255叫子网广播,广播给172.16.33.0这个子网,可以跨路由器。
172.16.255.255叫全子网广播,广播给172.16.0.0这个主网,可以跨路由器。
大家以前学网络的时候,老师会给一个概念,说路由器是三层设备,隔离广播,对吧,我也是这样给同学介绍的,但我在后面会告诉同学,并不是所有广播都隔离。 事实上只有255.255.255.255这类本地广播,路由器才不转发,对于子网广播和全子网广播,路由器是转发的。路由器隔离的广播是目的MAC为全1的广播,对于目的MAC是单播的上层广播,路由器是不能隔离的。”
这样的话,E,F还有B的2.0网段的网卡应该能捕获到数据包2的,但是结果是真的抓不到,我也不知道为什么,还希望知道的高手能帮忙分析一下。(查了资料只是说IPV4的路由器不能转发子网广播包和全子网广播包,这样的说法对学网络协议的来说,太不可信服了,我们应该还需知道为什么会被隔离,不是吗?)。
好了,今天就写到这里吧,在做实验的过程中,真的是遇到了问题,比如子网广播和全子网的广播,还希望知道的高手能帮助解答一下,不胜感激。
也希望大家能从该贴中提出问题来,大家一起探讨探讨,我也是刚刚学的,有很多都不懂,也需要高手的帮助和指点。
也希望版主能给多加点分,写的好辛苦呢,毕竟要开这么多的虚拟机做实验,还要写东西。呵呵,不求功劳,就当求个苦劳吧。 |