计算机网络原理实验报告
2015/2016(1)
【实验目的】
1. 掌握IP数据报的报文格式
2. 掌握IP校验和计算方法
3. 掌握子网掩码和路由转发
4. 理解特殊IP地址的含义
5. 理解IP分片过程
【实验环境配置】
A、B、C、D、E、F主机按下图配置IP地址
图1 主机与IP地址
【实验原理】
一、 IP报文格式
IP数据报是由IP首部加数据组成的。IP首部的最大长度不超过60字节。 IP数据报文格式如下图所示:
4位版本 |
4位首部长度 |
8位服务类型 |
16位总长度(字节数) |
|
16位标识 |
3位标志 |
13位片偏移 |
||
8位生存时间 |
8位协议类型 |
16位首部检验和 |
||
32位源IP地址 |
||||
32位目的IP地址 |
||||
选项(如果有) |
||||
数据 |
二、 IP分片
链路层具有最大传输单元(MTU)这个特性,它限制了数据帧的最大长度。不同的网络类型都有一个上限值。以太网通常是1500字节。 如果IP层有数据包要传输,而数据包的长度超过了MTU,那么IP层就要对数据包进行分片操作。使每一片长度都小于MTU。 IP首部中“16位标识”、“3位标志”和“13位片偏移”包含了分片和重组所需的信息。另外,当数据被分片后,每个片的“16位总长度” 值要改为该片的长度值。
三、 IP路由表
大部分网络层设备都存储着一张记录路由信息的表格,称为路由表。它由许多条项目组成。网络层设备收到数据报后,根据其目的IP地址查找路由表确定数据报传输的最佳路径(下一跳)。然后利用网络层的协议重新封装数据报,利用下层提供的服务把数据报转发出去。 路由表的项目一般含有五个基本字段:目的地址、网络掩码、下一跳地址、接口、度量。
路由表按如下顺序匹配:
l 直接交付:路由表表项的“目的地址”字段是交付主机的本网络地址。
l 特定主机交付:路由表表项的“目的地址”字段是某台特定主机的IP地址。
l 特定网络交付:路由表表项的“目的地址”字段是另一个网络的地址。
l 默认交付:路由表表项的“目的地址”字段是一个默认路由器(默认网关)。
四、路由选择过程
路由选择模块从IP处理模块接收到IP分组后,使用该分组的目的IP地址同路由表中的每一个项目按特定的顺序(按照前面介绍的“路由表匹配顺序”)查找匹配项,当找到第一个匹配项后就不再继续寻找了,这样就完成了路由选择过程。
匹配路由表项的方法是将IP地址与路由表中的一个项目的“子网掩码”进行按位“与”操作,然后判断运算结果是否等于该项目的“目的地址”,如果等于,则匹配成功,否则,匹配失败。
路由选择模块的工作过程:
图2 路由选择模块的工作过程
【实验步骤】
主机B启动静态路由服务(方法:在命令行方式下,输入“staticroute_config”)。 按照拓扑结构图连接网络,使用拓扑验证检查连接的正确性。
练习一:编辑并发送IP数据报
答:IP在计算校验和时包括IP数据报的首部。
答:报文数据发生变化,变化的字段为:生存时间、首部校验和,由于A发送给E的报文跨网段,经过路由器B,B在转发数据报前将生存时间(TTL)减1,并重新计算校验和。
B主机和E主机捕获的报文比较
B主机 |
E主机 |
序号: 1 源地址 ECA86B-C53961 172.16.1.2 目标地址 ECA86B-C44766 172.16.0.2 概要描述 IPv4 (网际协议IPv4): 172.16.1.2 => 172.16.0.2 (Len 23) 帧长: 60 字节 时间: 10:08:04.8660460 时间间隔: 74.0000000
Ethernet 802.3 目的MAC地址 = ECA86B-C44766 源MAC地址 = ECA86B-C53961 协议类型或数据长度 = 0800 (IP协议) IPv4 (网际协议IPv4) 版本号和首部长度 = 45 版本 = 4 首部长度 = 5 区分服务 = 00 区分服务码点 = 000000.. 显式拥塞传输标志 = ......0. 经历拥塞标志 = .......0 总长度 = 23 标识 = 37960 标志和偏移量 = 4000 保留未用 = 0............... 不分片 = .1.............. 还有分片 = ..0............. 分片偏移量 = 0 生存时间 = 128 高层协议类型 = 0 首部校验和 = 0D7A (correct) 源IP地址 = 172.16.1.2 目的IP地址 = 172.16.0.2 自定义数据 数据 = ...
00000000: EC A8 6B C4 47 66 EC A8 6B C5 39 61 08 00 45 00 歙k腉f歙k?a..E. 00000010: 00 17 94 48 40 00 80 00 0D 7A AC 10 01 02 AC 10 [email protected]?..? 00000020: 00 02 AB CD EF 00 00 00 00 00 00 00 00 00 00 00 ..?.......... 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 ............ |
序号: 0 源地址 00133B-0C2AD0 172.16.1.2 目标地址 ECA86B-C4C809 172.16.0.2 概要描述 IPv4 (网际协议IPv4): 172.16.1.2 => 172.16.0.2 (Len 23) 帧长: 60 字节 时间: 10:07:22.5661870 时间间隔:
Ethernet 802.3 目的MAC地址 = ECA86B-C4C809 源MAC地址 = 00133B-0C2AD0 协议类型或数据长度 = 0800 (IP协议) IPv4 (网际协议IPv4) 版本号和首部长度 = 45 版本 = 4 首部长度 = 5 区分服务 = 00 区分服务码点 = 000000.. 显式拥塞传输标志 = ......0. 经历拥塞标志 = .......0 总长度 = 23 标识 = 37960 标志和偏移量 = 4000 保留未用 = 0............... 不分片 = .1.............. 还有分片 = ..0............. 分片偏移量 = 0 生存时间 = 127 高层协议类型 = 0 首部校验和 = 0E7A (correct) 源IP地址 = 172.16.1.2 目的IP地址 = 172.16.0.2 自定义数据 数据 = ...
00000000: EC A8 6B C4 C8 09 00 13 3B 0C 2A D0 08 00 45 00 歙k娜...;.*?.E. 00000010: 00 17 94 48 40 00 7F 00 0E 7A AC 10 01 02 AC 10 ...H@...z?..? 00000020: 00 02 AB CD EF 00 00 00 00 00 00 00 00 00 00 00 ..?.......... 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 ............ |
答:主机B捕获到了A主机发送的报文,E未捕获A主机发送的报文。B主机对应于172.16.1.1的网卡与A主机在同一局域网内,所以B主机收到了A主机发送的报文,而B主机作为路由器在转发数据报前将报文的生存时间减1得到0,将该数据报丢弃,不转发。所以E主机(172.16.0.2)没有收到数据报。
练习二:特殊的IP地址
记录实验结果:
|
主机号 |
收到IP数据报1 |
B(172.16.1.1)、C、D |
收到IP数据报2 |
B(172.16.1.1、172.16.0.1)、E、F |
结合实验结果,简述直接广播地址的作用。
答:直接广播地址,指定了一个特定网络的“所有主机”,一个直接广播的单一拷贝被发送到一个指定的网络,在那里他被广播到所有网络终端。
图3 A主机发送的数据报1
图4 A主机发送的数据报1
(1) 主机A编辑一个IP数据报,其中:
“目的MAC地址”设置为FFFFFF-FFFFFF。
“目的IP地址”设置为255.255.255.255。
(2) 主机B、C、D、E、F重新启动协议分析器并设置过滤条件(提取IP协议,172.16.1.2<->Any)。
(3) 主机B、C、D、E、F重新开始捕获数据。
(4) 主机A发送这个数据报。
(5) 主机B、C、D、E、F停止捕获数据。
记录实验结果:
|
主机号 |
收到主机A发送的IP数据报 |
B(172.16.1.1)、C、D |
未收到主机A发送的IP数据报 |
B(172.16.0.1)、E、F |
结合实验结果,简述受限广播地址的作用。
答:受限的广播地址是255.255.25.255(全1),路由器不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。所以只有本局域网内的B、C、D主机收到了A主机发送的IP数据报。
主机F重新启动协议分析器开始捕获数据并设置过滤条件(提取IP协议)。
主机E ping 127.0.0.1。
主机F停止捕获数据。
答:主机F没有收到E发送的IP数据报,因为若主句发送一个目的地址以为环回地址(127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。所以F主机不会收到E主机发送的目的地址为127.0.0.1的数据报。
图5 主机E ping 127.0.0.1
练习三:IP数据报分片
将ICMP的报文分片信息填入下表:
字段名称 |
分片序号1 |
分片序号2 |
分片序号3 |
Identification字段值 |
2837 |
2837 |
|
More fragments字段值 |
1 |
0 |
|
Fragment offset字段值 |
0 |
97(8字节) |
|
传输的数据量 |
796字节 |
252字节 |
|
字段名称 |
分片序号1 |
分片序号2 |
分片序号3 |
Identification字段值 |
2958 |
2958 |
2958 |
More fragments字段值 |
1 |
1 |
0 |
Fragment offset字段值 |
0 |
97(8字节) |
185(8字节) |
传输的数据量 |
796字节 |
724字节 |
548字节 |
两次结果分析与比较:
第一次A主机(MTU 1500)发送的数据报(2837)总长度为1028字节(A主机捕获),则数据部分1028-20=1008字节,分片数为1。E主机收到2个分片。分片1总长度796字节,数据部分长度为776字节,分片偏移量为0,。分片2总长度252字节,数据部分长度232字节,分片偏移量97(8字节)=776字节。由于主机B的MTU被设置成了800字节,所以B在转发数据时重新分片,分片长度不超过800字节,除去固定部分20字节,数据部分不超过780字节而分片长度必须是8字节的整数倍,所以分片1数据长度为776字节,加上20字节固定首部长度,所以分片1的长度为796字节。剩余数据组成分片2。
第二次A主机(MTU 1500)发送的数据报(2958),有2个分片,总长度分别为1500字节、548字节(A主机捕获)。A主机分片1,数据部分长度1480,在经过B主机分割后成为2个分片,1480-776=704字节,加上20字节固定首部长度,E主机捕获的分片2总长度为724。A主机分片2总长度548字节,分片偏移量185(8字节)。E主机捕获分片3总长度548字节,分片偏移量185(8字节)。
练习四:子网掩码和路由转发
|
是否ping 通 |
主机A----主机B |
能ping通 |
主机C----主机D |
能ping通 |
主机E----主机F |
能ping通 |
请问什么情况下两主机的子网掩码不同,却可以相互通信?
答:
A : IP :172. 16. 1.2 00000010
子网掩码:255.255.255.224 11100000
按位与结果 172.16.1.0
B : IP :172. 16. 1.1 00000001
子网掩码:255.255.255.240 11110000
按位与结果 172.16.1.0
C : IP :172. 16. 1.3 00000011
子网掩码:255.255.255.224 11100000
按位与结果 172.16.1.0
D : IP :172. 16. 1.4 00000100
子网掩码:255.255.255.240 11110000
按位与结果 172.16.1.0
E : IP :172. 16. 0.2 00000010
子网掩码:255.255.255.224 11100000
按位与结果 172.16.0.0
F : IP :172. 16. 0.3 00000011
子网掩码:255.255.255.240 11110000
按位与结果 172.16.0.0
当两台主机在同一网段时可以相互通信。
|
是否ping 通 |
主机A----主机C |
否 |
答:
A : IP :172. 16. 1.2 00000010
子网掩码:255.255.255.252 11111100
按位与结果 172.16.1.0
C : IP :172. 16. 1.3 00000011
子网掩码:255.255.255.254 11111110
按位与结果 172.16.1.2
两主机所在网段不同,无法通信。
【思考问题】
答:IP地址就是给因特网上的每一个主机或路由器的每一个接口分配一个在全世界范围唯一的32位的标识符。IP使得在因特网上很方便的寻址。IP地址是网络层和以上各层使用的地址,是一种逻辑地址。硬件地址即物理地址是数据链路层和物理层使用的地址,是主机或路由器接口的标识符。
在居于网链路层只能看见MAC帧,IP层抽象的互联网屏蔽了下层复杂的细节在网路曾讨论问题,就能使用统一的、抽象的IP地址研究主机与主机或路由器之间的通信。
答:使用大的MTU,IP数据报就长,这样使其的传输效率提高,IP数据报首部占数据报的总长度比例减小。
使用小的MTU,IP数据报就短,IP数据报越短,路由器转发速度越快。
答:好处:数据报每经过一个路由器,路由器都要重新计算首部校验和,不检验数据部分可以减少计算的工作量。坏处:网络层无法提供可靠的传输,将检验的任务交给上层协议,增加了上层协议的复杂性。
练习三IP数据报分片 A、E主机捕获的数据报(数据与协议数据内容略去,前三为A主机捕获、其余为E捕获)
序号: 1 源地址 ECA86B-C53961 172.16.1.2 目标地址 ECA86B-C44766 172.16.0.2 概要描述 ICMP (Internet控制报文协议) 回显请求 帧长: 1042 字节 时间: 10:40:20.4731620 时间间隔: 5.0000000
Ethernet 802.3 目的MAC地址 = ECA86B-C44766 源MAC地址 = ECA86B-C53961 协议类型或数据长度 = 0800 (IP协议) IPv4 (网际协议IPv4) 版本号和首部长度 = 45 版本 = 4 首部长度 = 5 区分服务 = 00 区分服务码点 = 000000.. 显式拥塞传输标志 = ......0. 经历拥塞标志 = .......0 总长度 = 1028 标识 = 2837 标志和偏移量 = 0000 保留未用 = 0............... 不分片 = .0.............. 还有分片 = ..0............. 分片偏移量 = 0 生存时间 = 128 高层协议类型 = 1 (ICMP协议) 首部校验和 = 0000 (incorrect) 源IP地址 = 172.16.1.2 目的IP地址 = 172.16.0.2 ICMP (Internet控制报文协议) 类型 = 8 (回显请求) 代码 = 0 校验和 = 4D60 (correct) 标识号 = 512 序列号 = 768 协议数据 = |
序号: 0 源地址 ECA86B-C53961 172.16.1.2 目标地址 ECA86B-C44766 172.16.0.2 概要描述 ICMP (Internet控制报文协议) 回显请求 帧长: 1514 字节 时间: 10:56:56.8601250 时间间隔:
Ethernet 802.3 目的MAC地址 = ECA86B-C44766 源MAC地址 = ECA86B-C53961 协议类型或数据长度 = 0800 (IP协议) IPv4 (网际协议IPv4) 版本号和首部长度 = 45 版本 = 4 首部长度 = 5 区分服务 = 00 区分服务码点 = 000000.. 显式拥塞传输标志 = ......0. 经历拥塞标志 = .......0 总长度 = 1500 标识 = 2958 标志和偏移量 = 2000 保留未用 = 0............... 不分片 = .0.............. 还有分片 = ..1............. 分片偏移量 = 0 生存时间 = 128 高层协议类型 = 1 (ICMP协议) 首部校验和 = B06E (correct) 源IP地址 = 172.16.1.2 目的IP地址 = 172.16.0.2 ICMP (Internet控制报文协议) 类型 = 8 (回显请求) 代码 = 0 校验和 = 6F78 (incorrect) 标识号 = 512 序列号 = 2560 协议数据 = |
序号: 1 源地址 ECA86B-C53961 172.16.1.2 目标地址 ECA86B-C44766 172.16.0.2 概要描述 IPv4 (网际协议IPv4): 172.16.1.2 => 172.16.0.2 (Len 548) 帧长: 562 字节 时间: 10:56:56.8601340 时间间隔: 0.0000000
Ethernet 802.3 目的MAC地址 = ECA86B-C44766 源MAC地址 = ECA86B-C53961 协议类型或数据长度 = 0800 (IP协议) IPv4 (网际协议IPv4) 版本号和首部长度 = 45 版本 = 4 首部长度 = 5 区分服务 = 00 区分服务码点 = 000000.. 显式拥塞传输标志 = ......0. 经历拥塞标志 = .......0 总长度 = 548 标识 = 2958 标志和偏移量 = 00B9 保留未用 = 0............... 不分片 = .0.............. 还有分片 = ..0............. 分片偏移量 = 185 生存时间 = 128 高层协议类型 = 1 (ICMP协议) 首部校验和 = D36D (correct) 源IP地址 = 172.16.1.2 目的IP地址 = 172.16.0.2 自定义数据 数据 = |
序号: 1 源地址 00133B-0C2AD0 172.16.1.2 目标地址 ECA86B-C4C809 172.16.0.2 概要描述 ICMP (Internet控制报文协议) 回显请求 帧长: 810 字节 时间: 10:42:01.8508580 时间间隔: 5.0000000
Ethernet 802.3 目的MAC地址 = ECA86B-C4C809 源MAC地址 = 00133B-0C2AD0 协议类型或数据长度 = 0800 (IP协议) IPv4 (网际协议IPv4) 版本号和首部长度 = 45 版本 = 4 首部长度 = 5 区分服务 = 00 区分服务码点 = 000000.. 显式拥塞传输标志 = ......0. 经历拥塞标志 = .......0 总长度 = 796 标识 = 2837 标志和偏移量 = 2000 保留未用 = 0............... 不分片 = .0.............. 还有分片 = ..1............. 分片偏移量 = 0 生存时间 = 127 高层协议类型 = 1 (ICMP协议) 首部校验和 = B4A7 (correct) 源IP地址 = 172.16.1.2 目的IP地址 = 172.16.0.2 ICMP (Internet控制报文协议) 类型 = 8 (回显请求) 代码 = 0 校验和 = 4D60 (incorrect) 标识号 = 512 序列号 = 768 协议数据 = |
序号: 2 源地址 00133B-0C2AD0 172.16.1.2 目标地址 ECA86B-C4C809 172.16.0.2 概要描述 IPv4 (网际协议IPv4): 172.16.1.2 => 172.16.0.2 (Len 252) 帧长: 266 字节 时间: 10:42:01.8508710 时间间隔: 0.0000000
Ethernet 802.3 目的MAC地址 = ECA86B-C4C809 源MAC地址 = 00133B-0C2AD0 协议类型或数据长度 = 0800 (IP协议) IPv4 (网际协议IPv4) 版本号和首部长度 = 45 版本 = 4 首部长度 = 5 区分服务 = 00 区分服务码点 = 000000.. 显式拥塞传输标志 = ......0. 经历拥塞标志 = .......0 总长度 = 252 标识 = 2837 标志和偏移量 = 0061 保留未用 = 0............... 不分片 = .0.............. 还有分片 = ..0............. 分片偏移量 = 97 生存时间 = 127 高层协议类型 = 1 (ICMP协议) 首部校验和 = D666 (correct) 源IP地址 = 172.16.1.2 目的IP地址 = 172.16.0.2 自定义数据 数据 = |
序号: 0 源地址 00133B-0C2AD0 172.16.1.2 目标地址 ECA86B-C4C809 172.16.0.2 概要描述 ICMP (Internet控制报文协议) 回显请求 帧长: 810 字节 时间: 10:58:38.2279920 时间间隔:
Ethernet 802.3 目的MAC地址 = ECA86B-C4C809 源MAC地址 = 00133B-0C2AD0 协议类型或数据长度 = 0800 (IP协议) IPv4 (网际协议IPv4) 版本号和首部长度 = 45 版本 = 4 首部长度 = 5 区分服务 = 00 区分服务码点 = 000000.. 显式拥塞传输标志 = ......0. 经历拥塞标志 = .......0 总长度 = 796 标识 = 2958 标志和偏移量 = 2000 保留未用 = 0............... 不分片 = .0.............. 还有分片 = ..1............. 分片偏移量 = 0 生存时间 = 127 高层协议类型 = 1 (ICMP协议) 首部校验和 = B42E (correct) 源IP地址 = 172.16.1.2 目的IP地址 = 172.16.0.2 ICMP (Internet控制报文协议) 类型 = 8 (回显请求) 代码 = 0 校验和 = 6F78 (incorrect) 标识号 = 512 序列号 = 2560 协议数据 = |
序号: 1 源地址 00133B-0C2AD0 172.16.1.2 目标地址 ECA86B-C4C809 172.16.0.2 概要描述 IPv4 (网际协议IPv4): 172.16.1.2 => 172.16.0.2 (Len 724) 帧长: 738 字节 时间: 10:58:38.2280000 时间间隔: 0.0000000
Ethernet 802.3 目的MAC地址 = ECA86B-C4C809 源MAC地址 = 00133B-0C2AD0 协议类型或数据长度 = 0800 (IP协议) IPv4 (网际协议IPv4) 版本号和首部长度 = 45 版本 = 4 首部长度 = 5 区分服务 = 00 区分服务码点 = 000000.. 显式拥塞传输标志 = ......0. 经历拥塞标志 = .......0 总长度 = 724 标识 = 2958 标志和偏移量 = 2061 保留未用 = 0............... 不分片 = .0.............. 还有分片 = ..1............. 分片偏移量 = 97 生存时间 = 127 高层协议类型 = 1 (ICMP协议) 首部校验和 = B415 (correct) 源IP地址 = 172.16.1.2 目的IP地址 = 172.16.0.2 自定义数据 数据 = |
序号: 2 源地址 00133B-0C2AD0 172.16.1.2 目标地址 ECA86B-C4C809 172.16.0.2 概要描述 IPv4 (网际协议IPv4): 172.16.1.2 => 172.16.0.2 (Len 548) 帧长: 562 字节 时间: 10:58:38.2280030 时间间隔: 0.0000000
Ethernet 802.3 目的MAC地址 = ECA86B-C4C809 源MAC地址 = 00133B-0C2AD0 协议类型或数据长度 = 0800 (IP协议) IPv4 (网际协议IPv4) 版本号和首部长度 = 45 版本 = 4 首部长度 = 5 区分服务 = 00 区分服务码点 = 000000.. 显式拥塞传输标志 = ......0. 经历拥塞标志 = .......0 总长度 = 548 标识 = 2958 标志和偏移量 = 00B9 保留未用 = 0............... 不分片 = .0.............. 还有分片 = ..0............. 分片偏移量 = 185 生存时间 = 127 高层协议类型 = 1 (ICMP协议) 首部校验和 = D46D (correct) 源IP地址 = 172.16.1.2 目的IP地址 = 172.16.0.2 自定义数据 数据 = |