通信软件设计方法第五讲状态机程序设计与无状态协议程序设计ppt课件.ppt_第1页
通信软件设计方法第五讲状态机程序设计与无状态协议程序设计ppt课件.ppt_第2页
通信软件设计方法第五讲状态机程序设计与无状态协议程序设计ppt课件.ppt_第3页
通信软件设计方法第五讲状态机程序设计与无状态协议程序设计ppt课件.ppt_第4页
通信软件设计方法第五讲状态机程序设计与无状态协议程序设计ppt课件.ppt_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

通信软件设计方法 0 讲授内容 1 LINUX概况2 LINUX下C语言程序编译和调试2 1 LINUX开发环境学习 实验 3 通信系统和通信软件4 基于TCP IP的主机到主机通信软件示例4 1 SOCKET程序设计 实验 5 有状态与无状态通信协议程序设计6 LINUX内核程序设计7 低层232接口通信程序设计8 设计一个简单链路层以及程序8 1 IP软件和链路层软件设计 实验 1 本讲重点问题 如何编写状态机程序 2 第五讲有状态与无状态通信协议程序设计 协议与状态机状态机程序设计IP转发程序设计 3 协议与状态机 什么是协议 4 协议与状态机 标准规范协议私有的协议 协议就是通信规程 通信双方或多方的信息传输约定信息传输 1 控制信息 数据 2 运载信息 数据 通信系统的核心就是协议 5 协议与状态机 协议分为无状态协议与有状态协议 无状态协议 信息处理和历史记录无关例如IP 有状态协议 信息处理和历史记录有关例如TCP有状态协议用状态机来表示或者状态图来表示 6 协议与状态机 有限状态机的元素 状态协议的一个逻辑概念 规定特定状态下可以接受特定事件和执行相应动作事件PDU 时钟计数溢出 系统管理指令动作功能程序 7 协议与状态机 状态机简单例子 2个状态4个事件若干动作 状态S1Disconnected断开 状态S2Connected连接 事件E4 关闭 Shutdown 送关闭信息PDU给对方关闭时钟 事件E1 本地初始化 Initialization 送启动信息PDU给对方开启时钟 事件E2 收到对方来的数据PDU ProtocolMessage 处理接收的PDU 事件E3 时钟到 TimerExpiry 定时处理 8 协议与状态机 如何编写这个状态机程序 9 状态机程序设计 示例6 Switch case结构方法 switch event caseE1 Initialize If current state DISCONNECTED InitializeProtocol current state CONNECTED break caseE2 ProtocolMessages If current state CONNECTED ProcessMessages break caseE3 TimerEvent s If current state CONNECTED ProcessTimers break caseE4 DisconnectEvent If current state CONNECTED ShutdownProtocol current state DISCONNECTED break default logError InvalidEvent current state event break intevent intcurrent stat Event变量的数值从哪里获得 增加case语句 再用switch case结构 10 状态机程序设计 switch case结构 主循环 while 1 get event 获得事件 判断事件 根据状态情况处理事件 11 状态机程序设计 数据结构方法 状态事件表矩阵M N N表示状态数量 M表示事件数量交叉点中 Action NextState M事件 N状态 12 状态机程序设计 示例7 数据结构方法 程序 当前状态和事件的入口是Set Event CurrentState while 1 get event 入口矩阵是Set M N structenter Action intnext state Set M N 函数参数 structparameter PDU pdup Environment ep parameter 13 状态机程序设计 数据结构方法 表 14 协议与状态机 TCP的状态机是什么 15 TCP的有限状态机 CLOSED ESTABLISHED LISTEN CLOSE WAIT FIN WAIT 1 SYN RCVD FIN WAIT 2 CLOSING TIME WAIT SYN SENT LAST 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 定时经过两倍报文段寿命后 关闭 16 设置互斥 事件队列为空 恢复互斥 取出事件 事件分析和处理 睡眠等待 如事件队列空 则从发送队列中取队列头块根据头块的标记做TCP IP包并向IP层传递 事件分析和处理 WU2PIOC WU2PD WP2UWA WI2PD WP2IWA WU2PCL WTMO 执行高层的ioctl请求 处理高层传来的数据 修改连接接收窗口 接受IP数据包 修改向IP发送数据窗口 接收高层关闭连接请求 超时处理 TCP进程主流程 比如打开连接 流控 17 本章重点问题 如何编写IP程序 18 第五讲有状态与无状态通信协议程序设计 IP的功能是什么 19 通信网络系统 20 通信网络系统 数据包交换 以太网络 点到点网络 21 第五讲有状态与无状态通信协议程序设计 网络接口 缓冲区数据队列 转发表 路由表 IP接收和转发 接收缓冲区 接收缓冲区 接收缓冲区 接收缓冲区 接收缓冲区 每个网络接口设计一个队列 核外进程部分 接口中断处理子程序 接收缓冲区 其他任务 IP数据报文队列 22 第五讲有状态与无状态通信协议程序设计 IP的软件包有那些模块 23 数据包处理模块 添加首部模块 重装模块 路由寻找模块 分片模块 IP分组 IP分组 IP分组 TCP IP分组 TCP IP分组 目的地址 IP分组下一跳接口 IP分组 下一跳 IP分组 重装表 路由表 MTU表 IP软件包 ARP以及数据链路层 TCP层 接口号 目的地址 分片标记等 24 第五讲有状态与无状态通信协议程序设计 IP主程序 while 1 判断输入队列有IP报文吗 如没有 则睡眠从输入队列中取一个IP报文调用数据包报文处理模块根据处理结果出错 抛弃改报文 结束本次循环本机报文 调用重装模块转发报文 调用路由寻找模块如存在路由 则调用下层模块 25 数据包处理模块 添加首部模块 IP分组 IP分组 TCP IP分组 目的地址 处理模块 参数是需要处理的IP报文 1 检查数据报文1 版本合法2 长度合法3 检验和正确4 以上之一是NO 出错返回2 若目的地址是127 x x x或是本地IP地址A 本机返回3 若是路由器A TTL减1 如TTL为0则出错返回4 转发返回 TCP层 ARP以及数据链路层 26 路由寻找模块 IP分组 TCP IP分组 IP分组下一跳接口 IP分组 下一跳 路由表 IP软件包 ARP以及数据链路层 TCP层 目的地址 27 第五讲有状态与无状态通信协议程序设计 IP路由表 Q S 10 0 0 5 20 0 0 5 30 0 0 6 40 0 0 7 30 0 0 7 20 0 0 6 R 40 0 0 0 30 0 0 0 20 0 0 0 10 0 0 0 路由器R的路由表 要到达的网络 下一个路由器 下一跳 20 0 0 5 30 0 0 5 10 0 0 5 40 0 0 5 直接 30 0 0 7 20 0 0 5 直接 28 第五讲有状态与无状态通信协议程序设计 IP路由交换 路由选择的次序为 直接交付特定主机路由选择特定网络路由选择默认路由选择 29 第五讲有状态与无状态通信协议程序设计 IP路由交换 从数据报中提取目的IP地址D A 对路由表中的每一个项目I 并计算网络前缀NA 若N与I的网络的地址匹配 和目的地址比较 1 如是网关 G出现 使用路由表中的下一跳项目作为下一跳地址 间接交付 2 如不是网关 G不出现 使用分组的目的地址作为下一跳地址 直接交付 3 把分组连同下一跳地址传送到分片模块4 停止B 找不到匹配 则发送给报文源ICMP差错报文C 停止 30 路由寻找模块 IP分组 TCP IP分组 IP分组下一跳接口 IP分组 下一跳 路由表 IP软件包 ARP以及数据链路层 TCP层 目的地址 路由寻找模块1 取得数据报文中目的地址D2 从头到尾循环检查路由表 当前i 1 求出D的网络地址N2 比较N和路由表的 i 目的地址3 如匹配转43 如查找完成 但尚未存在匹配则1 出错返回4 从路由表 i 中取得出口号码5 存在路由返回 31 第五讲有状态与无状态通信协议程序设计 IP软件的关键数据结构是哪几个 32 第五讲有状态与无状态通信协议程序设计 IP数据包格式 33 第五讲有状态与无状态通信协议程序设计 typedefunsignedcharu int8 t 8位typedefunsignedshortu short 16位structip addr unsignedlongIP addr IP地址 占32位 structip mask unsignedlongIP mask IP掩码 占32位 示例程序8 34 第五讲有状态与无状态通信协议程序设计 structip hdr unsignedshortintIP v 4 版本号码unsignedshortintIP hl 4 首部长度u int8 tIP tos 服务类型u shortIP len 数据报文总长度u shortIP id 标识u shortIP off 分段偏移u int8 tIP ttl 存活时间u int8 tIP p 协议号码u shortIP sum 检验和structip addrIP src IP dst 源IP地址和目的IP地址 35 第五讲有状态与无状态通信协议程序设计 固定长度的IP数据报文 defineIP DATA1024structip data structip hdrIP hdr charIP data IP DATA 36 第五讲有状态与无状态通信协议程序设计 输入队列 defineINPUT QUEUE100structip dataIP InputQueue INPUT QUEUE intIP InputQueue head IP InputQueue tail 输出到低层队列 有低层定义 IP传输IP报文给低层模块 程序即可输出到高层队列 defineOUTPUT QUEUE TRAN10structip dataIP OutQueueToTran OUTPUT QUEUE TRAN intIP OutQueueToTran head IP OutQueueToTran tail 37 第五讲有状态与无状态通信协议程序设计 IP路由表 4byte4byte4byte1byte1int1long1int 38 第五讲有状态与无状态通信协议程序设计 IP路由表数据类型 structrouting table structip maskRT mask structip addrRT IP address structip addrRT IP next charRT flag intRT datagram count longRT user conut intRT interface 掩码 4byte目的地址 4byte下一跳地址 4byte标记 1byte引用记数 1int使用记数 1long接口号码 1int 39 第五讲有状态与无状态通信协议程序设计 IP路由表变量数组 defineROUTING TABLE MAX NUMBER10structrouting tableRoutingTable ROUTING TABLE MAX NUMBER 40 第五讲有状态与无状态通信协议程序设计 IP软件的关键函数是哪几个 41 第五讲有状态与无状态通信协议程序设计 处理模块 参数是需要处理的IP报文 1 检查数据报文1 版本合法2 长度合法3 检验和正确4 以上之一是NO 出错返回2 若目的地址是127 x x x或是本地IP地址A 本机返回3 若是路由器A TTL减1 如TTL为0则出错返回4 转发返回 CheckIpData IP报文指针 返回值 1 合法 1 版本错误 2 长度错误 3 检验和不正确 IsThisMachine IP报文指针 返回值 1 转发2 本机接收 1 错误本机地址变量 ThisIPAddress 路由器标记变量IsRouter值 1是路由器 0是主机 42 第五讲有状态与无状态通信协议程序设计 路由寻找模块1 取得数据报文中目的地址D2 从头到尾循环检查路由表 当前i 1 求出D的网络地址N2 比较N和路由表的 i 目的地址3 如匹配转53 如查找完成 但尚未存在匹配则1 出错返回4 从路由表 i 中取得出口号码5 存在路由返回 Analyze structip addr NetP structip addr DestP 返回值 0 不匹配1 匹配 43 第五讲有状态与无状态通信协议程序设计 IP软件包的模块程序怎么写 44 第五讲有状态与无状态通信协议程序设计 IpDataProcess structip data IpDataP intCheckR CheckR CheckIpData IpDataP switch CheckR caseVER INVALID caseLENTH INVALID caseCHECK SUM FAILING if IsThisMachine IpDataP IP Dst returnTHIS MACHINE if IsRouter intttl IpDataP IP ttl if ttl 0 rerurnPROCESS IPDATA TTL CheckSum IpDataP returnFORWARD 处理模块 参数是需要处理的IP报文 1 检查数据报文1 版本合法2 长度合法3 检验和正确4 以上之一是NO 出错返回2 若目的地址是127 x x x或是本地IP地址A 本机返回3 若是路由器A TTL减1 如TTL为0则出错返回4 转发返回 45 第五讲有状态与无状态通信协议程序设计 IpDataProcess structip data IpDataP intCheckR CheckR CheckIpData IpDataP switch CheckR caseVER INVALID ret PROCESS IPDATA VER gotoleave caseLENTH INVALID ret PROCESS IPDATA LENTH gotoleave caseCHECK SUM FAILING ret PROCESS IPDATA CHECK SUM gotoleave if IsThisMachine IpDataP IP Dst returnTHIS MACHINE if IsRouter intttl IpDataP IP ttl if ttl 0 rer PROCESS IPDATA TTL gotoleave CheckSum IpDataP ret PROCESS IPDATA OK Leave returnret 46 IsForwardOrdiscard structip data IpDataP int IfNoP intRoutingTableIndex structip addrDest bcopy 路由寻找模块1 取得数据报文中目的地址D2 从头到尾循环检查路由表 当前i 1 求出网络地址N2 比较N和路由表的 i 目的地址3 如匹配转53 如查找完成 但尚未存在匹配则1 出错返回4 从路由表 i 中取得出口号码5 存在路由返回 47 第五讲有状态与无状态通信协议程序设计 IsForwardOrdiscard structip data IpDataP int IfNoP intRoutingTableIndex structip addrDest bcopy 48 第五讲有状态与无状态通信协议程序设计 IsThisMachine structip addr DestP if DestP 127 return1 returnAnalyze 49 第五讲有状态与无状态通信协议程序设计 Resolve structip mask MaskP structip addr DestP structip addr NetP inti char d char DestP char m char MaskP char n char NetPfor i 0 i siezof DestP i n d 50 第五讲有状态与无状态通信协议程序设计 IP软件包中队列操作如何写 51 第五讲有状态与无状态通信协议程序设计 队列首下标 队列尾下标 取IP数据报文 不释放空间 返回队列首下标的地址 放IP数据报文把数据报文拷贝到队列下标指示的地址空间中 队列下标 if 队列下标到最大值 队列下标 0 释放空间队列首下标 if 下标到最大值 队列下标 0 52 第五讲有状态与无状态通信协议程序设计 输入队列 defineINPUT QUEUE100structip dataIP InputQueue INPUT QUEUE intIP InputQueue head IP InputQueue tail 输出到低层队列 低层定义输出到高层队列 defineOUTPUT QUEUE TRAN10structip dataIP OutQueueToTran OUTPUT QUEUE TRAN intIP OutQueueToTran head IP OutQueueToTran tail 53 第五讲有状态与无状态通信协议程序设计 输入队列 defineINPUT QUEUE100structip dataIP InputQueue INPUT QUEUE intIP InputQueue head IP InputQueue tail 从输入队列释放一个IP数据报文空间操作ReleaseIP InputQueue IP InputQueue head if IP InputQueue head INPUT QUEUE IP InputQueue head 0 54 第五讲有状态与无状态通信协议程序设计 输入队列 defineINPUT QUEUE100structip dataIP InputQueue INPUT QUEUE intIP InputQueue head IP InputQueue tail 从输入队列取一个IP数据报文操作 不释放 不拷贝 structip data GetIPDataFromInputQueue return 55 第五讲有状态与无状态通信协议程序设计 输入队列 defineINPUT QUEUE100structip dataIP InputQueue INPUT QUEUE intIP InputQueue head IP InputQueue tail 放IP数据报文到输入队列操作 保证有空间 PutIPDataToIP InputQueue structip data IPDataP reigsterintindex IP InputQueue tail bcopy IPDataP IP InputQueue index sizeof IPData if index INPUT QUEUE index 0 IP InputQueue tail index 56 第五讲有状态与无状态通信协议程序设计 输出队列到高层 defineOUTPUT QUEUE TR

温馨提示

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

评论

0/150

提交评论