




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
./學(xué)號(hào):課程設(shè)計(jì)題目幀封裝學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院專業(yè)軟件工程專業(yè)班級(jí)軟件0902班姓名指導(dǎo)教師2012年6月20日課程設(shè)計(jì)任務(wù)書(shū)學(xué)生:專業(yè)班級(jí):軟件0902班指導(dǎo)教師:工作單位:計(jì)算機(jī)學(xué)院題目一:幀封裝初始條件:〔1學(xué)習(xí)相關(guān)知識(shí)〔2C/C++/VC/VB/JAVA語(yǔ)言〔3PC機(jī)一臺(tái)要求完成的主要任務(wù):〔包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書(shū)撰寫(xiě)等具體要求編寫(xiě)程序,根據(jù)給出的原始數(shù)據(jù),組裝一個(gè)IEEE802.3格式的幀〔題目默認(rèn)的輸入文件為二進(jìn)制原始數(shù)據(jù)〔文件名為input1和input2。1要求程序?yàn)槊钚谐绦颉1热?可執(zhí)行文件名為framer.exe,則命令行形式如下:framerinputfileoutputfile其中,inputfile為原始數(shù)據(jù)文件,outputfile為輸出結(jié)果。使用操作系統(tǒng)、語(yǔ)言、編程環(huán)境不限,但在報(bào)告中必須注明。2輸出:對(duì)應(yīng)input1和input2的結(jié)果分別為output1和output2。時(shí)間安排:第一、二天:查閱資料,學(xué)習(xí)算法第三、四天:編程調(diào)試第五天:書(shū)寫(xiě)報(bào)告指導(dǎo)教師簽名:年月日系主任〔或責(zé)任教師簽名:年月日目錄1.引言42.以太網(wǎng)幀格式的發(fā)展43.IEEE802.3幀結(jié)構(gòu)54.錯(cuò)檢測(cè)65.實(shí)現(xiàn)步驟75.1前導(dǎo)符75.2目的地址及源地址75.3長(zhǎng)度及數(shù)據(jù)字段85.4幀檢驗(yàn)序列86.源代碼107.運(yùn)行結(jié)果示例178.心得體會(huì)189.參考文獻(xiàn)19幀封裝引言以太網(wǎng)這個(gè)術(shù)語(yǔ)通常是指由DEC、Intel和Xerox公司在1982年聯(lián)合公布的一個(gè)標(biāo)準(zhǔn),它是當(dāng)今TCP/IP采用的主要的局域網(wǎng)技術(shù),它采用一種稱作CSMA/CD的媒體接入方法。在TCP/IP世界中,以太網(wǎng)IP數(shù)據(jù)報(bào)文的封裝在RFC894中定義。以太網(wǎng)采用廣播機(jī)制,所有與網(wǎng)絡(luò)連接的工作站都可以看到網(wǎng)絡(luò)上傳遞的數(shù)據(jù)。通過(guò)查看包含在幀中的目標(biāo)地址,確定是否進(jìn)行接收或放棄。如果證明數(shù)據(jù)確實(shí)是發(fā)給自己的,工作站將會(huì)接收數(shù)據(jù)并傳遞給高層協(xié)議進(jìn)行處理。以太網(wǎng)采用CSMA/CD〔CarrierSenseMultipleAccess/CollisionDetection媒體訪問(wèn)機(jī)制,任何工作站都可以在任何時(shí)間訪問(wèn)網(wǎng)絡(luò)。在以太網(wǎng)中,所有的節(jié)點(diǎn)共享傳輸介質(zhì)。如何保證傳輸介質(zhì)有序、高效地為許多節(jié)點(diǎn)提供傳輸服務(wù),就是以太網(wǎng)的介質(zhì)訪問(wèn)控制協(xié)議要解決的問(wèn)題。幀是在數(shù)據(jù)鏈路層數(shù)據(jù)進(jìn)行傳輸與交換的基本單位。構(gòu)造幀對(duì)于理解網(wǎng)絡(luò)協(xié)議的概念、協(xié)議執(zhí)行過(guò)程以及網(wǎng)絡(luò)問(wèn)題處理的一般方法具有重要的意義。本次課程設(shè)計(jì)的目的是應(yīng)用數(shù)據(jù)鏈路層與介質(zhì)訪問(wèn)控制層的知識(shí),根據(jù)數(shù)據(jù)鏈路層的基本原理,通過(guò)構(gòu)造一個(gè)具體的Ethernet幀,從而深入理解網(wǎng)絡(luò)協(xié)議的基本概念與網(wǎng)絡(luò)問(wèn)題處理的一般方法。以太網(wǎng)幀格式的發(fā)展1980,DEC、Intel、Xerox制訂了EthernetI的標(biāo)準(zhǔn);1982,DEC、Intel、Xerox又制訂了EhternetII的標(biāo)準(zhǔn);1982,IEEE開(kāi)始研究Ethernet的國(guó)際標(biāo)準(zhǔn)802.3;1983,迫不及待的Novell基于IEEE的802.3的原始版開(kāi)發(fā)了專用的Ethernet幀格式;1985,IEEE推出IEEE802.3規(guī),后來(lái)為解決EthernetII與802.3幀格式的兼容問(wèn)題,推出折衷的EthernetSNAP格式。IEEE802.3幀結(jié)構(gòu)數(shù)據(jù)在網(wǎng)絡(luò)上是以很小的稱為幀〔Frame的單位傳輸?shù)?幀由幾部分組成,不同的部分執(zhí)行不同的功能。幀通過(guò)特定的稱為網(wǎng)絡(luò)驅(qū)動(dòng)程序的軟件進(jìn)行成型,然后通過(guò)網(wǎng)卡發(fā)送到網(wǎng)線上,通過(guò)網(wǎng)線到達(dá)它們的目的機(jī)器,在目的機(jī)器的一端執(zhí)行相反的過(guò)程。接收端機(jī)器的以太網(wǎng)卡捕獲到這些幀,并告訴操作系統(tǒng)幀已到達(dá),然后對(duì)其進(jìn)行存儲(chǔ)。"幀"數(shù)據(jù)大致由兩部分組成:幀頭和幀數(shù)據(jù)。幀頭包括接收方主機(jī)物理地址的定位以及其它網(wǎng)絡(luò)信息。幀數(shù)據(jù)區(qū)含有一個(gè)數(shù)據(jù)體。為確保計(jì)算機(jī)能夠解釋數(shù)據(jù)幀中的數(shù)據(jù),這兩臺(tái)計(jì)算機(jī)使用一種公用的通訊協(xié)議?;ヂ?lián)網(wǎng)使用的通訊協(xié)議簡(jiǎn)稱IP,即互聯(lián)網(wǎng)協(xié)議。IP數(shù)據(jù)體由兩部分組成:數(shù)據(jù)體頭部和數(shù)據(jù)體的數(shù)據(jù)區(qū)。數(shù)據(jù)體頭部包括IP源地址和IP目標(biāo)地址,以及其它信息。數(shù)據(jù)體的數(shù)據(jù)區(qū)包括用戶數(shù)據(jù)協(xié)議〔UDP,傳輸控制協(xié)議〔TCP,還有數(shù)據(jù)包的其他信息。這些數(shù)據(jù)包都含有附加的進(jìn)程信息以及實(shí)際數(shù)據(jù)。866246–15004前導(dǎo)符目的地址源地址長(zhǎng)度數(shù)據(jù)FCS圖3.1IEEE802.3幀結(jié)構(gòu)常用的以太網(wǎng)MAC幀格式用兩種標(biāo)準(zhǔn),一種是DIXEthernetV2標(biāo)準(zhǔn)〔即以太網(wǎng)V2標(biāo)準(zhǔn),另一種是IEEE的802.3標(biāo)準(zhǔn)。這里只介紹符合IEEE802.3標(biāo)準(zhǔn)的幀,其格式如圖3.1所示。它的組成比較簡(jiǎn)單,由6個(gè)字段組成。接下來(lái)對(duì)這6個(gè)部分詳細(xì)介紹一下?!?前導(dǎo)符:由7字節(jié)的前同步碼和1字節(jié)的幀起始定界符構(gòu)成。前同步碼:這個(gè)字段有7個(gè)字節(jié)〔56位交替出現(xiàn)的1和0,它的作用就是提醒接收系統(tǒng)有幀的到來(lái),以及使到來(lái)的幀與計(jì)時(shí)器進(jìn)行同步。前同步碼其實(shí)是在物理層添加上去的,并不是〔正式的幀的一部分。前同步碼的目標(biāo)是允許物理層在接收到實(shí)際的幀起始符之前檢測(cè)載波,并且與接收到的幀時(shí)序達(dá)到穩(wěn)定同步。幀起始定界符:這個(gè)字段用1字節(jié)〔10101011作為幀開(kāi)始的信號(hào),表示一幀的開(kāi)始。最后兩位是11,表示下面的字段是目的地址?!?目的地址〔DA48位,表示幀準(zhǔn)備發(fā)往目的站的地址,共6個(gè)字節(jié),可以是單址〔代表單個(gè)站、多址〔代表一組站或全地址〔代表局域網(wǎng)上的所有站。當(dāng)目的地址出現(xiàn)多址時(shí),表示該幀被一組站同時(shí)接收,稱為"組播"〔Multicast。目的地址出現(xiàn)全地址時(shí),表示該幀被局域網(wǎng)上所有站同時(shí)接收,稱為"廣播"〔Broadcast,通常以DA的最高位來(lái)判斷地址的類型,若第一字節(jié)最低位為"0"則表示單址,第一字節(jié)最低位為"1"則表示組播。〔3源地址〔SA48位,表明該幀的數(shù)據(jù)是哪個(gè)網(wǎng)卡發(fā)的,即發(fā)送端的網(wǎng)卡地址?!?該字段是"長(zhǎng)度/類型"。當(dāng)這個(gè)字段的值大于0X0600時(shí)〔相當(dāng)于十進(jìn)制的1536,就表示"類型"。這樣的幀和以太網(wǎng)V2MAC幀完全一樣。只有當(dāng)這個(gè)字段的值小于0X0600時(shí)才表示"長(zhǎng)度",即MAC幀的數(shù)據(jù)部分長(zhǎng)度?!?數(shù)據(jù)字段的最小長(zhǎng)度必須為46字節(jié)以保證幀長(zhǎng)至少為64字節(jié),這意味著傳輸一字節(jié)信息也必須使用46字節(jié)的數(shù)據(jù)字段:如果填入該字段的信息少于46字節(jié),該字段的其余部分也必須進(jìn)行填充。數(shù)據(jù)字段的默認(rèn)最大長(zhǎng)度為1500字節(jié)。〔6幀檢驗(yàn)序列〔FCS是32位冗余檢驗(yàn)碼〔CRC,檢驗(yàn)除前導(dǎo)、SFD和FCS以外的容。當(dāng)發(fā)送站發(fā)出幀時(shí),一邊發(fā)送,一邊逐位進(jìn)行CRC檢驗(yàn)。最后形成一個(gè)32位CRC檢驗(yàn)和填在幀尾FCS位置中一起在媒體上傳輸。接收站接收后,從DA開(kāi)始同樣邊接收邊逐位進(jìn)行CRC檢驗(yàn)。最后接收站形成的檢驗(yàn)和若與幀的檢驗(yàn)和相同,則表示媒體上傳輸幀未被破壞。反之,接收站認(rèn)為幀被破壞,則會(huì)通過(guò)一定的機(jī)制要求發(fā)送站重發(fā)該幀。錯(cuò)檢測(cè)在校驗(yàn)字段中,使用的是CRC校驗(yàn)。校驗(yàn)的圍包括目的地址字段、源地址字段、長(zhǎng)度字段、LLC數(shù)據(jù)字段。循環(huán)冗余編碼<CRC>是一種重要的線性分組碼、編碼和解碼方法,具有簡(jiǎn)單、檢錯(cuò)和糾錯(cuò)能力強(qiáng)等特點(diǎn),在通信領(lǐng)域廣泛地用于實(shí)現(xiàn)差錯(cuò)控制。CRC校驗(yàn)碼的檢錯(cuò)能力很強(qiáng),不僅能檢查出離散錯(cuò)誤,還能檢查出突發(fā)錯(cuò)誤。利用CRC進(jìn)行檢錯(cuò)的過(guò)程可簡(jiǎn)單描述如下:在發(fā)送端根據(jù)要傳送的k位二進(jìn)制碼序列,以一定的規(guī)則產(chǎn)生一個(gè)校驗(yàn)用的r位監(jiān)督碼<CRC碼>,附在原始信息的后邊,構(gòu)成一個(gè)新的二進(jìn)制碼序列<共k+r位>,然后發(fā)送出去。在接收端,根據(jù)信息碼和CRC碼之間所遵循的規(guī)則進(jìn)行檢驗(yàn),以確定傳送中是否出錯(cuò)。這個(gè)規(guī)則在差錯(cuò)控制理論中稱為"生成多項(xiàng)式"。循環(huán)冗余校驗(yàn)碼的特點(diǎn):〔1CRC校驗(yàn)碼可檢測(cè)出所有單個(gè)錯(cuò)誤?!?CRC校驗(yàn)碼可檢測(cè)出所有奇數(shù)位錯(cuò)誤?!?CRC校驗(yàn)碼可檢測(cè)出所有雙位的錯(cuò)誤?!?CRC校驗(yàn)碼可檢測(cè)出所有小于、等于校驗(yàn)位長(zhǎng)度的突發(fā)錯(cuò)誤。〔5CRC校驗(yàn)碼可以的概率檢測(cè)出長(zhǎng)度為<K+1>位的突發(fā)錯(cuò)誤。實(shí)現(xiàn)步驟前導(dǎo)符前導(dǎo)符包括7字節(jié)的前發(fā)送碼和1字節(jié)的幀起始定界符。由于這些都是固定寫(xiě)法,因此添加起來(lái)非常簡(jiǎn)單。對(duì)應(yīng)方法如下。publicstaticbooleanappendPrefix<>{ //前導(dǎo)符中前7個(gè)字節(jié)是交替出現(xiàn)的1和0 for<inti=0;i<7;++i>{ tmp.add<0XAA>; } //前導(dǎo)符的第8個(gè)字節(jié)是約定好的0XAB tmp.add<0XAB>; returntrue; }目的地址及源地址我們知道,目的機(jī)器的硬件地址是通過(guò)ARP協(xié)議得到的,這需要發(fā)送ARP請(qǐng)求包才能得到,為了簡(jiǎn)化程序的設(shè)計(jì),突出本次設(shè)計(jì)的要點(diǎn),因此將目的地址固定寫(xiě)成"FF:FF:FF:FF:FF:FF"。類似地,獲得本機(jī)地址也需要通過(guò)一系列的函數(shù)調(diào)用,在程序中就直接寫(xiě)成已知的硬件地址"74:E5:0B:7D:CE:3A"。對(duì)應(yīng)方法如下。publicstaticbooleanappendAddress<>{ //由于未顯式要求目的地址,因此程序中將目的地址固定為FF:FF:FF:FF:FF:FF for<inti=0;i<6;++i>{ tmp.add<0XFF>; } //本機(jī)地址為74:E5:0B:7D:CE:3A tmp.add<0X74>; tmp.add<0XE5>; tmp.add<0X0B>; tmp.add<0X7D>; tmp.add<0XCE>; tmp.add<0X3A>; returntrue; }長(zhǎng)度及數(shù)據(jù)字段對(duì)于發(fā)送端來(lái)說(shuō),必須先獲得數(shù)據(jù)的長(zhǎng)度,將長(zhǎng)度字段添加到幀中之后才能再添加數(shù)據(jù)字段,這就限定了必須訪問(wèn)輸入文件兩次,第一次用于獲得文件長(zhǎng)度,第二次用于封裝幀。當(dāng)然在進(jìn)行CRC計(jì)算的時(shí)候有一些地方可以優(yōu)化。本程序的文件是通過(guò)FileInputStream進(jìn)行讀入,通過(guò)FileOutputStream進(jìn)行輸出。幀檢驗(yàn)序列計(jì)算FCS是本程序最困難的部分。算法描述如下:〔1輸入需要檢驗(yàn)的序列M,以及發(fā)送方與接收方約定好的除數(shù)P,并初始化余數(shù)R為0,若P有n位,則R有n–1位;〔2對(duì)序列M中的每一位〔記為b進(jìn)行步驟〔3。結(jié)束后R即為FCS?!?將R左移1位,并將b添加到R的最低位,判斷R的最高位,如果是0,則繼續(xù)〔3,如果是1,則將R和P進(jìn)行按位與操作,結(jié)果保存到R中。圖5.4.1CRC流程圖相應(yīng)的流程圖如圖5.4.1所示,其實(shí)現(xiàn)如下,其中curByte為一個(gè)字節(jié),currentR為從開(kāi)始到現(xiàn)在已經(jīng)循環(huán)計(jì)算所得的余數(shù)。publicstaticintnextR<intcurrentR,intcurByte>{ intmask=0X80; intcurBit=0; for<inti=0;i<8;++i,mask>>=1>{ //計(jì)算當(dāng)前位,0或者1 curBit=<curByte&mask>==0?0X0:0X1; //首先將余數(shù)左移1位,并把當(dāng)前位添加到余數(shù)的最低位 currentR<<=1; currentR+=curBit; //判斷余數(shù)最高位是否為0 //若為1,則將除數(shù)和余數(shù)進(jìn)行異或操作,將結(jié)果保存為余數(shù) if<<currentR&MASK_HIGH>!=0>{ currentR=currentR^P; } } returncurrentR; }源代碼importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.LinkedList;importjava.util.List;publicclassframer{ publicstaticvoidmain<String[]args>throwsIOException{ if<args.length<2>{ System.out.println<"參數(shù)錯(cuò)誤!">; return; } FileInputStreamfin=null; FileOutputStreamfout=null; try{ fin=newFileInputStream<newFile<args[0]>>; fout=newFileOutputStream<args[1]>; }catch<IOExceptione>{ System.out.println<"文件錯(cuò)誤!">; return; } //添加前導(dǎo)符 appendPrefix<>; //添加目的地址和源地址 appendAddress<>; //添加數(shù)據(jù),包括數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)容以及幀檢驗(yàn)序列 appendData<fin,fout>; fin.close<>; fout.close<>; } /** *添加8個(gè)字節(jié)的前導(dǎo)符 * *return添加成功時(shí)返回true,否則false */ publicstaticbooleanappendPrefix<>{ //前導(dǎo)符中前7個(gè)字節(jié)是交替出現(xiàn)的1和0 for<inti=0;i<7;++i>{ tmp.add<0XAA>; } //前導(dǎo)符的第8個(gè)字節(jié)是約定好的0XAB tmp.add<0XAB>; returntrue; } /** *添加6個(gè)字節(jié)的目的地址,和添加6個(gè)字節(jié)的源地址 * *return添加成功時(shí)返回true,否則false */ publicstaticbooleanappendAddress<>{ //由于未顯式要求目的地址,因此程序中將目的地址固定為FF:FF:FF:FF:FF:FF for<inti=0;i<6;++i>{ tmp.add<0XFF>; } //本機(jī)地址為74:E5:0B:7D:CE:3A tmp.add<0X74>; tmp.add<0XE5>; tmp.add<0X0B>; tmp.add<0X7D>; tmp.add<0XCE>; tmp.add<0X3A>; returntrue; } /** *添加2個(gè)字節(jié)的數(shù)據(jù)長(zhǎng)度,接著添加數(shù)據(jù)字段,最后添加幀檢驗(yàn)序列FCS * *paramin *輸入文件 *paramout *輸出流 *return添加成功時(shí)返回true,否則false */ publicstaticbooleanappendData<InputStreamin,OutputStreamout>{ int[]data=newint[MAX_SIZE]; //文件長(zhǎng)度 intsize=0; //當(dāng)前字節(jié) intcurByte=0; try{ while<size<MAX_SIZE&&<curByte=in.read<>>!=-1>{ data[size++]=curByte; } }catch<IOExceptione1>{ e1.printStackTrace<>; returnfalse; } //首先添加2個(gè)字節(jié)的數(shù)據(jù)長(zhǎng)度 tmp.add<size>>8>; tmp.add<size>; //然后添加數(shù)據(jù)字段 for<inti=0;data[i]!=-1&&i<size;++i>{ tmp.add<data[i]>; } //若數(shù)據(jù)長(zhǎng)度不足,則補(bǔ)充填充字節(jié) if<size<MIN_SIZE>{ for<inti=0;i<MIN_SIZE-size;++i>{ tmp.add<FILL_BYTE>; } } //計(jì)算FCS //初始化余數(shù)為0 intR=0; try{ for<intb:tmp>{ //每次讀入一個(gè)字節(jié),將它添加到幀中,并且循環(huán)計(jì)算FCS out.write<b>; R=nextR<R,b>; } }catch<IOExceptione>{ e.printStackTrace<>; returnfalse; } try{ //最后添加4個(gè)字節(jié)的幀檢驗(yàn)序列 out.write<R>>24>; out.write<R>>16>; out.write<R>>8>; out.write<R>; }catch<IOExceptione>{ e.printStackTrace<>; returnfalse; } returntrue; } publicstaticintnextR<intcurrentR,intcurByte>{ intmask=0X80; intcurBit=0; for<inti=0;i<8;++i,mask>>=1>{ //計(jì)算當(dāng)前位,0或者1 curBit=<curByte&mask>==0?0X0:0X1; //首先將余數(shù)左移1位,并把當(dāng)前位添加到余數(shù)的最低位 currentR<<=1; currentR+=curBit; //判斷余數(shù)最高位是否為0 //若為1,則將除數(shù)和余數(shù)進(jìn)行異或操作,將結(jié)果保存為余數(shù) if<<currentR&MASK_HIGH>!=0>{ currentR=currentR^P; } } returncurrentR; } //數(shù)據(jù)字段的最大長(zhǎng)度 publicstaticfinalintMAX_SIZE=1500; //數(shù)據(jù)字段的最小長(zhǎng)度 publicstaticfinalintMIN_SIZE=46; //填充字節(jié) publicstaticfinalintFILL_BYTE=0X00; //發(fā)送方與接收方約定好的除數(shù)P publicstaticfinalintP=0XACEF1357; //用于判斷余數(shù)最高位是否為1的掩碼 publicstaticfinalintMASK_HIGH=0X8000; privatestaticList<Integer>tmp=newLinkedList<Integer><>;}運(yùn)行結(jié)果示例為了演示需要,首先新建一個(gè)文本文件,容為"ChenJiaHui"〔不含引號(hào),如圖7.1所示。用文本文件的一個(gè)好處是可以方便的檢測(cè)輸出文件〔即幀的格式是否正確。圖7.1輸入文件接下來(lái)將源程序進(jìn)行編譯和運(yùn)行。命令"javac"表示將源代碼編譯成類文件。命令"java"表示執(zhí)行一個(gè)類文件,其后跟著的"input1input2"分別表示輸入文件和輸出文件,其中輸入文件是所要包裝的數(shù)據(jù),即上文提到的文本文件,輸出文件表示將幀封裝好之后保存到哪個(gè)文件中,文件不存在時(shí)自動(dòng)創(chuàng)建,存在時(shí)會(huì)覆蓋。如圖7.2所示。圖7.2編譯運(yùn)行由于實(shí)驗(yàn)只需要將數(shù)據(jù)封裝成幀,并不要求檢驗(yàn),但如果不檢驗(yàn)的話,又不知道是否封裝正確,因此我另外寫(xiě)了一段程序,用以檢驗(yàn)幀是否封裝正確。在圖7.3中可以看到,這個(gè)類的名字為"check",它接收一個(gè)參數(shù),用以指明所要檢驗(yàn)的幀,這里是"input2",即由framer程序產(chǎn)生的幀文件。由于input2是一個(gè)二進(jìn)制文件,因此無(wú)法通過(guò)一般的編輯器將其打開(kāi)以查看其中的容。圖7.3檢測(cè)輸出文件第一行有64位,前56位是前同步碼,后8位是幀起始定界符。第二行是目的地址。因?yàn)闆](méi)有顯示指定目的地址,所以程序中將目的地址設(shè)為"FF:FF:FF:FF:FF:FF"。第三行是源地址。源地址為本機(jī)的MAC地址。第四行是長(zhǎng)度,表示原輸入文件的大小。由于輸入文件input1只含有"ChenJiahui"10個(gè)字符,因此該文件的大小的確是10.接下來(lái)十行是源文件中的10個(gè)字節(jié),為了避免輸出過(guò)于冗余,所以只輸出前10個(gè)字節(jié),可以看到,每個(gè)字節(jié)均對(duì)應(yīng)正確的字符,比如"1000011"表示字符"C"。最后四行是4個(gè)字節(jié)的FCS。以上輸出中,有些字節(jié)不足8位,是因?yàn)榫雎粤饲皩?dǎo)0。心得體會(huì)幀是數(shù)據(jù)鏈路層最重要的概念。數(shù)據(jù)鏈路層屬于計(jì)算機(jī)網(wǎng)絡(luò)的低層。我們知道,兩個(gè)主機(jī)之間的數(shù)據(jù)傳輸,總是在一
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年 工業(yè)鍋爐G1證理論考試練習(xí)題附答案
- 節(jié)能報(bào)告范文17匯編
- 稅務(wù)師網(wǎng)盤(pán)課件下載指南
- 中國(guó)文化娛樂(lè)服務(wù)行業(yè)全景評(píng)估及投資規(guī)劃建議報(bào)告
- 2025年中國(guó)消防火災(zāi)報(bào)警系統(tǒng)行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 中國(guó)體育場(chǎng)地與設(shè)施建設(shè)行業(yè)全景評(píng)估及投資規(guī)劃建議報(bào)告
- 2025年變配電保護(hù)自動(dòng)化項(xiàng)目投資分析及可行性報(bào)告
- 巴曲酶項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- 中國(guó)裝潢設(shè)計(jì)行業(yè)投資研究分析及發(fā)展前景預(yù)測(cè)報(bào)告
- 移動(dòng)應(yīng)用開(kāi)發(fā)合同
- 電梯維保培訓(xùn)
- 內(nèi)審不符合項(xiàng)案例
- 在高中語(yǔ)文教學(xué)中如何融入中華民族共同體意識(shí)
- 柔性溫度-壓力傳感器的設(shè)計(jì)與制備
- 2025年版中醫(yī)(壯醫(yī))專業(yè)醫(yī)師資格考試大綱
- 2025年安徽蕪湖宜居投資集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 2025年中國(guó)南方航空招聘筆試參考題庫(kù)含答案解析
- 2024版北美留學(xué)咨詢與申請(qǐng)一體化服務(wù)合同3篇
- 2025版國(guó)家開(kāi)放大學(xué)法學(xué)本科《知識(shí)產(chǎn)權(quán)法》期末紙質(zhì)考試總題庫(kù)
- 建設(shè)項(xiàng)目全過(guò)程工程咨詢-第二次形成性考核-國(guó)開(kāi)(SC)-參考資料
- 頭面部燒傷的護(hù)理
評(píng)論
0/150
提交評(píng)論