概要设计-基于嵌入式IP协议栈的设计与实现_第1页
概要设计-基于嵌入式IP协议栈的设计与实现_第2页
概要设计-基于嵌入式IP协议栈的设计与实现_第3页
概要设计-基于嵌入式IP协议栈的设计与实现_第4页
概要设计-基于嵌入式IP协议栈的设计与实现_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于嵌入式ip协议栈的设计与实现概要设计总页数31编制修改编号日期修改人版木号修改内容1ver0.1.0初始做成231 文档概述11.1 文档目的和范围11.2 术语/缩略语12 模块概述12.1 模块功能定义22.1.1 ip 协议22.1.2 socket协议22.1.3 dhcp 协议22.4icmp 协'议22.2 模块结构32.2.1 ip 协议32.2.2 socket协议42.2.3 dhcp 协议42.2.4 icmp 协'议52.3 模块动作时序6231ip协议时序图62.3.2 socket协议吋序图72.3.3 dhcp协议时序图82.3.4 icmp协议

2、时序图83 接口说明93 数据结构定义93.1.1 socket协议93.1.2 dhcp 协议93.3icmp 协'议1()3.2 函数10321模块间接口函数103.2.2 模块内接口函211文档概述1.1文档目的和范围该项口主耍完成主要是tcp/ip模型小的网络接口层和缓冲堆栈ip协议,icmp协议,socket协议,dhcp 协议的实现和操作。1.2术语/缩略语序号术语/缩略语说明1data.buff数据缓冲区2ethernet网络接口层3arp地址解析协议4macp maptablemacip地址映射表5icmp(internet control message protoc

3、ol) internet 控制报文协议6socket通信7udp面向无连接的传输协议8dhcp动态主机设置协议9dns域名解析协议2模块概述ip模块位于ip层,主要功能就是对数据报加上ip首部,然后发送给网络接口层。还有从网络接口层 接叉数据,再给运输层或icmposocket模块通过udp和tcp实现socket的通信模块,使得应用程序能调用socket的函数和其他的客 户机通信dhcp使用客户端/服务器模式,最重要的功能是动态分配。除了 ip地址,dhcp分组还为客户端提 供其他的配置信息,比如子网掩码。dhcp由客户和服务器设备之间的一系列报文构成,它使用udp作 为运输协议。使用udp

4、的原因之一是简单和支持广播。icmp协议是实现icmp报文的发送,接受,以及对报文的解析。实现ping命令。2.1模块功能定义2.1.1 ip 协议序号功能点功能点详细内容1发送数据报对tcp, udp或1cmp发来的数据报加上1p首部,然后在发给网络接口层2接受数据报从网络接口层接受数据报,然后通过分析协议给tcp, udp或icmp2.1.2 socket 协议序号功能点功能点详细内容1发送数据通过函数发送send数据2接收数据通过receive接收通过udp发送来数据3绑定客户bind绑定客户机2.1.3 dhcp 协议序号功能点功能点详细内容1发送报文向dhcp服务器发discover

5、,request,declient,release 报文送2接收报文接收服务器发送的offer,ack,nack报文3结构体转换为数组发送数据吋将结构体打包成数组形式传给udp4解析报文解析从udp接收的报文数组2.1.4 icmp 协议序号功能点功能点详细内容1发送icmp报文填充icmp包头部,并且调用ip协议发送出去2接收icmp报文接收从fi标地址返回的icmp报文3计算校验和计算校验和,确定报文是否正确4解析icmp首部解析icmp首部,获得数据5得到目标ip地址通过获得键盘输入,获得目标ip地址6获得ping命令参数通过键盘输入的值,获得ping命令的参数7ping功能的实现实现p

6、ing功能2.2模块结构2.2.1 ip 协议localmoduleexterior module模块名称模块类型概要说明ip send接口对数据报封装ip首部,然后发送给网络接口层ip recv接口从网络接口层接受数据报interface function arpenc1cmpfcpudp222 socket 协议uup模块模块名称模块类型概要说明socket接口产生socket描述符bind接口帮助指定一个套接字指定的端11socket sendto接口通过套接字流进行发送数据socket readfrom接口通过套接字流进行接收close接口关闭套接字socket send()接1丨so

