通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计课件.ppt

上传人(卖家):晟晟文业 文档编号:4931482 上传时间:2023-01-26 格式:PPT 页数:62 大小:792KB
下载 相关 举报
通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计课件.ppt_第1页
第1页 / 共62页
通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计课件.ppt_第2页
第2页 / 共62页
通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计课件.ppt_第3页
第3页 / 共62页
通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计课件.ppt_第4页
第4页 / 共62页
通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计课件.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、通信软件设计方法通信软件设计方法杨雄杨雄 编写编写二零零九年四月二零零九年四月成都信息工程学院1讲授内容讲授内容1)LINUX概况概况2)LINUX下下C语言程序编译和调试语言程序编译和调试2.1)LINUX开发环境学习开发环境学习(实验实验)3)通信系统和通信软件)通信系统和通信软件4)基于)基于TCP-IP的主机到主机通信软件示例的主机到主机通信软件示例4.1)SOCKET程序设计程序设计(实验实验)5)有状态与无状态通信协议程序设计)有状态与无状态通信协议程序设计6)LINUX内核程序设计内核程序设计7)低层)低层232接口通信程序设计接口通信程序设计8)设计一个简单链路层以及程序)设计

2、一个简单链路层以及程序8.1)IP软件和链路层软件设计软件和链路层软件设计(实验实验)成都信息工程学院2本讲重点问题本讲重点问题如何编写状态机程序如何编写状态机程序成都信息工程学院3第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计 协议与状态机协议与状态机 状态机程序设计状态机程序设计 IPIP转发程序设计转发程序设计成都信息工程学院4协议与状态机协议与状态机什么是协议?成都信息工程学院5协议与状态机协议与状态机标准规范协议私有的协议协议就是通信规程,通信双方或多方的信息传输约定信息传输:1、控制信息(数据);2、运载信息(数据)通信系统的核心就是协议成都信息工程学院

3、6协议与状态机协议与状态机协议分为无状态协议与有状态协议无状态协议:信息处理和历史记录无关例如 IP有状态协议:信息处理和历史记录有关例如 TCP有状态协议用状态机来表示或者状态图来表示成都信息工程学院7协议与状态机协议与状态机有限状态机的元素有限状态机的元素状态协议的一个逻辑概念,规定特定状态下可以接受特定事件和执行相应动作事件PDU、时钟计数溢出、系统管理指令动作功能程序成都信息工程学院8协议与状态机协议与状态机状态机简单例子状态机简单例子2个状态4个事件若干动作状态S1Disconnected断开状态S2Connected连接事件E4 关闭(Shutdown)-送关闭信息PDU给对方关闭

4、时钟事件E1 本地初始化(Initialization)-送启动信息PDU给对方开启时钟事件E2 收到对方来的数据PDU(Protocol Message)-处理接收的PDU事件E3 时钟到(Timer Expiry)-定时处理成都信息工程学院9协议与状态机协议与状态机如何编写这个状态机程序?成都信息工程学院10状态机程序设计状态机程序设计 示例示例6Switch-caseSwitch-case结构方法结构方法switch(event)case E1:/*Initialize*/If(current_state=DISCONNECTED)InitializeProtocol();current

5、_state=CONNECTED;break;case E2:/*Protocol Messages*/If(current_state=CONNECTED)ProcessMessages();break;case E3:/*Timer Event(s)*/If(current_state=CONNECTED)ProcessTimers();break;case E4:/*Disconnect Event*/If(current_state=CONNECTED)ShutdownProtocol();current_state=DISCONNECTED;break;default:logErro

