




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優(yōu)質文檔-傾情為你奉上實驗 停止等待協(xié)議分析與協(xié)議模擬實現(xiàn)一、實驗目的1)了解停止等待協(xié)議的原理2)掌握協(xié)議分析的方法和過程3)通過程序模擬停止等待協(xié)議的工作過程二、實驗要求1)根據(jù)示例,編寫停止等待協(xié)議的模擬程序,演示停止等待協(xié)議的工作過程。2)撰寫實驗報告。三、協(xié)議概述如果鏈路是理想的傳輸信道,1)所傳送的任何數(shù)據(jù)既不會出差錯也不會丟失;2)如果不管發(fā)送方以多快的速率發(fā)送數(shù)據(jù),接收方總是來得及收下,并及時上交主機。如果存在這樣的傳輸信道,數(shù)據(jù)鏈路層協(xié)議也是不需要的。信道不會出錯,而且接收方緩存的容量為無限大而永遠不會溢出;或接收速率與發(fā)送速率絕對精確相等。在上述兩個假定的情況下,數(shù)據(jù)鏈
2、路層當然就不需要任何協(xié)議就可以保證數(shù)據(jù)傳輸?shù)恼_。這就是說,傳輸數(shù)據(jù)的信道是不可靠的(即不能保證所傳的數(shù)據(jù)不產生差錯),并且還需要對數(shù)據(jù)的發(fā)送端進行流量控制。在大多數(shù)協(xié)議中,流量控制是一組過程,這組過程是用來告訴發(fā)送方在等待接收方的應答信號之前最多可以傳送多少數(shù)據(jù)。流量控制有兩個要點:(1)數(shù)據(jù)流不能使接收方過載。任何接收設備都有一個處理輸入數(shù)據(jù)的速率限制,并且存儲輸入數(shù)據(jù)的存儲器容量也是有限的。接收設備必須在達到這些限制之前通知發(fā)送設備并且請求發(fā)送設備發(fā)送較少的數(shù)據(jù)幀或是暫停一會兒。在使用輸入數(shù)據(jù)之前,需要對數(shù)據(jù)進行校驗和處理,因此,每個接收設備都有一塊存儲器,叫做緩沖區(qū),用于存放未來得及處
3、理的數(shù)據(jù)幀。如果緩沖區(qū)將滿,接收方也必須能夠通知發(fā)送方暫停傳輸,直到接收方又能接收數(shù)據(jù)。(2)應答。隨著數(shù)據(jù)幀的到來,接收方對他們進行應答,可以每收到一幀給一個應答,也可以一次對若干幀進行應答。如果一個幀到達時已經被破壞,接收方發(fā)送一個否定應答幀(NAK)。在數(shù)據(jù)鏈路層,差錯控制主要指錯誤檢測和重傳方法。在一個幀中出現(xiàn)任何一個錯誤,接收方就返回一個否定應答幀,出錯的幀就被發(fā)送方重新傳送。這個過程被稱作自動重復請求(ARQ)。數(shù)據(jù)被重傳的情況有三種:幀破壞、幀丟失和應答幀丟失。流量控制和差錯控制是結合在一起實現(xiàn)的,共有兩種實現(xiàn)流量控制和差錯控制的技術:停止等待協(xié)議和滑動窗口協(xié)議。【圖解】【總結】
4、使用的鏈路層傳輸控制協(xié)議發(fā)方:發(fā)送一個數(shù)據(jù)幀后,必須等待收方的確認幀才可以發(fā)送下一個數(shù)據(jù)幀;為防止發(fā)送的數(shù)據(jù)或該數(shù)據(jù)的確認幀丟失,發(fā)方內部設置一個定時器,當超過定時時間發(fā)方仍未收到確認幀時,發(fā)方重發(fā)該幀;為防止確認幀丟失而造成收方收到重復幀的情況,發(fā)方給每一個數(shù)據(jù)幀帶上一個序列號。(1個比特位)收方:在收方接收錯誤時,收方發(fā)一否認幀,要求發(fā)方重發(fā)該幀;收方收到相同的兩幀時,丟掉該數(shù)據(jù)幀并重發(fā)確認幀。【流程示意圖】發(fā)送數(shù)據(jù)包1接收正確認ACK發(fā)送數(shù)據(jù)包2重發(fā)數(shù)據(jù)包2發(fā)送數(shù)據(jù)包3接收負確認NAK接收正確認ACK接收正確認ACK接收數(shù)據(jù)包1正確發(fā)送正確認ACK接收數(shù)據(jù)包2錯誤發(fā)送負確認NAK接收數(shù)據(jù)
5、包2正確發(fā)送正確認ACK接收數(shù)據(jù)包3正確發(fā)送正確認ACK發(fā)送方接收方發(fā)送數(shù)據(jù)包0接收正確認ACK1發(fā)送數(shù)據(jù)包1超時重傳數(shù)據(jù)包1超時重傳數(shù)據(jù)包1接收正確認ACK0接收數(shù)據(jù)包0正確發(fā)送正確認ACK1接收數(shù)據(jù)包1正確發(fā)送正確認ACK0接收數(shù)據(jù)包1正確(拋棄)發(fā)送正確認ACK0發(fā)送方接收方發(fā)送數(shù)據(jù)包0超時超時圖a 停止等待協(xié)議的基本工作過程 圖b 數(shù)據(jù)包的丟失和確認信息的丟失示意圖四、協(xié)議分析可以用多種方法來表示一個有限狀態(tài)機,對協(xié)議進行描述。以下是在某種假定條件下的協(xié)議分析。1)狀態(tài)遷移圖設甲、乙雙方進行半雙工通信,甲發(fā)信息幀,乙回送確認幀。雙方約定采用停止等待協(xié)議,因此甲方僅需用 1 比特來編號。
6、下面將 0 號幀和 1 號幀分別記為 0 和 1 。當收到有差錯的幀時,則丟棄此幀,同時不發(fā)任何應答幀。當收到無差錯的幀但序號不正確時,要發(fā)確認幀,同時要丟棄此幀,不送主機。我們還假定收方在準備發(fā)送確認幀 ACK 時,暫不接收外面發(fā)來的幀。這樣,我們就得出甲乙雙方各自的有限狀態(tài)機,如下圖所示。圖中橢圓形符號為狀態(tài)符號,其右方數(shù)字為狀態(tài)標號,橢圓形內的字表示狀態(tài)的意義。帶箭頭的直線或弧線表示狀態(tài)的變遷,而直線或弧線旁邊的字代表自動機的輸入事件。例如,甲方自動機中的 “發(fā) 0 ” 就是一個輸入事件。圖中在某些方面進行了一些簡化。例如,當乙方處于 “期望收 0 ” 的狀態(tài)時,若收到無差錯的 1 幀,
7、仍然應當先進入 “準備發(fā) ACK ” 狀態(tài),然后才發(fā)出 ACK 。但這里就將 “收 1 ” 與 “發(fā) ACK ” 合并成為一個事件。其余部分不再詳述。2)狀態(tài)遷移表方法除狀態(tài)轉移圖之外,還可用狀態(tài)遷移表(又稱為判決表)來表示自動機的工作。例如對甲方的自動機,可得出如下表所示的狀態(tài)變遷表。表中的項目代表 “新的狀態(tài)輸出” 。例如在狀態(tài)為 x1 時,若輸入為 “發(fā) 0 ” ,則狀態(tài)從 x1 轉為 x2,同時輸出為 “ 0 幀 ” 。當輸出為 “” 時表示無輸出。3)混合描述方法比較實用的辦法是合并一些狀態(tài),即考慮一些次要的細節(jié)。例如,甲方的狀態(tài) 1 和狀態(tài) 2,狀態(tài) 3和狀態(tài) 4 都可以合并,乙的
8、狀態(tài) 1 和狀態(tài) 4,狀態(tài) 2 和狀態(tài) 3 也可進行合并。這樣可以用 3 個字符 XYZ 表示整個系統(tǒng)的狀態(tài),其中 X0 或 1,對應于甲方準備發(fā) 0 或 1(包括發(fā)完后等待 ACK 的狀態(tài));Y0 或 1,對應于乙方期望收到 0 或 1;Z0、l、A或,對應于信道上傳送的是 0、1、ACK 或出現(xiàn)了差錯(包括丟失)。這樣,就可得出 圖3-24 的有限狀態(tài)機。在弧線(或直線)旁邊注明的數(shù)字為狀態(tài)變遷的標號,其意義也注明在 圖3-24 的右方。假設系統(tǒng)一開始處在(000)狀態(tài)。這表示甲發(fā)完 0,乙期望收到 0,而信道上傳送的也是 0。在無差錯的情況下,系統(tǒng)的狀態(tài)僅在 4 個狀態(tài)中循環(huán):(000)
9、(01A)(111)(10A)(000) 。從理論上講,應當共有 2 × 2 × 4 = 16 種不同的狀態(tài)。去掉沒有意義的組合后,還剩下 10 種狀態(tài),而導致狀態(tài)變遷的輸人事件共有 9 種( 標號 0 8 )。這種有限狀態(tài)機可幫助我們檢查協(xié)議是否正確。例如,檢查一下乙方會不會連續(xù)將兩個 0 號幀送交主機。這相當于檢查一下會不會出現(xiàn)這種情況,即在兩次出現(xiàn)狀態(tài)變遷 1 之間不出現(xiàn)狀態(tài)變遷 3 。仔細檢查 圖3-24 就可發(fā)現(xiàn)這種情況是不會發(fā)生的。同樣方法也可用來排除連續(xù)將兩個 1 號幀送交主機的可能。再檢查一下會不會發(fā)生甲方連續(xù)改變狀態(tài) 2 次( 如從 0 到 1,再回到 0
10、 )而乙方的狀態(tài)未改變。這種情況相當于出現(xiàn)了未被發(fā)現(xiàn)的報文丟失??梢钥闯?,這種情況也是不存在的。協(xié)議必須不出現(xiàn)死鎖。死鎖的出現(xiàn)是因為存在著這樣的一種狀態(tài)子集,其特點是:從這一子集內變遷到子集外是不可能的,而在這一子集內狀態(tài)的變遷總是局限于子集內的幾個狀態(tài)。可以看出,圖3-24 所示的自動機沒有死鎖現(xiàn)象。有限狀態(tài)機模型的缺點就是當描述比較復雜的協(xié)議時,狀態(tài)的數(shù)目將急劇增加,以致很難用它來清晰地描述協(xié)議。五、協(xié)議驗證協(xié)議的 “驗證” 一詞包括了“validation”與“verification”,包括了協(xié)議語法和語義的驗證。一般說來,協(xié)議的驗證包括以下幾個方面的內容: (l)可達性(reacha
11、bility) 驗證協(xié)議的各種可能狀態(tài)之間的可達關系。如果從狀態(tài) A 到狀態(tài) B 的變遷不可能發(fā)生(直接或間接),則從狀態(tài) A 到狀態(tài) B 是不可達的。如果協(xié)議從初始狀態(tài)到某個狀態(tài)不可達,則表明協(xié)議有錯誤。 (2)死鎖 最典型的死鎖是協(xié)議中各實體都處于這樣的一種等待狀態(tài),即只有在“某一事件”發(fā)生后才能做進一步的動作,但在該狀態(tài)下,這個“某一事件”卻不可能發(fā)生。死鎖發(fā)生時,協(xié)議所處的狀態(tài)稱為死鎖狀態(tài)。 死鎖的另一種形式是協(xié)議處于無限的死循環(huán)中,而沒有別的事件可使協(xié)議從這一循環(huán)中解脫出來。例如,協(xié)議無限制地執(zhí)行超時重發(fā)操作,但總是收不到對方的確認信息。這種形式的死鎖稱為活鎖(livelock),表
12、示整個協(xié)議的狀態(tài)還是在變化的,不過不能脫離這種死循環(huán)狀態(tài)而已。(3)有界性檢驗協(xié)議的某些成分或參數(shù)(例如通道容量、窗口大小)是否有界。(4)完整性檢驗協(xié)議是否缺少應有的處理,以及有無非期待的接收(即錯收)。(5)可恢復性或自同步性這是當出現(xiàn)差錯后,協(xié)議能否在有限的步驟內返回到正常狀態(tài)(包括初始態(tài))下執(zhí)行。(6)狀態(tài)二義性一個進程在某一時刻只允許具有一個穩(wěn)定狀態(tài)。所謂穩(wěn)定狀態(tài)是指當通信雙方的通道為空時的進程狀態(tài)。若在某一時刻進程可以有不只一個的穩(wěn)定狀態(tài),則稱該進程的狀態(tài)為二義狀態(tài)。(7)動作序列將協(xié)議的動作按執(zhí)行順序組合起來,即構成協(xié)議的動作序列。協(xié)議的動作序列集合又稱為協(xié)議的語言。檢查協(xié)議的動
13、作序列,可以驗證協(xié)議有無錯誤動作或無用動作。(8)通道溢出檢查當通道中的數(shù)據(jù)已達到通道的最大容量后,是否有某個進程仍然試圖向通道中放入數(shù)據(jù)。六、參考代碼如下為Java參考代碼1)Sender.javaimport java.io.*;import .*;public class Sender extends Threadprivate String address = "" private int port = 9878; public Sender() Socket client = null ; for(int i=0;i<10; i+) cli
14、ent = new Socket() ; Msg data = new Msg(i%2); InetSocketAddress isa = new InetSocketAddress(this.address,this.port); try client.connect(isa,10000); ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream(); out.writeObject(data); System.out.println("發(fā)送分組 "+data.getN_msg(); B
15、ufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(); String str = br.readLine(); if(str.equals("resend1") System.out.println("分組丟失,重發(fā)"); i-; out.flush(); out.close(); out = null ; data = null ; client.close();client = null ; continue; else if(str.e
16、quals("resend2") System.out.println("ACK丟失,重發(fā)"); i-; out.flush(); out.close(); out = null ; data = null ; client.close();client = null ; continue; else System.out.println("n"+"接收ACK"+data.getN_msg()+" 發(fā)送分組"+(data.getN_msg()+1)%2); out.flush(); out.cl
17、ose(); out = null ; data = null ; client.close();client = null ; catch(java.io.IOException e) System.out.println("Socket error!" ); System.out.println("IOException :" + e.toString(); try this.sleep(8000); catch (InterruptedException e) e.printStackTrace(); public static void main
18、(String args) new Sender();2)Recver.javaimport java.io.*;import .*;public class Recver extends Thread private boolean OutServer = false; private static ServerSocket server ; private static int ServerPort = 9878; public static void main(String args) (new Recver().start();public Recver() try server =
19、new ServerSocket(ServerPort); catch(java.io.IOException e) System.out.println("Socket啟動有問題 !" ); System.out.println("IOException :" + e.toString(); public void run() Socket socket; ObjectInputStream in ; System.out.println("伺服器已啟動 !" ); while(!OutServer) socket = null;
20、try synchronized(server) socket = server.accept(); socket.setSoTimeout(15000); in = new ObjectInputStream(socket.getInputStream(); Msg data = (Msg)in.readObject(); System.out.println("發(fā)送端正在發(fā)送的內容"+data.getN_msg()+" 狀態(tài):"+data.getInfo(); if(data.getInfo().equals("losePackage&qu
21、ot;) System.out.println("分組丟失"); DataOutputStream dos = new DataOutputStream(socket.getOutputStream(); dos.writeBytes("resend1"+'n'); dos.close(); else if(data.getInfo().equals("loseAck") System.out.println("ACK丟失"); DataOutputStream dos = new DataOutp
22、utStream(socket.getOutputStream(); dos.writeBytes("resend2"+'n'); dos.close(); else System.out.println("接收分組 "+data.getN_msg()+" 發(fā)送ACK "+data.getN_msg(); DataOutputStream dos = new DataOutputStream(socket.getOutputStream(); dos.writeBytes("ok"+'n
23、39;); dos.close(); System.out.println(); in.close(); in = null ; socket.close(); catch(java.io.IOException e) System.out.println("Socket error !" ); System.out.println("IOException :" + e.toString(); catch(java.lang.ClassNotFoundException e) System.out.println("ClassNotFound
24、Exception :" + e.toString(); 3)Msg.javaimport java.io.Serializable;import java.util.*;public class Msg implements Serializableprivate int n_msg;private String info;private Random random; private int rdNum;public Msg(int n_msg) this.n_msg = n_msg;MsgState();public void MsgState()/用于模擬分組丟失,ACK丟失等
25、情況random = new Random();rdNum = Math.abs(random.nextInt()%100;if (rdNum<20) info = "losePackage"else if(rdNum>80) info ="loseAck"else info ="noError" public int getN_msg() return n_msg;public void setN_msg(int n_msg) this.n_msg = n_msg;public String getInfo() retu
26、rn info;public void setInfo(String info) = info;下午13:0017:00B實行不定時工作制的員工,在保證完成甲方工作任務情況下,經公司同意,可自行安排工作和休息時間。312打卡制度公司實行上、下班指紋錄入打卡制度。全體員工都必須自覺遵守工作時間,實行不定時工作制的員工不必打卡。打卡次數(shù):一日兩次,即早上上班打卡一次,下午下班打卡一次。打卡時間:打卡時間為上班到崗時間和下班離崗時間; 因公外出不能打卡:因公外出不能打卡應填寫外勤登記表,注明外出日期、事由、外勤起止時間。因公
27、外出需事先申請,如因特殊情況不能事先申請,應在事畢到崗當日完成申請、審批手續(xù),否則按曠工處理。因停電、卡鐘(工卡)故障未打卡的員工,上班前、下班后要及時到部門考勤員處填寫未打卡補簽申請表,由直接主管簽字證明當日的出勤狀況,報部門經理、人力資源部批準后,月底由部門考勤員據(jù)此上報考勤。上述情況考勤由各部門或分公司和項目文員協(xié)助人力資源部進行管理。手工考勤制度手工考勤制申請:由于工作性質,員工無法正常打卡(如外圍人員、出差),可由各部門提出人員名單,經主管副總批準后,報人力資源部審批備案。參與手工考勤的員工,需由其主管部門的部門考勤員(文員)或部門指定人員進
28、行考勤管理,并于每月26日前向人力資源部遞交考勤報表。參與手工考勤的員工如有請假情況發(fā)生,應遵守相關請、休假制度,如實填報相關表單。 外派員工在外派工作期間的考勤,需在外派公司打卡記錄;如遇中途出差,持出差證明,出差期間的考勤在出差地所在公司打卡記錄;3.2加班管理3.2.1定義加班是指員工在節(jié)假日或公司規(guī)定的休息日仍照常工作的情況。A現(xiàn)場管理人員和勞務人員的加班應嚴格控制,各部門應按月工時標準,合理安排工作班次。部門經理要嚴格審批員工排班表,保證員工有效工時達到要求。凡是達到月工時標準的,應扣減員工本人的存休或工資;對超出月工時標準的,應說明理由,報主管副總和人力
29、資源部審批。 B因員工月薪工資中的補貼已包括延時工作補貼,所以延時工作在4小時(不含)以下的,不再另計加班工資。因工作需要,一般員工延時工作4小時至8小時可申報加班半天,超過8小時可申報加班1天。對主管(含)以上管理人員,一般情況下延時工作不計加班,因特殊情況經總經理以上領導批準的延時工作,可按以上標準計加班。員工加班應提前申請,事先填寫加班申請表,因無法確定加班工時的,應在本次加班完成后3個工作日內補填加班申請表。加班申請表經部門經理同意,主管副總經理審核報總經理批準后有效。加班申請表必須事前當月內上報有效,如遇特殊情況,也必須在一周內上報至總經理批準。如未履行上述程序,視為乙
30、方自愿加班。員工加班,也應按規(guī)定打卡,沒有打卡記錄的加班,公司不予承認;有打卡記錄但無公司總經理批準的加班,公司不予承認加班。原則上,參加公司組織的各種培訓、集體活動不計加班。加班工資的補償:員工在排班休息日的加班,可以以倒休形式安排補休。原則上,員工加班以倒休形式補休的,公司將根據(jù)工作需要統(tǒng)一安排在春節(jié)前后補休。加班可按1:1的比例沖抵病、事假。3.2.3加班的申請、審批、確認流程加班申請表在各部門文員處領取,加班統(tǒng)計周期為上月26日至本月25日。員工加班也要按規(guī)定打卡,沒有打卡記錄的加班,公司不予承認。各部門的考勤員(文員)負責加班申請表的保管及加班申報。員工加班應提前申請,事先填寫加班申請表加班前
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2021-2026年中國中頻熔煉電爐市場深度分析及投資戰(zhàn)略咨詢報告
- 2025年 昌吉州招聘中學教師筆試試題附答案
- 2025年中國云終端行業(yè)市場調查研究及投資前景預測報告
- 2025年電影放映項目深度研究分析報告
- 高性能絕緣材料項目可行性研究報告方案可用于立項及銀行貸款+201
- 1000噸年鋁基復合材料建設投資項目可行性實施報告
- 紗布底植絨布項目投資可行性研究分析報告(2024-2030版)
- 社區(qū)危舊房改造項目可行性研究報告
- 2025年中國分動器行業(yè)發(fā)展運行現(xiàn)狀及投資潛力預測報告
- 中國防縮無結針織紗行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告(2024-2030)
- 2025至2030中國農膜行業(yè)發(fā)展分析及發(fā)展前景與投資報告
- 2025圖解《政務數(shù)據(jù)共享條例》V1.0學習解讀
- 2025電商平臺店鋪轉讓合同模板
- 高端私人定制服務方案
- 2025年保密知識競賽考試題庫300題(含答案)
- 腫瘤日間化療規(guī)范化管理
- 湖北省武漢市部分重點中學2022-2023學年高一下學期期末聯(lián)考數(shù)學 含解析
- 廣東省東莞市2025屆九年級下學期中考二模歷史試卷(含答案)
- DB44-T 2579-2024 嶺南傳統(tǒng)天灸技術操作規(guī)范
- 房地產市場報告 -2025年第一季度西安寫字樓和零售物業(yè)市場報告
- 中國成人呼吸系統(tǒng)疾病家庭氧療指南(2024年)解讀課件
評論
0/150
提交評論