




已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
通信軟件設計方法 0 講授內容 1 LINUX概況2 LINUX下C語言程序編譯和調試2 1 LINUX開發(fā)環(huán)境學習 實驗 3 通信系統和通信軟件4 基于TCP IP的主機到主機通信軟件示例4 1 SOCKET程序設計 實驗 5 有狀態(tài)與無狀態(tài)通信協議程序設計6 LINUX內核程序設計7 低層232接口通信程序設計8 設計一個簡單鏈路層以及程序8 1 IP軟件和鏈路層軟件設計 實驗 1 本講重點問題 如何編寫狀態(tài)機程序 2 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 協議與狀態(tài)機狀態(tài)機程序設計IP轉發(fā)程序設計 3 協議與狀態(tài)機 什么是協議 4 協議與狀態(tài)機 標準規(guī)范協議私有的協議 協議就是通信規(guī)程 通信雙方或多方的信息傳輸約定信息傳輸 1 控制信息 數據 2 運載信息 數據 通信系統的核心就是協議 5 協議與狀態(tài)機 協議分為無狀態(tài)協議與有狀態(tài)協議 無狀態(tài)協議 信息處理和歷史記錄無關例如IP 有狀態(tài)協議 信息處理和歷史記錄有關例如TCP有狀態(tài)協議用狀態(tài)機來表示或者狀態(tài)圖來表示 6 協議與狀態(tài)機 有限狀態(tài)機的元素 狀態(tài)協議的一個邏輯概念 規(guī)定特定狀態(tài)下可以接受特定事件和執(zhí)行相應動作事件PDU 時鐘計數溢出 系統管理指令動作功能程序 7 協議與狀態(tài)機 狀態(tài)機簡單例子 2個狀態(tài)4個事件若干動作 狀態(tài)S1Disconnected斷開 狀態(tài)S2Connected連接 事件E4 關閉 Shutdown 送關閉信息PDU給對方關閉時鐘 事件E1 本地初始化 Initialization 送啟動信息PDU給對方開啟時鐘 事件E2 收到對方來的數據PDU ProtocolMessage 處理接收的PDU 事件E3 時鐘到 TimerExpiry 定時處理 8 協議與狀態(tài)機 如何編寫這個狀態(tài)機程序 9 狀態(tài)機程序設計 示例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 狀態(tài)機程序設計 switch case結構 主循環(huán) while 1 get event 獲得事件 判斷事件 根據狀態(tài)情況處理事件 11 狀態(tài)機程序設計 數據結構方法 狀態(tài)事件表矩陣M N N表示狀態(tài)數量 M表示事件數量交叉點中 Action NextState M事件 N狀態(tài) 12 狀態(tài)機程序設計 示例7 數據結構方法 程序 當前狀態(tài)和事件的入口是Set Event CurrentState while 1 get event 入口矩陣是Set M N structenter Action intnext state Set M N 函數參數 structparameter PDU pdup Environment ep parameter 13 狀態(tài)機程序設計 數據結構方法 表 14 協議與狀態(tài)機 TCP的狀態(tài)機是什么 15 TCP的有限狀態(tài)機 CLOSED ESTABLISHED LISTEN CLOSE WAIT FIN WAIT 1 SYN RCVD FIN WAIT 2 CLOSING TIME WAIT SYN SENT LAST ACK 主動打開 被動打開 被動關閉 主動關閉 起點 被動打開 主動打開發(fā)送SYN 同時打開 收到SYN 發(fā)送SYN ACK 收到ACK 數據傳送階段 關閉發(fā)送FIN 關閉發(fā)送FIN 關閉發(fā)送FIN 收到RST 收到SYN發(fā)送SYN ACK 關閉或超時 收到ACK 收到SYN ACK發(fā)送ACK 收到ACK 收到ACK 收到FIN發(fā)送ACK 收到FIN ACK發(fā)送ACK 收到FIN發(fā)送ACK 同時關閉 收到FIN發(fā)送ACK 發(fā)送SYN 定時經過兩倍報文段壽命后 關閉 16 設置互斥 事件隊列為空 恢復互斥 取出事件 事件分析和處理 睡眠等待 如事件隊列空 則從發(fā)送隊列中取隊列頭塊根據頭塊的標記做TCP IP包并向IP層傳遞 事件分析和處理 WU2PIOC WU2PD WP2UWA WI2PD WP2IWA WU2PCL WTMO 執(zhí)行高層的ioctl請求 處理高層傳來的數據 修改連接接收窗口 接受IP數據包 修改向IP發(fā)送數據窗口 接收高層關閉連接請求 超時處理 TCP進程主流程 比如打開連接 流控 17 本章重點問題 如何編寫IP程序 18 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP的功能是什么 19 通信網絡系統 20 通信網絡系統 數據包交換 以太網絡 點到點網絡 21 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 網絡接口 緩沖區(qū)數據隊列 轉發(fā)表 路由表 IP接收和轉發(fā) 接收緩沖區(qū) 接收緩沖區(qū) 接收緩沖區(qū) 接收緩沖區(qū) 接收緩沖區(qū) 每個網絡接口設計一個隊列 核外進程部分 接口中斷處理子程序 接收緩沖區(qū) 其他任務 IP數據報文隊列 22 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP的軟件包有那些模塊 23 數據包處理模塊 添加首部模塊 重裝模塊 路由尋找模塊 分片模塊 IP分組 IP分組 IP分組 TCP IP分組 TCP IP分組 目的地址 IP分組下一跳接口 IP分組 下一跳 IP分組 重裝表 路由表 MTU表 IP軟件包 ARP以及數據鏈路層 TCP層 接口號 目的地址 分片標記等 24 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP主程序 while 1 判斷輸入隊列有IP報文嗎 如沒有 則睡眠從輸入隊列中取一個IP報文調用數據包報文處理模塊根據處理結果出錯 拋棄改報文 結束本次循環(huán)本機報文 調用重裝模塊轉發(fā)報文 調用路由尋找模塊如存在路由 則調用下層模塊 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 轉發(fā)返回 TCP層 ARP以及數據鏈路層 26 路由尋找模塊 IP分組 TCP IP分組 IP分組下一跳接口 IP分組 下一跳 路由表 IP軟件包 ARP以及數據鏈路層 TCP層 目的地址 27 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 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 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP路由交換 路由選擇的次序為 直接交付特定主機路由選擇特定網絡路由選擇默認路由選擇 29 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP路由交換 從數據報中提取目的IP地址D A 對路由表中的每一個項目I 并計算網絡前綴NA 若N與I的網絡的地址匹配 和目的地址比較 1 如是網關 G出現 使用路由表中的下一跳項目作為下一跳地址 間接交付 2 如不是網關 G不出現 使用分組的目的地址作為下一跳地址 直接交付 3 把分組連同下一跳地址傳送到分片模塊4 停止B 找不到匹配 則發(fā)送給報文源ICMP差錯報文C 停止 30 路由尋找模塊 IP分組 TCP IP分組 IP分組下一跳接口 IP分組 下一跳 路由表 IP軟件包 ARP以及數據鏈路層 TCP層 目的地址 路由尋找模塊1 取得數據報文中目的地址D2 從頭到尾循環(huán)檢查路由表 當前i 1 求出D的網絡地址N2 比較N和路由表的 i 目的地址3 如匹配轉43 如查找完成 但尚未存在匹配則1 出錯返回4 從路由表 i 中取得出口號碼5 存在路由返回 31 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP軟件的關鍵數據結構是哪幾個 32 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP數據包格式 33 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 typedefunsignedcharu int8 t 8位typedefunsignedshortu short 16位structip addr unsignedlongIP addr IP地址 占32位 structip mask unsignedlongIP mask IP掩碼 占32位 示例程序8 34 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 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 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 固定長度的IP數據報文 defineIP DATA1024structip data structip hdrIP hdr charIP data IP DATA 36 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 輸入隊列 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 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP路由表 4byte4byte4byte1byte1int1long1int 38 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 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 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP路由表變量數組 defineROUTING TABLE MAX NUMBER10structrouting tableRoutingTable ROUTING TABLE MAX NUMBER 40 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP軟件的關鍵函數是哪幾個 41 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 處理模塊 參數是需要處理的IP報文 1 檢查數據報文1 版本合法2 長度合法3 檢驗和正確4 以上之一是NO 出錯返回2 若目的地址是127 x x x或是本地IP地址A 本機返回3 若是路由器A TTL減1 如TTL為0則出錯返回4 轉發(fā)返回 CheckIpData IP報文指針 返回值 1 合法 1 版本錯誤 2 長度錯誤 3 檢驗和不正確 IsThisMachine IP報文指針 返回值 1 轉發(fā)2 本機接收 1 錯誤本機地址變量 ThisIPAddress 路由器標記變量IsRouter值 1是路由器 0是主機 42 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 路由尋找模塊1 取得數據報文中目的地址D2 從頭到尾循環(huán)檢查路由表 當前i 1 求出D的網絡地址N2 比較N和路由表的 i 目的地址3 如匹配轉53 如查找完成 但尚未存在匹配則1 出錯返回4 從路由表 i 中取得出口號碼5 存在路由返回 Analyze structip addr NetP structip addr DestP 返回值 0 不匹配1 匹配 43 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP軟件包的模塊程序怎么寫 44 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 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 轉發(fā)返回 45 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 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 從頭到尾循環(huán)檢查路由表 當前i 1 求出網絡地址N2 比較N和路由表的 i 目的地址3 如匹配轉53 如查找完成 但尚未存在匹配則1 出錯返回4 從路由表 i 中取得出口號碼5 存在路由返回 47 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IsForwardOrdiscard structip data IpDataP int IfNoP intRoutingTableIndex structip addrDest bcopy 48 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IsThisMachine structip addr DestP if DestP 127 return1 returnAnalyze 49 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 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 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 IP軟件包中隊列操作如何寫 51 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 隊列首下標 隊列尾下標 取IP數據報文 不釋放空間 返回隊列首下標的地址 放IP數據報文把數據報文拷貝到隊列下標指示的地址空間中 隊列下標 if 隊列下標到最大值 隊列下標 0 釋放空間隊列首下標 if 下標到最大值 隊列下標 0 52 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 輸入隊列 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 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 輸入隊列 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 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 輸入隊列 defineINPUT QUEUE100structip dataIP InputQueue INPUT QUEUE intIP InputQueue head IP InputQueue tail 從輸入隊列取一個IP數據報文操作 不釋放 不拷貝 structip data GetIPDataFromInputQueue return 55 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 輸入隊列 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 第五講有狀態(tài)與無狀態(tài)通信協議程序設計 輸出隊列到高層 defineOUTPUT QUEUE TR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 傳統工筆畫在插畫設計中的應用研究-以《畫說長江》科普畫冊為例
- 生物醫(yī)學技術實習總結范文
- 家庭中式菜肴制作計劃與教學大綱
- 湘少版四年級英語課堂教學計劃
- 肺部保養(yǎng)及治療
- 感恩父母550字13篇
- 家長委員會對學校政策的影響與職責
- 2025年孕婦羊水栓塞應急救助流程
- 智能化拆除工程的質量管理體系與措施
- 2025年小型線束項目市場調查研究報告
- 2024Web網站滲透測試報告模板
- 精神科出院康復指導與隨訪
- 濟南傳統民居課件
- 醫(yī)院感染預防與控制的基本概念和原則
- 2024年數字廣西集團有限公司招聘筆試參考題庫含答案解析
- 食堂鋼絲球管理制度
- 住宅室內裝飾裝修工程施工合同
- 巖土工程中英文對照外文翻譯文獻
- 河南省職業(yè)技能等級認定試卷-證書-網絡與信息安全管理員三級實操樣卷評分記錄表
- 2023年1月浙江省高考英語真題聽力試題(附聽力音頻+答案+文本)
- ansys課程設計論文2
評論
0/150
提交評論