6、r(Invalid Event,current_state,event);break;int event;int current_stat;Event变量的数值从哪里获得?增加case语句再用switch-case结构程序变得很复杂,可读差,修改困难状态数量很多怎么吧?事件数量很多怎么吧?这些函数是那里来的?成都信息工程学院11状态机程序设计状态机程序设计switch-caseswitch-case结构结构+主循环主循环while(1)get_event(&event);switch(event)case E1:/*Initialize*/break;case E2:/*Protocol Me

7、ssages*/break;case E3:/*Timer Event(s)*/break;case E4:/*Disconnect Event*/break;default:break;获得事件判断事件根据状态情况处理事件成都信息工程学院12状态机程序设计状态机程序设计数据数据结构方法结构方法状态事件表矩阵M*N,N表示状态数量,M表示事件数量交叉点中-Action,Next StateM M事件事件N N状态状态成都信息工程学院13状态机程序设计状态机程序设计 示例示例7数据数据结构方法结构方法-程序程序/*当前状态和事件的入口是当前状态和事件的入口是SetEventCurrentStat

8、eSetEventCurrentState */while(1)while(1)get_event(&event);get_event(&event);SetEventCurrentState.Action(SetEventCurrentState.Action(parameterparameter););CurrentStateCurrentState=SetEventCurrentState.next_statSetEventCurrentState.next_stat;/*入口矩阵是SetMN*/struct enter*Action();int next_state;SetSetMN;

9、/*函数参数*/struct parameter PDU*pdup;Environment*ep;parameterparameter;成都信息工程学院14状态机程序设计状态机程序设计数据数据结构方法结构方法-表表State S1DisconnectedState S2ConnectedEvent E1InitializeEvent E2Protocol MessagesEvent E3Timer EventsEvent E4DisconnectAction:LogErrorNext State=S1Action:LogErrorNext State=S1Action:LogErrorNext

10、 State=S1Action:SendStartupMessage,Start TimersNext State=S2Action:LogErrorNext State=S2Action:ProcessMessagesNext State=S2Action:ProcessTimersNext State=S2Action:SendShutdownMessage,Stop TimersNext State=S1成都信息工程学院15协议与状态机协议与状态机TCP的状态机是什么?成都信息工程学院16TCP的的有有限限状状态态机机 CLOSEDESTABLISHEDLISTENCLOSE_WAITF

11、IN_WAIT_1SYN_RCVDFIN_WAIT_2CLOSINGTIME_WAITSYN_SENTLAST_ACK主动打开被动打开被动关闭主动关闭起点被动打开主动打开 发送 SYN同时打开收到 SYN,发送 SYN,ACK收到 ACK数据传送 阶段 关闭发送 FIN 关闭发送 FIN 关闭发送 FIN收到 RST 收到 SYN发送 SYN,ACK 关闭或超时收到 ACK 收到 SYN,ACK发送 ACK收到 ACK收到 ACK收到 FIN发送 ACK收到 FIN,ACK 发送 ACK收到 FIN发送 ACK同时关闭收到 FIN发送 ACK发送 SYN定时经过两倍报文段寿命后关闭成都信息工程

12、学院17设置互斥事件队列为空?恢复互斥取出事件事件分析和处理睡眠等待如事件队列空,则从发送队列中取队列头块根据头块的标记做TCP/IP包并向IP层传递事件分析和处理WU2PIOCWU2PDWP2UWAWI2PDWP2IWAWU2PCLWTMO执行高层的ioctl请求处理高层传来的数据修改连接接收窗口接受IP数据包修改向IP发送数据窗口接收高层关闭连接请求超时处理TCP进程主流程比如打开连接流控成都信息工程学院18本章重点问题本章重点问题如何编写如何编写IPIP程序程序成都信息工程学院19第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计IP的功能是什么?成都信息工程学院

13、20通信网络系统通信网络系统数据网络怎样组成?数据网络怎样组成?Catalyst5000Cisco 7505Cisco 2509.Cisco 2509Cisco 4500-MCisco 4500-MCisco 2509服务器网管机Catalyst 2100CatalystCatalyst 2100Cisco 4500-MCisco 2509服务器网管机Catalyst 2100Catalyst 2100Catalyst 2100PCHUBHUBHUBCatalyst 210021个地市98个县PCPCPCPCPCCatalyst 3000Catalyst 3000HUBHUB X.25/FRC