7、cket recv()接口connect()接口accept()接口2.2.3 dhcp 协议发送数据接收数据udp模块名称模块类型概要说明发送数据接口将打包好的数据通过udp发送出去接收数据接口通过udp接收从dhcp服务器发送过来的数据数据打包内部模块在dhcp发送报文的数据包中放入响应的值解析数据包内部模块解析从dhcp接收的数据包,进行处理得到相应的数据2.2.4 icmp 协议get argumentdecode icmpd矗aicmrscndfilljcmpdataget 4estip徴gctchgcksumip於发必覚包 【p綻nd模块名称模块类型概要说明icmp recv接口接

8、收icmp数据报get argume nt内部模块得到ping命令的参数icmp send内部模块发送icmp数据报decodejcmpdata内部模块解析icmp首部get checksum内部模块得到icmp校验和fill icmpdata内部模块填充icmp首部get destlp内部模块得到目的ip地址ping内部模块实现ping命令2.3模块动作时序2.3.1 ip协议时序图akptncipiillg;tmao11c;i i ire turn mac adress.enc. send-ie kecvie send:ie send:it send: iudp kecvice kecvi

9、cmp kecv i2.3.2 socket协议时序图客丿1机socket:1ch1cp scndc)? 1cijsock 1. ivcv()> socket!nusocket: v():« socketuloscsockct* ( >-socket:2.3.3 dhcp协议时序图用户机icmf send:112.3.4 icmp协议时序图:icmp send:ip senddecode icmpdata2填充tip首舐调用p层发送出去3伐送后接收塑的数据报,j解析icmp数据报诩得到的数据显示左终關3接口说明3.1数据结构定义3.1.1 socket 协议struct

10、socketint8u type; /tcp or udpint8u backlog; 最大连接数int8u ser_port;int8u scr_addr4;int8u sin_port;int8u sin_addr|41;struct sockaddrint8u sin_port;int8u sin_addr4;3.1.2 dhcp 协议sti-uct dhcp发送和接收的dhcp包int8u opll; 来自客户的请求(1)或者来自服务器的请求(2)int8u htypellj;/硬件类型,ethernet 为 1int8u hlenl;/硬件长度,ethernet 为 6int8u h

11、()psl;若数据经过路由器传送,每站加1,若在同一网内,为0int8u transaction_id4;/事务id,随机数,用于客八和服务器之间匹配谙求和响应消息int8u second;由用户指定的时间,指开始地址获取和更新进行示的时间int8u flags2;最左一位为1时表示服务器将以广播方式传送封包给客户int8u ciaddi;/用户1p,该字段为0,除非客八已有ipint8u yiaddr4;/w务器分配给客户的ipint8u siaddr4;/务器ip地址,用于bootstrap过程中的ip地址int8u giaddr4;/转发代理(网关)ip,这不是配置给客户的默认网关地址i

12、nt8u cmaddr;客户的mac地址int8u chaddr10;/客户的硬件地址int8u sname64;/nj*选服务器的名称,以0x00结尾int8u filc128;/ 启动文件名int8u magic_cookie4j;int8u option312 ;/可选的参数字段3.1.3 icmp 协议typedef stnict icmpheaderint8u type; /类型tnt8u code;/代码int16u checksum;/校验和int16u seq;序列号int32u timetamp;/时间戳3.2函数给出模块所有对外接口的函数声明及说明。 两数说明的方式可以参见

13、下血的形式。321模块间接口函数3.2.1.1 ipsend函数名ip_send文件名./ip.c功能概要给数据报加上ip首部,然后发送给网络接口层记述形式void ip_send(int8u* data,int16u length,int8u protocol)参数类型变量名i/o说明int8u*datai数据报int16ulengthi数据报k度int8uprotocoli数据报协议返回值类型void说明值详细说明对tcp, udp或icmp发来的数据报加上ip首部并发送给网络接口展使用注意事项321.2 ip_recv函数名ip.recv文件名./ip.c功能概要从网络接口层接受数据报记

14、述形式void ip_recv(int8u *data,int16u length)参数类型变量名i/o说明int8u*datairh网络接口层发给來的数据1nt16ulengthi数据报的长度返回值类型void说明值详细说明由网络接口层调用该函数,参数为指针,指针指到ip首部h3.2.1.3 socket函数名socket文件名 /socket, c功能概要socket初始化记述形式socket * socket(uint8 type)参数类型变量名i/o说明uint8uint8 type-初始化返回值类型socket*说明值一个socket的指针返回socket的结构体指针详细说明使用so

15、cket ()函数给应用程序创建一个套接口。使用注意事项无3.2.1.4 bind函数名bind文件名/socketc功能概要将ip和端口绑定到一个socket指针记述形式uint8 bind(socket *sockfd, struct sockaddr * name, uint 16 namelen)参数类型变量名i/o说明socket-sockfd-创建的sockfdsockaddrname绑定的ip和portuint16namele n结构体的长度返回值类型int说明值1正常结束0异常结束详细说明将ip地址和端口绑定到一个socket指针* sockfd指向的s。使用注意事项在sock

16、et初始化之后调用3.2.1.5 connect函数名connect文件名 /socket, c功能概要向指定sockfd插口连接记述形式uint8 connect(socket sockfd ,struct sockaddr *toruint16 tolen)参数类型变量名i/o说明socketsockfd填入发送数据的信息sockaddrto服务器的信息uint16tole n结构体长度返回值uint8uint8说明值连接是否正确详细说明连接服务器山tcp实现使用注意事项传入参数的范围3.2.1.6 listen函数名listeno文件名/socketc功能概要监听sockfd的连接数记述

17、形式int listen(socket sockfd, int backlog)参数类型变量名i/o说明socketsockfd套接字intbacklog连接的个数返回值类型uint8说明值1返回监听到可以连接0连接数满了详细说明本地能够等待的最人数目使用注意事项传入参数的范围3.2.1.7 accept函数名accept文件名 /socket.c功能概要接受连接记述形式uint8 accept(socket sockfd, void *addrr uint16 *addrlen);参数类型变量名i/o说明socketsockfd客户机的信息sockaddraddr发送过來的信息uint16a

18、ddrlen信息长度返回值类型int说明值1连接上0没有连接上详细说明accept ()函数将冋返冋一个新的套接字描述符,这个描述符就代表了这个连接使用注意事项传入参数的范围3.2.1.8 socket_sendto函数名sen dto文件名/socket.c功能概要向指定socket *sock插口发送数据记述形式uint8 sendto(socket sockfd, uint8 *buff,uint16 len, lintsflags,struct sockaddr *to)参数类型变量名i/o说明socketsockfd填入发送数据的信息uint8buffdata数据uintl6len长

19、度uint8flags标志位sockaddrto发送到的机子的信息返回值类型uint8说明值返回发送的字节数详细说明向指定socket *sock插口发送数据,山udp使用。使用注意事项传入参数的范围321.9 socket_recvfrom函数名socket.recv文件名/socketc功能概要socket_recv ()函数从套接口上接收一个数据报文记述形式uintl 6 socket recv (socket *sruint8 *buffruint16 len, uint8 flags,struct sockaddr * from)参数类型变量名i/o说明socke uint8 int

20、tag接受的数据的信息uint8buffdata数据uint16len长度uint8flags标志位sockaddrto发送到的机子的信息返回值类型uintl6说明值返冋接收数据的字节数异常结束详细说明对于无连接的套接i i,通过recvfrom0函数从套接口上接收一个数据报文,并报存发送数据的源地址。使用注意事项无3.2.1.10 socket_send函数名socket_se nd文件名/socket.c功能概要向指定socket *sock插口发送数据记述形式uintl6 sendto(socket sockfd, uint8 *buff,uintl6 len, uintsflags)参

21、数类型变量名i/o说明socket uint8oo填入发送数据的信息uint8buffdata数据uint16len长度uint8flags标志位返回值类型uint16说明值返回发送的字节数详细说明向指定socket *sock插口发送数据,由tcp使用。使用注意事项传入参数的范围3.2.1.11 socket_recv函数名socket.recv文件名 /socket c功能概要socket_recv()函数从套接i i上接收一个数据报文记述形式uintl 6 socket recv (socket *s,uint8 *bufftuint16 len, uintfiflags)参数类型变量名

22、i/o说明socke uint8 inttag接受的数据的信息uint8buffdata数据uintl6len长度uint8flags标志位返回值类型uintl6说明值返冋接收数据的字节数异常结束详细说明对于无连接的套接口,通过sockel recvo函数从套接口上接收一个数据报文,并报存发送数据的源地址。使用注意事项无3.2.1.12 closesocket函数名closesocket文件名/socketo c功能概要关闭这个套接口记述形式uint8 closesocket( socket s )参数类型变量名i/o说明sockets要关闭的socket返回值类型uint8说明值0正常结束1

23、异常结束详细说明关闭这个套接口,以释放与该套接口关联的所有资源,包括等候处理的数据使用注意事项无3.2.1.13 dhcp_send函数名dhcp.se nd文件名dhcp. c功能概要dns协议调川ldp发送数据包给diicp服务器记述形式void dncp_send(void)参数类型变量名i/o说明void返回值类型void说明值详细说明dhcp.send函数把打包好的数据通过udp发送给dhcp服务器使用注意事项无3.2.1.14 dhcp_receive函数名dhcp_receive文件名dhcp, c功能概要接收从diicp服务器上发回的信息记述形式void dhcp_receiv

24、e(int8u *dhcp_buffer, int16u *length)参数类型变量名i/o说明int8u *-dhcp_bufferi-存放接收到的数据的缓冲区int16ulengthi-存放接收到的数据报的长度返回值类型void说明值详细说明接收从服务器上发來的数据包,经过一系列的处理,获得ip使用注意事项是udp的接口函数3.2.1.17 icmp_recv函数名icmprecv文件名tcp_ip/source功能概要接收icmp数据报记述形式void icmp_recv(int8u * data,int16u length)参数类型变量名i/o说明int8u*datai接收到的数组i

25、nt16ulengthi接收到的长度返回值类型void说明值详细说明接收icmp数据报,供ip模块调用使用注意事项无3.2.1.18 ping函数名ping文件名tcp_ip/source功能概要ping程序记述形式void ping ()参数类型变量名i/o说明void返回值类型void说明值详细说明ping程序,供主函数调用使用注意事项无3.2.2模块内接口函3.2.2.1 dhcp_stru2ar函数名dhcp_stru2ar文件名dhcp. c功能概要将结构体打包成数组的形式记述形式int8u * dhcp_stru2ar(int8u *buffer,int16u *array_len

26、g)参数类型变量名i/o说明int8u*buffer0存放要发送的数据的结构体int16u *arrayeng0转换后的数组的长度返回值类型int8u *说明值dhcp_array返回解析的报文数组详细说明把结构体中的数据放入到一个数组中便于udp的调用使用注意事项无322.2 dhcp_analyze函数名dhcp_a nalyze文件名dhcp. c功能概要解析从udp获得的diicp数据包记述形式void dhcp_analyze(int8u *dhcp_buffer)参数类型变量名i/o说明int8u-dns_bufferi-存放打包好的数据的缓冲区返回值类型void说明3.2.2.3

27、dhcp_getstr函数名dhcp.getstr文件名dhcp, c功能概要把数据放入到结构体中。记述形式dhcp.struct get_struct(int 16u *leng)参数类型变量名i/o说明int16u *leng0结构体的长度(相当于返冋值)返回值类型dhcp.s true t说明详细说明值要把数据放入到结构体中把数据放入到结构体屮,(放入结构体屮比放入数组屮方便)使用注意事项无3.2.2.8 quejnit函数名quenti文件名queue.h功能概要队列的初始化记述形式int8u quejnit(queue *ptr);参数类型变量名i/o说明queue*ptri一个指向

28、队列头地址的指针返回值类型int8u说明值sue正常创建队列err队列创建失败详细说明无使用注意事项无322.9 que_enque函数名que_enque文件名queue.h功能概要信息入队列记述形式int8u que.enque(queue *ptrtelement data);参数类型变量名i/o说明queue*ptri一个指向队列头地址的指针elementdatai信息参数返回值类型int8u说明值sue正常入队err入队失败详细说明无使用注意事项无3.2.2.10 que_exque函数名que_exque文件名queue.h功能概要信息出队列记述形式int8u que.exque(queue *ptr ,element *data,int8u info);参数类型变量名i/o说明queue*ptri一个指向队列头地址的指针eleme ntdatai信息参数int8uinfoi存储収出信息的变量返回值类型int8u说明值sue正常出队err出队失败详细说明无使用注意事项无3.2.2.11 que_deque函数名que.deque文件名queue.h功能概要销毁队列记述形式int8u que_deque(queue *ptr);参数类型变量名i/o说明queue*ptri指向队列头地址的变量返回值类型int8u说明值sue正常销毁队列3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论