当前位置:文档之家› 网络协议分析实验报告

网络协议分析实验报告

课程设计

课程设计题目网络协议分析实验报告学生姓名:

学号:

专业:

2014年 6 月 29日

实验1 基于ICMP的MTU测量方法

实验目的

1)掌握ICMP协议

2)掌握PING程序基本原理

3)掌握socket编程技术

4)掌握MTU测量算法

实验任务

编写一个基于ICMP协议测量网络MTU的程序,程序需要完成的功能:

1)使用目标IP地址或域名作为参数,测量本机到目标主机经过网络的MTU;

2)输出到目标主机经过网络的MTU。

实验环境

1)Linux系统;

2)gcc编译工具,gdb调试工具。

实验步骤

1.首先仔细研读ping.c例程,熟悉linux下socket原始套接字编程模式,为实验做好准备;

2.生成最大数据量的IP数据报(64K),数据部分为ICMP格式,ICMP报文为回送请求报

文,IP首部DF位置为1;由发送线程发送;

3.如果收到报文为目标不可达报文,减少数据长度,再次发送,直到收到回送应答报文。

至此,MTU测量完毕。

ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。[1]

它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ICMP报文在IP帧结构的首部协议类型字段(Protocol 8bit)的值=1.

ICMP原理

ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。

我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

ICMP(Internet Control Message,网际控制报文协议)是为网关和目标主机而提供的一种差错控制机制,使它们在遇到差错时能把错误报告给报文源发方.是IP层的一个协议。但是由于差错报告在发送给报文源发方时可能也要经过若干子网,因此牵涉到路由选择等问题,所以ICMP报文需通过IP协议来发送。ICMP数据报的数据发送前需要两级封装:首先添加ICMP 报头形成ICMP报文,再添加IP报头形成IP数据报

通信术语最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。

实验2 基于UDP的traceroute程序

实验目的

1)掌握UDP协议

2)掌握UDP客户机/服务器编程模式

3)掌握socket编程技术

4)掌握traceroute算法

实验任务

1. 熟悉程序udp-client.c和udp-server.c,使用网络嗅探器(如wireshark)分析UDP通讯数据报格式;

2. 编写一个基于UDP协议的网络路径记录程序程序,程序需要完成的功能:

1)使用目标IP地址或域名作为参数,测量本机到目标主机经过的路由器IP地址;

2)输出到目标主机经过网络路由器IP地址。

实验环境

1)Linux系统;

2)gcc编译工具,gdb调试工具。

实验步骤

1.首先分别编译程序udp-client.c和udp-server.c,编译命令如下:

gcc udp-client.c –o udp-client

gcc udp-server.c –o udp-server

启动网络嗅探程序:wireshark。

打开两个终端窗口,进入程序所在目录,分别运行./udp-client和./udp-server,查看wireshark采集到的UDP通讯数据,截图并结合图对UDP协议格式进行说明;

2.通过socket编程,发送udp数据报,设置目的端口号为不常用的值,TTL值初始为1,

逐步增加,接收超时ICMP报文和ICMP不可达报文;如果接收到ICMP超时报文,则记录发送ICMP超时报文的路由器IP地址,如果收到ICMP不可达报文,则为目的主机到达;

3.输出记录的所有路由器IP地址。

实验结果

1

UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传

输单位。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

UDP报头

UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:

源端口号目标端口号数据报长度校验值

UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。数据报的长度是指包括报头和数据部分在内的总的字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,

有时会降低到8192字节。

UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。这与TCP协

议是不同的,后者要求必须具有校验值。

2

相关主题