14、atalyst 2900Cisco 2507Cisco 2507宜宾绵阳.省行网络中心.Catalyst 2900.PC.PCPC.PC.PC.PC.PC.PC网管机服务器成都信息工程学院21通信网络系统通信网络系统数据包交换物理层数据链路层IP(OSPF/RIP)以太网络PPP串口以太网络点到点网络成都信息工程学院22网络接口缓冲区数据队列转发表(路由表)IP接收和转发接收缓冲区接收缓冲区接收缓冲区接收缓冲区接收缓冲区每个网络接口设计一个队列核外进程部分接口中断处理子程序接口中断处理子程序接收缓冲区其他任务IP数据报文队列第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序

15、设计成都信息工程学院23第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计IP的软件包有那些模块?成都信息工程学院24数据包处理模块添加首部模块重装模块路由寻找模块分片模块IP分组IP分组IP分组TCP/IP分组TCP/IP分组,目的地址IP分组下一跳接口IP分组,下一跳IP分组重装表路由表MTU表IP软件包ARP以及数据链路层以及数据链路层TCP层层接口号接口号目的地址目的地址分片标记等分片标记等成都信息工程学院25第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计IPIP主程序主程序1)1)while(1)while(1)a)a)判断判断输入

16、队列输入队列有有IPIP报文吗?报文吗?如没有,则睡眠如没有,则睡眠b)b)从从输入队列输入队列中取一个中取一个IPIP报文报文c)c)调用调用数据包报文处理模块数据包报文处理模块d)d)根据处理结果根据处理结果 出错,抛弃改报文,结束本次循环出错,抛弃改报文,结束本次循环 本机报文,调用本机报文,调用重装模块重装模块 转发报文,调用转发报文,调用路由寻找模块路由寻找模块I.I.如存在路由,则调用如存在路由,则调用下层模块下层模块 成都信息工程学院26数据包处理模块添加首部模块IP分组IP分组TCP/IP分组,目的地址处理模块(参数是需要处理的IP报文)1、检查数据报文1)版本合法2)长度合法

17、3)检验和正确4)以上之一是NO,出错返回2、若目的地址是127.x.x.x或是本地IP地址A)本机返回3、若是路由器A)TTL减1,如TTL为0则出错返回4、转发返回路由寻找模块IP分组重装模块IP分组TCP层层ARP以及数据链路层以及数据链路层成都信息工程学院27路由寻找模块IP分组TCP/IP分组IP分组下一跳接口IP分组,下一跳路由表IP软件包ARP以及数据链路层以及数据链路层TCP层层目的地址目的地址成都信息工程学院28IP路由表 QS10.0.0.520.0.0.530.0.0.640.0.0.730.0.0.720.0.0.6R40.0.0.030.0.0.020.0.0.010

18、.0.0.0路由器R的路由表要到达的网络下一个路由器/下一跳20.0.0.530.0.0.510.0.0.540.0.0.5直接直接30.0.0.720.0.0.5直接直接第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院29IP路由交换 路由选择的次序为:直接交付特定主机路由选择特定网络路由选择默认路由选择 第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院30IP路由交换 从数据报中提取目的IP地址D;A)对路由表中的每一个项目I,并计算网络前缀N A)若N与I的网络的地址匹配(和目的地址比较)1)如是网关(G

19、出现)使用路由表中的下一跳项目作为下一跳地址(间接交付)2)如不是网关(G不出现)使用分组的目的地址作为下一跳地址(直接交付)3)把分组连同下一跳地址传送到分片模块 4)停止 B)找不到匹配,则发送给报文源ICMP差错报文 C)停止第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院31路由寻找模块IP分组TCP/IP分组IP分组下一跳接口IP分组,下一跳路由表IP软件包ARP以及数据链路层以及数据链路层TCP层层目的地址目的地址路由寻找模块1、取得数据报文中目的地址D2、从头到尾循环检查路由表当前i1)求出D的网络地址N2)比较N和路由表的i.目的地址3

