IP数据包的接收处理过程设计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TCP/IP

院系:计算机与通信工程学院

班级:通信工程08-1班

姓名:于姗姗

学号:200807040149

课程设计任务书

题目IP数据包的接收处理过程设计

专业、班级通信08-1 学号 200807040149

姓名于姗姗

主要内容、基本要求、主要参考资料等:

1、主要内容

(1)分析协议的语法结构,各个字段的意义及功能;

(2)分析并设计主机从数据链路层接收数据包后的处理过程。

2、基本要求

(1)设计过程包括数据结构、处理函数、画出流程。

(2)书写课程设计报告

3、主要参考资料

(1)《TCP/IP协议深入分析》徐宇杰编著清华大学出版社2009.02

(2)《TCP/IP协议分析与编程》李峰陈向益编著人民邮电出版社2008.11 (3)《TCP/IP指南.卷1,底层核心协议A comprehensive,illustrated internet protocols reference》(美)Charles M.Kozierok著人民邮电出版社2008.05 完成期限:2011年7月3日

指导教师签名:韩雪琴何燕

课程负责人签名:韩雪琴何燕

2011年6月27至7月3日

目录

1.设计目的 (4)

2.预备知识 (4)

3.设计摘要 (5)

4.设计过程 (6)

5.流程图 (9)

6.心得体会 (11)

7.参考资料 (12)

一、设计目的

本次课程设计的主题是IP数据报的接受处理过程,通过了解数据报的格式和各个字段的意义,并设计解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。同时,还有网络层刚接收到数据报时对其排队,以及对分片的分组进行重组。使我们对网络层的工作原理有更深刻的理解和掌握。

二、预备知识

每一种包交换网络技术对在一个物理帧所能传输的数据量都有一个上限,一般称这个上限为这种物理网络的最大传输单元,即MTU (maximum transferunit)。不同的物理网络有不同的〗最大传输单元。互联网上的IP数据报要通过许多具有不同MTU的物理网络。因此,在从一个具有较大MTU的网络转发到一个具有较小MTU的网络时,路由器需要把大的IP数据报分割成小的IP数据报分片,以便能装载到具有较小MTU 的网络物理帧中,此过程称为IP数据报的分片。目的主机不断累积到达的数据报分片,在所有的数据报分片到达后,将它们重新组合生成完整的数据报,此过程称为IP数据报的分片重组。IP分片重组是TCP / IP协议栈中IP层需要实现的不可缺少的功能之一。

互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道.编制程序前,首先要对IP包的格式有一定了解,图1给出了IP协议的数据包格式.

0 4 8 16 19 24 31

图1 IP数据包的格式

IP数据包的第一个字段是版本字段,其度是4位,表示所使用的IP协议的版本.目前的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要针对版本是IPV4的数据包的解析.

报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的.因此,IP数据包的头长度在20—40B之间,是可变的.

三、设计摘要

数据包将从帧中抽出后,这个帧剩下的部分将被丢弃。数据包被传送给以太网类型字段中中列出的上层协议,在这里是传递给IP协议,然后,网络层进行处理这个数据报。

IP层会接收这个数据包,先在主机的缓存中进行排队,然后,分析ip 首部各个字段的意义。通过对IP数据包的版本﹑头部长度服务类型﹑总长度﹑标示符﹑标志位﹑片位移﹑生存周期﹑协议﹑头部校验和﹑源地址﹑目的IP地址。对所输入的IP数据包进行对应的分析可以得到一系列的对应的属性值。

检查是否是ipv4版本和校验和是否正确,然后,检查其目的IP地址是否匹配以及各个字段的意义。还要看是否需要重组。由于数据包的目的地址与接收路由器所配置的任一地址不相匹配,路由器将在路由表中查

看目的IP的网络地址。如果正确,则数据包的协议字段将被检查以了解此有效负荷应该交付给运输层的那个进程。(将指针指向数据的开始处,然后调用上层的程序)。

四:设计过程

(一)、首先分析IP协议首部的语法结构,各个字段的意义及功能

IP首部各字段如下:

1、版本(4位):指IP协议的版本。

2、首部长度(4位):是报头数据的长度,是可变的。最常用的首部长度为20字节,最大60字节(报头长度为15)。

3、服务类型(8位):该字段给出发送进程建议路由器如何处理报片的方法。

4、数据报长度(16位):该字段是报头长度和数据字节的总和,最大长度为65535字节。

5、标识(16位):数据的主机为数据报分配一个唯一的数据报标识符。分片报文每个报片都有相同的数据标识符。

6、标志(3位):最低位MF=1表示还有分片。中间位DF=1表示不能分片。

7、报片偏移(13位):该字段标识报片在分片数据报中的位置。每个分片的长度为8的整数倍。

8、生存时间(8位):数据报在网络中的寿命。减为零后,该数据报被丢弃。

9、协议(8位):该字段指定数据报的数据部分所使用的协议,因此IP 层知道将接收到的数据报传向何处。

10、报头检验和(16位):该字端使数据报的接收方只需要检验IP报头中的错误,而不校验数据区的内容或报文。

11、源IP地址(32位):表示数据报的发送方。

12、目的IP地址(32位):表示数据报的目的地。

(二)、队列

由于在实际应用中,主机接收数据报并处理的IP数据报数目往往会很大,所以主机将接收到得数据报放入缓存区域内,让数据在缓存区域内自动排序,当主机要处理数据时按排队顺序最先取出最先进入的数据,即“先进先出”。

具体的实现代码如下:

#include

#include

#include

typedef struct IP{

//数据报具体内容

struct IP *next,*front;

} IP,*ip;

ip root,last;

IP v;

void init(){

root = (ip)malloc(sizeof(IP));

root->next = root->front = NULL;

}

void in(IP t){

ip t_ip = &t;

相关文档
最新文档