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

上传人:j****9 文档编号:54591974 上传时间:2018-09-15 格式:PPT 页数:62 大小:843.50KB
返回 下载 相关 举报
通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计_第1页
第1页 / 共62页
通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计_第2页
第2页 / 共62页
通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计_第3页
第3页 / 共62页
通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计_第4页
第4页 / 共62页
通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计》由会员分享,可在线阅读,更多相关《通信软件设计方法-第五讲-状态机程序设计与无状态协议程序设计(62页珍藏版)》请在金锄头文库上搜索。

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

2、,协议与状态机,标准规范协议 私有的协议,协议就是通信规程,通信双方或多方的信息传输约定 信息传输:1、控制信息(数据);2、运载信息(数据)通信系统的核心就是协议,6,协议与状态机,协议分为无状态协议与有状态协议,无状态协议:信息处理和历史记录无关例如 IP,有状态协议:信息处理和历史记录有关例如 TCP有状态协议用状态机来表示或者状态图来表示,7,协议与状态机,有限状态机的元素,状态 协议的一个逻辑概念,规定特定状态下可以接受特定 事件和执行相应动作事件 PDU、时钟计数溢出、系统管理指令动作 功能程序,8,协议与状态机,状态机简单例子,2个状态 4个事件 若干动作,状态S1 Discon

3、nected 断开,状态S2 Connected 连接,事件E4 关闭 (Shutdown) - 送关闭信息PDU给对方 关闭时钟,事件E1 本地初始化 (Initialization) - 送启动信息PDU给对方 开启时钟,事件E2 收到对方来的数据PDU (Protocol Message) - 处理接收的PDU,事件E3 时钟到 (Timer Expiry) - 定时处理,9,协议与状态机,如何编写这个状态机程序?,10,状态机程序设计 示例6,Switch-case结构方法,switch (event) case E1: /* Initialize */If (current_stat

4、e = DISCONNECTED) InitializeProtocol ();current_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 = CONNECTE

5、D) ShutdownProtocol ();current_state = DISCONNECTED;break;default:logError (“Invalid Event“, current_state, event);break; ,int event; int current_stat;,Event变量的数值从哪里获得?,增加case语句,再用switch-case结构,11,状态机程序设计,switch-case结构 + 主循环, while (1) get_event( ,获得事件,判断事件,根据状态情况处理事件,12,状态机程序设计,数据结构方法,状态事件表 矩阵M*N,N

6、表示状态数量,M表示事件数量 交叉点中-Action, Next State,M事件,N状态,13,状态机程序设计 示例7,数据结构方法-程序,/* 当前状态和事件的入口是SetEventCurrentState */ while (1) get_event( ,/* 入口矩阵是SetMN */struct enter *Action();int next_state; SetMN;,/* 函数参数 */struct parameter PDU *pdup;Environment *ep; parameter;,14,状态机程序设计,数据结构方法-表,15,协议与状态机,TCP的状态机是什么?

7、,16,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,收到

8、ACK,收到 FIN 发送 ACK,收到 FIN, ACK发送 ACK,收到 FIN 发送 ACK,同时关闭,收到 FIN 发送 ACK,发送 SYN,定时经过两倍报文段寿命后,关闭,17,设置互斥,事件队列 为空?,恢复互斥,取出事件,事件分析和处理,睡眠等待,如事件队列空, 则从发送队列中 取队列头块 根据头块的标记 做TCP/IP包 并向IP层传递,事件分析和处理,WU2PIOC,WU2PD,WP2UWA,WI2PD,WP2IWA,WU2PCL,WTMO,执行高层的ioctl请求,处理高层传来的数据,修改连接接收窗口,接受IP数据包,修改向IP发送数据窗口,接收高层关闭连接请求,超时处理

9、,TCP进程主流程,比如打开连接,流控,18,本章重点问题,如何编写IP程序,19,第五讲 有状态与无状态通信协议程序设计,IP的功能是什么?,20,通信网络系统,21,通信网络系统,数据包交换,以太网络,点到点网络,22,网络接口,缓冲区 数据队列,转发表 (路由表),IP接收和转发,接收 缓冲区,接收 缓冲区,接收 缓冲区,接收 缓冲区,接收 缓冲区,每个网络 接口设计 一个队列,核外 进程 部分,接口中断处理子程序,接收 缓冲区,其他 任务,IP数据报文队列,第五讲 有状态与无状态通信协议程序设计,23,第五讲 有状态与无状态通信协议程序设计,IP的软件包有那些模块?,24,数据包 处理

10、 模块,添加首部 模块,重装模块,路由寻找模块,分片模块,IP分组,IP分组,IP分组,TCP/IP分组,TCP/IP分组,目的地址,IP分组 下一跳 接口,IP分组,下一跳,IP分组,重装表,路由表,MTU表,IP软件包,ARP以及数据链路层,TCP层,接口号,目的地址,分片标记等,25,第五讲 有状态与无状态通信协议程序设计,IP主程序,while (1) 判断输入队列有IP报文吗? 如没有,则睡眠 从输入队列中取一个IP报文 调用数据包报文处理模块 根据处理结果 出错,抛弃改报文,结束本次循环 本机报文,调用重装模块 转发报文,调用路由寻找模块 如存在路由,则调用下层模块,26,数据包

11、处理 模块,添加首部 模块,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以及数据链路层,27,路由寻找模块,IP分组,TCP/IP分组,IP分组 下一跳 接口,IP分组,下一跳,路由表,IP软件包,ARP以及数据链路层,TCP层,目的地址,28,IP路由表,Q,S,10.0.0.5,20.0.0.5,30.0.0.6,40.

12、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,直接,第五讲 有状态与无状态通信协议程序设计,29,IP路由交换,路由选择的次序为:直接交付特定主机路由选择特定网络路由选择默认路由选择,第五讲 有状态与无状态通信协议程序设计,30,IP路由交换,从数据报中提取目的IP地址D; A)对路由表中的每一个项目I ,并计算网络前缀NA)若N与I的网络的地址匹配(

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

14、找完成,但尚未存在匹配则1)出错返回 4、从路由表i中取得出口号码 5、存在路由返回,32,第五讲 有状态与无状态通信协议程序设计,IP软件的关键数据结构 是哪几个?,33,IP数据包格式,第五讲 有状态与无状态通信协议程序设计,34,typedef unsigned 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位 ;,第五讲 有状态与无

15、状态通信协议程序设计,示例程序8,35,struct ip_hdr unsigned short int IP_v:4; / 版本号码unsigned short int IP_hl:4; / 首部长度u_int8_t IP_tos; / 服务类型u_short IP_len; / 数据报文总长度u_short IP_id; / 标识u_short IP_off; / 分段偏移u_int8_t IP_ttl; / 存活时间u_int8_t IP_p; / 协议号码u_short IP_sum; / 检验和struct ip_addr IP_src, IP_dst; / 源IP地址和目的IP地址 ;,第五讲 有状态与无状态通信协议程序设计,36,固定长度的IP数据报文#define IP_DATA 1024struct ip_data struct ip_hdr IP_hdr;char IP_dataIP_DATA; ;,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号