20、)如匹配转43、如查找完成,但尚未存在匹配则1)出错返回4、从路由表i中取得出口号码5、存在路由返回成都信息工程学院32第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计IP软件的关键数据结构是哪几个?成都信息工程学院33IP数据包格式 第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计固定部分可变部分04816192431版 本标志生 存 时 间协 议标 识服 务 类 型总 长 度片 偏 移填 充首 部 检 验 和源 地 址目 的 地 址可 选 字 段 (长 度 可 变)比特首部长度数 据 部 分首部成都信息工程学院34typedef unsi

21、gned char u_int8_t;/8位typedef unsigned short u_short;/16位struct ip_addr unsigned long IP_addr;/IP地址,占32位;struct ip_mask unsigned long IP_mask;/IP掩码,占32位;第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计示例程序示例程序8成都信息工程学院35struct ip_hdrunsigned short intIP_v:4;/版本号码unsigned short intIP_hl:4;/首部长度u_int8_tIP_tos;/服

22、务类型u_shortIP_len;/数据报文总长度u_shortIP_id;/标识u_short IP_off;/分段偏移u_int8_tIP_ttl;/存活时间u_int8_tIP_p;/协议号码u_shortIP_sum;/检验和struct ip_addrIP_src,IP_dst;/源IP地址和目的IP地址;第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院36固定长度的IP数据报文#define IP_DATA1024struct ip_datastruct ip_hdr IP_hdr;charIP_dataIP_DATA;第五讲第五讲 有状态

23、与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院37第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计输入队列:输入队列:#define INPUT_QUEUE 100struct ip_data IP_InputQueueINPUT_QUEUE;int IP_InputQueue_head,IP_InputQueue_tail;输出到低层队列:输出到低层队列:/有低层定义,IP传输IP报文给低层模块/程序即可输出到高层队列:输出到高层队列:#define OUTPUT_QUEUE_TRAN 10struct ip_data IP_OutQueue

24、ToTranOUTPUT_QUEUE_TRAN;int IP_OutQueueToTran_head,IP_OutQueueToTran_tail;成都信息工程学院38IP路由表 掩码掩码目的地址目的地址下一跳地址下一跳地址标志标志引用计数引用计数使用使用接口接口255.255.255.192201.21.52.121201.21.52.89U590S0.4byte4byte4byte 1byte 1int 1long 1int第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院39IP路由表数据类型 struct routing_table struct

25、 ip_mask RT_mask;struct ip_addr RT_IP_address;struct ip_addr RT_IP_next;char RT_flag;int RT_datagram_count;long RT_user_conut;int RT_interface;掩码-4byte目的地址-4byte下一跳地址-4byte标记-1byte引用记数-1int使用记数-1long接口号码-1int第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院40IP路由表变量数组#define ROUTING_TABLE_MAX_NUMBER 10s

26、truct routing_table RoutingTableROUTING_TABLE_MAX_NUMBER;第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院41第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计IP软件的关键函数是哪几个?成都信息工程学院42第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计处理模块(参数是需要处理的IP报文)1、检查数据报文1)版本合法2)长度合法3)检验和正确4)以上之一是NO,出错返回2、若目的地址是127.x.x.x或是本地IP地址A)本机返回3、若是路由器A

27、)TTL减1,如TTL为0则出错返回4、转发返回CheckIpData(IP报文指针)返回值:1,合法 -1,版本错误 -2,长度错误 -3,检验和不正确IsThisMachine(IP报文指针)返回值:1,转发 2,本机接收 -1,错误本机地址变量:ThisIPAddress路由器标记变量IsRouter值:1是路由器,0是主机成都信息工程学院43路由寻找模块1、取得数据报文中目的地址D2、从头到尾循环检查路由表当前i1)求出D的网络地址N2)比较N和路由表的i.目的地址3)如匹配转53、如查找完成,但尚未存在匹配则1)出错返回4、从路由表i中取得出口号码5、存在路由返回Analyze(st

28、ruct ip_addr *NetP,struct ip_addr *DestP)返回值:0,不匹配 1,匹配第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院44第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计IP软件包的模块程序怎么写?成都信息工程学院45第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计IpDataProcess(struct ip_data*IpDataP)int CheckR;CheckR=CheckIpData(IpDataP);switch(CheckR)case VER_I

