IP是Internet Protocol(网际互连协议)的缩写,是 TCP/IP 体系中的网际层协议。 设计IP的目的是提高网络的可扩展性:一是解决 互联网 问题,实现大规模、 异构网络 的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。 根据 端到端 的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务. IP是整个TCP/IP协议族的核心,也是构成互联网的基础。 IP位于TCP/IP模型的网络层 (相当于 OSI 模型的网络层),它可以向传输层提供各种协议的信息,例如TCP、UDP等;对下可将IP信息包放到链路层,通过 以太网 、令牌环网络等各种技术来传送。
作为学习计算机网络的学生,了解网络数据包的组成,通过对网络上传输的数据进行抓取,可以对其进行分析,对于软件的Debug很大的帮助。当然也可以通过抓取用户发送的涉及用户名和密码的数据包来获取用户的密码,这样的知识可以启发我们更多的兴趣:
(1)网络通讯的真实内容。
(2)网络故障分析。
(3)程序网络接口分析。
(4)木马通讯数据内容。
在本实验中,我们将研究 IP 协议,重点关注 IP 数据报(IP datagram)。我们将通过分析在执行 traceroute 程序发送和接收的一系列 IP 数据报的过程来完成这个实验(traceroute 程序本身则是在 Wireshark ICMP 实验中进行了更详细的探讨),我们将研究 IP datagram 中的各个字段(fields),并详细研究 IP fragmentation 的方法。
我们的计算机通过向网络上传和从网络下载一些数据包来实现数据在网络中的传播。通常这些数据包会由发出或者接受的软件自行处理,普通用户并不过问,这些数据包一般也不会一直保存在用户的计算机上。
这次实验中,我先对于实验资料内容进行学习,初步了解了实验的要求和步骤后,发现这次的材料不仅是包含许多生词的全英文文档,而且涉及的抓包软件版本非常旧,无法立刻上手,所以我做了一下工作:
在实验中,我观察到这次实验是一个循序渐进的探索过程,从尝试抓包,获取数据包,再到确定数据包后对其内容结构的分析和阅读,所以我一步一步按照实验要求,及时记录自己的实验过程,并且对每一步的步骤和思路做简要总结,在其中,我也遇到一些问题:
新版本软件在win10系统中会频繁停止抓包,所以我尝试这个方法后只能做到每次打开抓包一次的操作;
自我探索内容涉及wireshark和traceroute的一些知识,我提前做了一些预习工作,并且查询一定资料后进行学习,可以算作一个加分;
最后,这次实验在软件应用层面,让我了解了许多计算机网络数据传输的细节,让我对各种数据和它们绑定的协议,结构有了更深入的了解。
捕获执行 traceroute 的数据包
为了生成本实验的一系列 IP 数据报,我们将使用 traceroute 程序向不同的目的地 X 发送不同大小的数据报。回想一下,traceroute 通过
首先发送一个或多个带有生存时间(TTL: Time-to-Live)字段设置为 1 的数据报;
然后发送一个或多个带有生存时间(TTL: Time-to-Live)字段设置为 2 的数据报到同一个目的地;
然后发送一个或多个带有生存时间(TTL: Time-to-Live)字段设置为 3 的数据报到同一个目的地,
以此类推,直到目的地真正收到此数据报为止。
回想一下,路由器必须将每个接收到的数据报中的 TTL 减 1。如果 TTL 达到 0,路由器会向来源主机发送 ICMP 消息。由于这种行为,
TTL 为 1 的数据报(由执行 traceroute 的主机发送)将导致距发送方一次跳跃的路由器,将 ICMP TTL 超出的消息发送回发送方主机;
以TTL 为 2 发送的数据报将导致距离为两次跳跃的路由器,将 ICMP 消息发送回发送方主机;
以 TTL 为 3 发送的数据报将导致距离为两次跳跃的路由器,将 ICMP 消息发送回发送方主机,等等。
以这种方式,执行 traceroute 的主机可通过查看包含ICMP TTL 超出消息的数据报中的来源 IP 地址来获知其自身与目的地 X 之间的路由器的身份。
我们想要运行 traceroute 并让它发送各种长度的数据报
Windows 操作系统:Windows 提供的 tracert 程序(曾被使用于我们的 ICMPWireshark 实验中)不允许更改 tracert 程序发送的 ICMP echo 请求(ping)消息的大小。因此,一个更好的 Windows traceroute 程序是 pingplotter,可在 http://www.pingplotter.com 上以免费版和共享软件版本获得。
下载并安装pingplotter,并通过对您喜欢的站点执行些 traceroute 来测试它。通过选择菜单项 Edit-> Options-> Packet Options 然后填写 Packet Size 字段,可以在pingplotter 中显式设置 ICMP echo 请求消息的大小。默认数据包大小为 56 个字节。一旦 pingplotter 发送了一系列具有递增的 TTL 值的数据包,它会在等待 Trace Interval 时间后再次以 TTL 为 1 重新启动发送进程。同时,我们可以在 pingplotter 中明确设置 Trace Interval 的值和间隔数。
操作:
1.启动Wireshark,开始分组捕获,按下对话框“Wireshark Packet Capture Options”中的按钮OK。
2.在Windows中,启动pingplotter,在 “Address to Trace”中输入目标地址。在“# of times to Trace”域中输入数字3。选择Edit→Advanced Options→Packet Options菜单项,在Packet Size域中输入数字56,点击OK。然后按下按钮“Trace”
3.为发送长度更大一些的多个数据报,在pingplotter中,选择Edit→Advanced Options→Packet Options菜单项,在Packet Size域中输入数值2000,按下OK。然后点击“Resume”按钮。
4.将进一步加大发送数据包的长度。在pingplotter中,选择Edit→Advanced Options→Packet Options菜单项,在Packet Size域中输入数值3500,按下OK。然后点击“Resume”按钮。
5.停止Wireshark的分组捕获。
如果无法通过运行Wireshark按上述步骤获得路由跟踪数据,也可以从下述网址下载跟踪文件,其中:ip-ethereal-trace-1为按上述操作步骤获得的跟踪数据。
7.在捕获分组列表子窗口中,点击Source,使Source右边出现一个小的向下箭头。跟踪数据中的分组将按IP源地址降序排列,如下图所示。如果Source右边出现的是向上的箭头,再点击一次Source列。选择源节点发送的第一个ICMP Echo Request消息,在分组头部明细子窗口中展开Internet Protocol部分。在捕获分组列表子窗口中,能发现源节点随后发送的所有其他ICMP消息。利用键盘的下降箭头,从第一个ICMP消息开始顺序选择随后源节点发送的其他ICMP Echo Requset消息,注意向下移动选择ICMP消息时操作不要太快。
8.按7中方法对分组进行排序。检查第一跳路由器(分组向目的节点传输所经过的第一台路由器)向源节点返回的一系列ICMP TTL-Exceeded消息。
9.分片(fragmentation)。点击捕获分组列表的Time列,将分组按时间升序排列。
10.找到在pingplotter中将Packet Size改为3500字节后源节点发送的第一个ICMP Echo Request消息。
2. 检查IP数据报头部。高层协议(protocol) 字段的值是多少?
3. IP数据报的头部长度是多少字节?数据报中携带的有效载荷(payload)是多少字节?解释如何获得有效载荷长度。
头部长度是20bytes,有效载荷=84-20=64bytes;
头部长度是20bytes,总的长度是84bytes,有效载荷就等于总的长度减去头部长度,即64bytes。
4. 该数据包是否被分片?解释你是如何确定该数据报是否被分片的。
该数据包没有被分片。Flag字段为0,数据包的分片偏移量为0
5. 按循序选择源节点发送的ICMP Echo Request消息过程中,两个相邻的IP 数据报头部哪些字段的值总是变化?
Identification、ttl、header checksum、seq
6. 接上题。IP数据报中哪些字段的值总是保持不变?哪些字段的值必须保持不变?哪些字段的值必须变化?
Flags、Protocol、Total Length、Header Length源地址、目的地址保持不变
ttl、Identification,seq,checksum必须变化
7. 接上题。描述一下IP数据报中的Identification字段值变化的模式(规律)。
Identification字段的值逐个加1
8. 找到第一跳路由器向源节点发送的第一个ICMP TTL-Exceeded消息。IP数据报头部的Identification字段和TTL字段的值各是多少?
第一个ICMP TTL-Exceeded消息中IP数据报头部的Identification字段是40316,TTL字段的值是255
9. 在第一跳路由器向源节点发送的一系列ICMP TTL-Exceeded消息中,IP数据报头部的Identification字段的值是否不同?为什么?
不相同 因为每次ip数据报中Identification的值加一
10. 找到在pingplotter中将Packet Size改为2000字节后源节点发送的第一个ICMP Echo Request消息。这个消息是否已经被分成了多个片?分成了几片?
已经被分片了
分了两片
11. 将数据报的第一片打印输出。IP数据报头部的什么字段指示该数据报已经被分片?数据报头部的什么字段指示该片是第一片,或是最后一片?分片前数据报的长度是多少字节?
数据报的Flag字段如果是1的话表示被分片了,如果Flags=1,MF=1时表示该片为第一片,当MF=0时表示为最后一片,分片前数据报的长度是1500
12. 将第二片数据报打印输出。IP数据报头部的什么字段指示该片不是第一片?还有其他片吗?请解释。
Fragment offset=1480, 没有了,More fragments字段为0
13. 第一片和第二篇数据报头部的什么字段值发生了变化?
Fragment offset,More fragments,Total Length,Header checksum
14.原始数据报被分成了几片?
被分成了3片
15.在原始数据报分成的多个片中,数据报(分片后)头部的哪些字段值发生了变化?
Fragment offset字段都发生变化,Header checksum 不同
实验让我以应用角度了解了计算机网络各层次运作的一些细节,对于课本上的知识有了更多更深的理解,更通过自己的兴趣,自主探索了IP许多知识,了解了许多计算机网络数据传输的细节,让我对各种数据和它们绑定的协议,结构有了更深入的了解。