格斯文档网

您现在的位置是:格斯文档网 > 述职报告 >

网络协议分析实验报告

 课

 程

 设

 计

 课程设计题目

 网络协议分析实验报告

 学 生 姓 名 :

 学

 号:

 专

 业:

  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

 验 实验 3

 TCP 协议分析 实验目的 1)

 掌握 TCP 协议 2)

 掌握 TCP 客户机/服务器编程模式 实验任务 熟悉程序 tcp-process、c,tcp-client、c 与 tcp-server、c,使用网络嗅探器(如 wireshark)分析 TCP协议三次握手过程; 实验环境 1)Linux 系统; 2)gcc 编译工具,gdb 调试工具。

 实验步骤 首先分别编译程序 tcp-client、与 tcp-server、,编译命令如下: gcc tcp-client、c tcp-process、c –o tcp-client gcc tcp-server、c tcp-process、c

 –o tcp-server 启动网络嗅探程序:wireshark。

 打开两个终端窗口,进入程序所在目录,分别运行、/tcp-client 与、/tcp-server,查瞧wireshark 采集到的 TCP 通讯数据,截图并结合图对 TCP 三次握手协议格式进行说明;

 实验结果

  在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。

 第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认;

 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;

 第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端与服务器进入 ESTABLISHED 状态,完成三次握手。

 完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:

 未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的 SYN 包(syn=j)开设一个条目,该条目表明服务器已收到 SYN 包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于 Syn_RECV 状态,当服务器收到客户的确认包时,删除该条目,服务器进入 ESTABLISHED 状态。

 Backlog 参数:表示未连接队列的最大容纳数目。

 SYN-ACK 重传次数 服务器发送完 SYN-ACK 包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

 半连接存活时间:就是指半连接队列的条目存活的最长时间,也即服务从收到 SYN 包到确认这个报文无效的最长时间,该时间值就是所有重传请求包的最长等待时间总与。有时我们也称半连接存活时间为 Timeout 时间、SYN_RECV 存活时间。

推荐访问:协议 实验 报告

版权所有:格斯文档网 2010-2022 未经授权禁止复制或建立镜像[格斯文档网]所有资源完全免费共享

Powered by 格斯文档网 © All Rights Reserved.。浙ICP备19042928号