29、NVALID:case LENTH_INVALID:case CHECK_SUM_FAILING:if(IsThisMachine(IpDataP-IP_Dst)return THIS_MACHINE;if(IsRouter)int ttl=-IpDataP-IP_ttl;if(ttl=0)rerurn PROCESS_IPDATA_TTL;CheckSum(IpDataP);return FORWARD;处理模块(参数是需要处理的IP报文)1、检查数据报文1)版本合法2)长度合法3)检验和正确4)以上之一是NO,出错返回2、若目的地址是127.x.x.x或是本地IP地址A)本机返回3、若是路

30、由器A)TTL减1,如TTL为0则出错返回4、转发返回成都信息工程学院46第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计IpDataProcess(struct ip_data*IpDataP)int CheckR;CheckR=CheckIpData(IpDataP);switch(CheckR)case VER_INVALID:ret=PROCESS_IPDATA_VER;goto leave;case LENTH_INVALID:ret=PROCESS_IPDATA_LENTH;goto leave;case CHECK_SUM_FAILING:ret=PRO

31、CESS_IPDATA_CHECK_SUM;goto leave;if(IsThisMachine(IpDataP-IP_Dst)return THIS_MACHINE;if(IsRouter)int ttl=-IpDataP-IP_ttl;if(ttl=0)rer=PROCESS_IPDATA_TTL;goto leave;CheckSum(IpDataP);ret=PROCESS_IPDATA_OK;Leave:return ret成都信息工程学院47IsForwardOrdiscard(struct ip_data*IpDataP,int*IfNoP);int RoutingTableI

32、ndex;struct ip_addr Dest;bcopy(&Dest,IpDataP-IP_dst,sizeof Dest);for(RoutingTableIndex=0;最后)struct ip_addr Net=resolve(掩码);if(Analyze(Net,路由表)*IfNoP=RoutingTable.RT_interface;return HAVE_PATH;return PATH_ERROR;路由寻找模块1、取得数据报文中目的地址D2、从头到尾循环检查路由表当前i1)求出网络地址N2)比较N和路由表的i.目的地址3)如匹配转53、如查找完成,但尚未存在匹配则1)出错返回

33、4、从路由表i中取得出口号码5、存在路由返回成都信息工程学院48IsForwardOrdiscard(struct ip_data*IpDataP,int*IfNoP);int RoutingTableIndex;struct ip_addr Dest;bcopy(&Dest,IpDataP-IP_dst,sizeof Dest);for(RoutingTableIndex=0;RoutingTableIndex RTLastIndex;RoutingTableIndex+)struct ip_addr Net;Resolve(&RoutingTableRoutingTableIndex.RT

34、_mask,&Dest,&Net);if(Analyze(Net,RoutingTableRoutingTableIndex.RT_IP_address)*IfNOP=RoutingTableRoutingTableIndex.RT_interface;return HAVE_PATH;return PATH_ERROR;第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院49IsThisMachine(struct ip_addr *DestP)if(*DestP=127)return 1;return Analyze(&ThisIPAddress,De

35、stP);Analyze(struct ip_addr *NetP,struct ip_addr *DestP)int i;char*d=(char*)DestP;char*n=(char*)NetP;for(i=0;i siezof*DestP;i+)if(*d+!=*n+)return 0;return 1;第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院50Resolve(struct ip_mask *MaskP,struct ip_addr *DestP,struct ip_addr *NetP)int i;char*d=(char*)Des

36、tP;char*m=(char*)MaskP;char*n=(char*)NetP for(i=0;i siezof*DestP;i+)*n+=(*d+)&(*m+);第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计成都信息工程学院51第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计IP软件包中队列操作如何写?成都信息工程学院52第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计IP数据IP头IP数据IP头IP数据IP头IP数据IP头队列首下标队列尾下标取IP数据报文不释放空间返回队列首下标的地址放IP数据报文把数据报

37、文拷贝到队列下标指示的地址空间中;队列下标+;if(队列下标到最大值)队列下标=0;释放空间队列首下标+;if(下标到最大值)队列下标=0;成都信息工程学院53第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计输入队列:输入队列:#define INPUT_QUEUE 100struct ip_data IP_InputQueueINPUT_QUEUE;int IP_InputQueue_head,IP_InputQueue_tail;输出到低层队列:输出到低层队列:/低层定义输出到高层队列输出到高层队列:#define OUTPUT_QUEUE_TRAN 10stru

38、ct ip_data IP_OutQueueToTranOUTPUT_QUEUE_TRAN;int IP_OutQueueToTran_head,IP_OutQueueToTran_tail;成都信息工程学院54第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计输入队列:输入队列:#define INPUT_QUEUE 100struct ip_data IP_InputQueueINPUT_QUEUE;int IP_InputQueue_head,IP_InputQueue_tail;从输入队列释放一个IP数据报文空间操作ReleaseIP_InputQueue()I

39、P_InputQueue_head+;if(IP_InputQueue_head=INPUT_QUEUE)IP_InputQueue_head=0;成都信息工程学院55第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计输入队列:输入队列:#define INPUT_QUEUE 100struct ip_data IP_InputQueueINPUT_QUEUE;int IP_InputQueue_head,IP_InputQueue_tail;从输入队列取一个IP数据报文操作不释放,不拷贝struct ip_data*GetIPDataFromInputQueue()r

40、eturn&IP_InputQueueIP_InputQueue_head;成都信息工程学院56第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计输入队列:输入队列:#define INPUT_QUEUE 100struct ip_data IP_InputQueueINPUT_QUEUE;int IP_InputQueue_head,IP_InputQueue_tail;放IP数据报文到输入队列操作保证有空间!PutIPDataToIP_InputQueue(struct ip_data*IPDataP)reigster int index=IP_InputQueue

41、_tail;bcopy(IPDataP,IP_InputQueueindex,sizeof*IPData);if(+index=INPUT_QUEUE)index=0;IP_InputQueue_tail=index;成都信息工程学院57第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计输出队列到高层:输出队列到高层:#define OUTPUT_QUEUE_TRAN 10struct ip_data IP_OutQueueToTranOUTPUT_QUEUE_TRAN;int IP_OutQueueToTran_head,IP_OutQueueToTran_tail;

42、从输出队列释放一个IP数据报文空间操作ReleaseIP_OutputQueueToTran()IP_OutputQueueToTran_head+;if(IP_OutputQueueToTran_head=OUTPUT_QUEUE_TRAN)IP_OutputQueueToTran_head=0;成都信息工程学院58第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计输出队列到高层:输出队列到高层:#define OUTPUT_QUEUE_TRAN 10struct ip_data IP_OutQueueToTranOUTPUT_QUEUE_TRAN;int IP_Ou

43、tQueueToTran_head,IP_OutQueueToTran_tail;从输出队列取一个IP数据报文操作不释放,不拷贝struct ip_data*GetIPDataFromOutputQueueToTran()return&IP_OutputQueueToTranIP_OutputQueueToTran_head;成都信息工程学院59第五讲第五讲 有状态与无状态通信协议程序设计有状态与无状态通信协议程序设计输出队列到高层:输出队列到高层:#define OUTPUT_QUEUE_TRAN 10struct ip_data IP_OutQueueToTranOUTPUT_QUEUE_

44、TRAN;int IP_OutQueueToTran_head,IP_OutQueueToTran_tail;放IP数据报文到输出队列操作保证有空间!PutIPDataToIP_OutputQueueToTran(struct ip_data*IPDataP)int index=IP_OutputQueueToTran_tail;bcopy(IPDataP,IP_OutputQueueToTranindex,sizeof*IPData);if(+index=OUTPUT_QUEUE_TRAN)index=0;IP_OutputQueueToTran_tail=index;成都信息工程学院60本章需要掌握的概念和方法本章需要掌握的概念和方法1、IP数据包类型设计数据包类型设计2、路由表程序设计、路由表程序设计3、IP路由算法和程序路由算法和程序成都信息工程学院61第第五五讲讲 结结 束束

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|