版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
、計算機(jī)網(wǎng)絡(luò)課程設(shè)計實驗報告:實驗內(nèi)容和要求1、實驗一數(shù)據(jù)包的捕獲與分析Wireshark是一種開源的網(wǎng)絡(luò)數(shù)據(jù)包的捕獲和分析軟件,本實驗通過Wireshark軟件的安裝使用,監(jiān)控局域網(wǎng)的狀態(tài),捕獲在局域網(wǎng)中傳輸?shù)臄?shù)據(jù)包,并結(jié)合在計算機(jī)網(wǎng)絡(luò)課程中學(xué)習(xí)到的理論知識,對常用網(wǎng)絡(luò)協(xié)議的數(shù)據(jù)包做出分析,加深網(wǎng)絡(luò)課程知識的理解和掌握。具體內(nèi)容及要求如下:Wireshark軟件的安裝;Wireshark軟件的啟動,并設(shè)置網(wǎng)卡的狀態(tài)為混雜狀態(tài),使得Wireshark可以監(jiān)控局域網(wǎng)的狀態(tài);啟動數(shù)據(jù)包的捕獲,跟蹤PC之間的報文,并存入文件以備重新查;設(shè)置過濾器過濾網(wǎng)絡(luò)報文以檢測特定數(shù)據(jù)流;(對常用協(xié)議的數(shù)據(jù)包的報文格式進(jìn)行分析,利用協(xié)議分析軟件的統(tǒng)計工具顯示網(wǎng)絡(luò)報文的各種統(tǒng)計信息。2、實驗二網(wǎng)絡(luò)層實驗—Ping程序的設(shè)計與實現(xiàn)實驗?zāi)康谋緦嶒災(zāi)康氖鞘箤W(xué)生掌握網(wǎng)絡(luò)層協(xié)議的原理及實現(xiàn)方法。實驗設(shè)計內(nèi)容!本實驗為ICMP實驗。實驗內(nèi)容:Ping命令實現(xiàn)的擴(kuò)充,在給定的Ping程序的基礎(chǔ)上做如下功能擴(kuò)充:-h 顯示幫助信息-b 允許ping一個廣播地址,只用于IPv4-t設(shè)置ttl值,只用于IPv4-q 安靜模式。不顯示每個收到的包的分析結(jié)果,只在結(jié)束時,顯示匯總結(jié)果Ping命令的基本描述Ping的操作是向某些IP地址發(fā)送一個ICMPEcho消息,接著該節(jié)點返回一個ICMPEchoreplay消息。ICMP消息使用IP頭作為基本控制。";二、實驗環(huán)境實驗一數(shù)據(jù)包的捕獲與分析1.聯(lián)網(wǎng)計算機(jī)或linux系統(tǒng)`3.在PC中安裝協(xié)議分析軟件(如:Wireshark)4.物理基礎(chǔ):標(biāo)準(zhǔn)的以太網(wǎng)采用的是持續(xù)CSMA的方式,正是由于以太網(wǎng)采用這種廣播信道爭用的方式,使得各個站點可以獲得其他站點發(fā)送的數(shù)據(jù)。運(yùn)用這一原理使信息捕獲系統(tǒng)能夠攔截的我們所要的信5.工作模式:1)廣播模式(BroadCastModel):它的物理地址(MAC)地址是0Xffffff的幀為廣播幀,工作在廣播模式的網(wǎng)卡接收廣播幀。2)多播傳送(MultiCastModel):多播傳送地址作為目的物理地址的幀可以被組內(nèi)的其它主機(jī)同時接收,而組外主機(jī)卻接收不到。但是,如果將網(wǎng)卡設(shè)置為多播傳送模式,它可以接收所有的多播傳送幀,而不論它是不是組內(nèi)成員。3)直接模式(DirectModel):工作在直接模式下的網(wǎng)卡只接收目地址是自己MAC地址的幀。4)混雜模式(PromiscuousModel):工作在混雜模式下的網(wǎng)卡接收所有的流過網(wǎng)卡的幀,信包捕獲程序就是在這種模式下運(yùn)行的。/實驗二網(wǎng)絡(luò)層實驗—Ping程序的設(shè)計與實現(xiàn)聯(lián)網(wǎng)計算機(jī)Linux系統(tǒng)系統(tǒng)自帶編譯環(huán)境…程序的需求分析與邏輯框圖需求分析<1、實驗一數(shù)據(jù)包的捕獲與分析1>.在PC中安裝協(xié)議分析軟件。2>.啟動Wireshark協(xié)議分析軟件,選擇抓包菜單項啟動實時監(jiān)視器,開始實時跟蹤顯示網(wǎng)絡(luò)數(shù)據(jù)報文。可根據(jù)系統(tǒng)提示修改顯示方式。3>.調(diào)出跟蹤存儲的歷史報文,選擇有代表性的ETHERNET,,IP,ICMP,TCP,UDP報文,對照有關(guān)協(xié)議逐個分析報文各字段的含義及內(nèi)容。4>.設(shè)置過濾器屬性,如目的地址,源地址,協(xié)議類型等。如過濾不需要的網(wǎng)絡(luò)報文,過濾器允許設(shè)置第二層,第三層或第四層的協(xié)議字段?!?、實驗二網(wǎng)絡(luò)層實驗—Ping程序的設(shè)計與實現(xiàn)PING程序是我們使用的比較多的用于測試網(wǎng)絡(luò)連通性的程序。PING程序給予ICMP使用ICMP的回送請求和回送應(yīng)答來工作。ICMP是基于IP的一個協(xié)議,ICMP包通過IP的封裝之后傳遞。實現(xiàn)檢測網(wǎng)絡(luò)通暢及速度的ping,并擴(kuò)展以下功能:-h顯示幫助信息(-b允許ping一個廣播地址,只用于IPv4-t設(shè)置ttl值,只用于IPv4-q安靜模式,不顯示每個收到的包的分析結(jié)果,只在結(jié)束時,顯示匯總結(jié)果,!三、程序的需求分析與邏輯框圖邏輯框圖總體設(shè)計程序分為兩大部分:一部分讀取收到的所有消息,并輸出ICMPEchoreplay消息,另一部分每個一秒鐘發(fā)送一個Echo消息。另一部分由SIGALARM信號每秒驅(qū)動一次。詳細(xì)設(shè)計1)main函數(shù)&三、 程序的需求分析與邏輯框圖邏輯框圖2)readloop函數(shù)>3)proc函數(shù) 4)send函數(shù) )三、 程序的需求分析與邏輯框圖邏輯框圖ChecksumChecksum開始定義初始化cksum(size>1)確定cksum及size大小是》if(size)計算校驗cksum,獲得結(jié)果cksum+=*(UCHAR*)buffer;否結(jié)束?四、程序核心功能的實現(xiàn)機(jī)制1、實驗一利用協(xié)議分析軟件跟蹤局域網(wǎng)報文,實驗內(nèi)容如下:將安裝協(xié)議分析軟件的PC接入以太網(wǎng)中,跟蹤PC之間的報文,并存入文件以備重新查。設(shè)置過濾器過濾網(wǎng)絡(luò)報文以檢測特定數(shù)據(jù)流。利用協(xié)議分析軟件的統(tǒng)計工具顯示網(wǎng)絡(luò)報文的各種統(tǒng)計信息。2、實驗二!Ping命令的基本描述Ping的操作是向某些IP地址發(fā)送一個ICMPEcho消息,接著該節(jié)點返回一個ICMPEchoreplay消息。ICMP消息使用IP頭作為基本控制。IP頭的格式如下012301234567890123456789012345678901+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Version|IHL|TypeofService|TotalLength|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+:|Identification|Flags|FragmentOffset|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|TimetoLive|Protocol|HeaderChecksum|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|SourceAddress|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|DestinationAddress|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+{Version=4IHLInternet頭長TypeofService=0TotalLengthIP包的總長度Identification,Flags,FragmentOffset用于IP包分段TimetoLiveIP包的存活時長ProtocolICMP=1{Addresses發(fā)送Echo消息的源地址是發(fā)送Echoreply消息的目的地址,相反,發(fā)送Echo消息的目的地址是發(fā)送Echoreply消息的源地址。程序核心功能的實現(xiàn)機(jī)制2、實驗二】Ping實際上是使用ICMP中的ECHO報文來實現(xiàn)的。Echo或EchoReply消息格式如下:012301234567890123456789012345678901+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Type|Code|Checksum|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Identifier|SequenceNumber|}+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Data...+-+-+-+-+-Typeecho消息的類型為8echoreply的消息類型為0。Code=0Checksum;為從TYPE開始到IP包結(jié)束的校驗和Identifier如果code=0,identifier用來匹配echo和echoreply消息SequenceNumber如果code=0,identifier用來匹配echo和echoreply消息功能描述:收到echo消息必須回應(yīng)echoreply消息。identifier和sequencenumber可能被發(fā)送echo的主機(jī)用來匹配返回的/echoreply消息。例如:identifier可能用于類似于TCP或UDP的port用來標(biāo)示一個會話,而sequencenumber會在每次發(fā)送echo請求后遞增。收到echo的主機(jī)或路由器返回同一個值與之匹配》四、 程序核心功能的實現(xiàn)機(jī)制【2、實驗二 1、 數(shù)據(jù)結(jié)構(gòu)的描述1)IP包格式structip{ BYTEVer_ihl;.);^voiderr_sys(constchar*fmt,...);structproto{void (*fproc)(char*,ssize_t,structtimeval*);void (*fsend)(void);structsockaddr*sasend; /*sockaddr{}forsend,fromgetaddrinfo*/structsockaddr*sarecv; /*sockaddr{}forreceiving*/socklen_t salen; /*lengthofsockaddr{}s*/int icmpproto; /*IPPROTO_xxxvalueforICMP*/…}*pr;#endif/*PING_H_*/)#include""structproto proto_v4={proc_v4,send_v4,NULL,NULL,0,IPPROTO_ICMP};#ifdef IPV6structproto proto_v6={proc_v6,send_v6,NULL,NULL,0,IPPROTO_ICMPV6};#endifint datalen=56; /*datathatgoeswithICMPechorequest*/doublertt_min=INFINITY,rtt_max=-INFINITY,rtt_total=0,rtt_sqr_total=0;longlongsend_count=0,recv_count=0;·intttl_flag=0,broadcast_flag=0;intttl=0;structtimevaltval_start;constchar*usage="usage:ping[-v][-h][-b][-tttl][-q]<hostname>\n""\t-v\tNormalmode\n""\t-b\tBroadcast\n""\t-tttl\tSetTTL(0-255)\n"—"\t-q\tQuietmode";intmain(intargc,char**argv){ int c; structaddrinfo *ai; opterr=0; /*don'twantgetopt()writingtostderr*/ while((c=getopt(argc,argv,"vhbt:q"))!=-1){》 switch(c){ case'v': verbose++; break; case'h': puts(usage); return0; case'b':… broadcast_flag=1; break; case't': ttl_flag=sscanf(optarg,"%d",&ttl)&&ttl>=0&&ttl<256; break; case'q': verbose--; break;< case'': err_quit("unrecognizedoption:%c",c,usage);}if(optind!=argc-1) err_quit(usage); host=argv[optind];} pid=getpid(); signal(SIGALRM,sig_alrm); signal(SIGINT,sig_int); ai=host_serv(host,NULL,0,0); printf("ping%s(%s):%ddatabytes\n",ai->ai_canonname, Sock_ntop_host(ai->ai_addr,ai->ai_addrlen),datalen);[ /*4initializeaccordingtoprotocol*/ if(ai->ai_family==AF_INET){ pr=&proto_v4;#ifdef IPV6 }elseif(ai->ai_family==AF_INET6){ pr=&proto_v6; if(IN6_IS_ADDR_V4MAPPED(&(((structsockaddr_in6*), ai->ai_addr)->sin6_addr))) err_quit("cannotpingIPv4-mappedIPv6address");#endif }else err_quit("unknownaddressfamily%d",ai->ai_family); pr->sasend=ai->ai_addr; pr->sarecv=calloc(1,ai->ai_addrlen);¥ pr->salen=ai->ai_addrlen; gettimeofday(&tval_start,NULL); readloop(); exit(0);}(]voidproc_v4(char*ptr,ssize_tlen,structtimeval*tvrecv){ int hlen1,icmplen; double rtt; structip *ip; structicmp *icmp; structtimeval *tvsend;】 ip=(structip*)ptr; /*startofIPheader*/ hlen1=ip->ip_hl<<2; /*lengthofIPheader*/ icmp=(structicmp*)(ptr+hlen1); /*startofICMPheader*/ if((icmplen=len-hlen1)<8) err_quit("icmplen(%d)<8",icmplen);! if(icmp->icmp_type==ICMP_ECHOREPLY){ if(icmp->icmp_id!=pid) return; /*notaresponsetoourECHO_REQUEST*/ if(icmplen<16) err_quit("icmplen(%d)<16",icmplen); tvsend=(structtimeval*)icmp->icmp_data; tv_sub(tvrecv,tvsend);, rtt=tvrecv->tv_sec*+tvrecv->tv_usec/; if(rtt<rtt_min)rtt_min=rtt; if(rtt>rtt_max)rtt_max=rtt; rtt_total+=rtt; rtt_sqr_total+=rtt*rtt; recv_count++; if(verbose>0)| printf("%dbytesfrom%s:seq=%u,ttl=%d,rtt=%.3fms\n", icmplen,Sock_ntop_host(pr->sarecv,pr->salen), icmp->icmp_seq,ip->ip_ttl,rtt); }elseif(verbose>1){ printf("%dbytesfrom%s:type=%d,code=%d\n", icmplen,Sock_ntop_host(pr->sarecv,pr->salen), icmp->icmp_type,icmp->icmp_code);~ }}voidproc_v6(char*ptr,ssize_tlen,structtimeval*tvrecv){#ifdef IPV6~ int hlen1,icmp6len; double rtt; structip6_hdr *ip6; structicmp6_hdr *icmp6; structtimeval *tvsend; ip6=(structip6_hdr*)ptr; /*startofIPv6header*/ hlen1=sizeof(structip6_hdr);< if(ip6->ip6_nxt!=IPPROTO_ICMPV6) err_quit("nextheadernotIPPROTO_ICMPV6"); icmp6=(structicmp6_hdr*)(ptr+hlen1); if((icmp6len=len-hlen1)<8) err_quit("icmp6len(%d)<8",icmp6len); if(icmp6->icmp6_type==ICMP6_ECHO_REPLY){# if(icmp6->icmp6_id!=pid) return; /*notaresponsetoourECHO_REQUEST*/ if(icmp6len<16) err_quit("icmp6len(%d)<16",icmp6len); tvsend=(structtimeval*)(icmp6+1); tv_sub(tvrecv,tvsend); rtt=tvrecv->tv_sec*+tvrecv->tv_usec/;) if(rtt<rtt_min)rtt_min=rtt; if(rtt>rtt_max)rtt_max=rtt; rtt_total+=rtt; rtt_sqr_total+=rtt*rtt; recv_count++; if(verbose>0) printf("%dbytesfrom%s:seq=%u,hlim=%d,rtt=%.3fms\n",| icmp6len,Sock_ntop_host(pr->sarecv,pr->salen), icmp6->icmp6_seq,ip6->ip6_hlim,rtt); }elseif(verbose>1){ printf("%dbytesfrom%s:type=%d,code=%d\n", icmp6len,Sock_ntop_host(pr->sarecv,pr->salen), icmp6->icmp6_type,icmp6->icmp6_code); }'#endif /*IPV6*/}unsignedshortin_cksum(unsignedshort*addr,intlen){intnleft=len;intsum=0;unsignedshort*w=addr;unsignedshortanswer=0;。while(nleft>1){sum+=*w++;nleft-=2;}/*4mopupanoddbyte,ifnecessary*/if(nleft==1){*(unsignedchar*)(&answer)=*(unsignedchar*)w;sum+=answer;%}/*4addbackcarryoutsfromtop16bitstolow16bits*/sum=(sum>>16)+(sum&0xffff);/*addhi16tolow16*/sum+=(sum>>16);/*addcarry*/answer=~sum;/*truncateto16bits*/return(answer);}》voidsend_v4(void){ int len; structicmp *icmp; icmp=(structicmp*)sendbuf; icmp->icmp_type=ICMP_ECHO; icmp->icmp_code=0;( icmp->icmp_id=pid; icmp->icmp_seq=nsent++; gettimeofday((structtimeval*)icmp->icmp_data,NULL); len=8+datalen; /*checksumICMPheaderanddata*/ icmp->icmp_cksum=0; icmp->icmp_cksum=in_cksum((u_short*)icmp,len);' sendto(sockfd,sendbuf,len,0,pr->sasend,pr->salen);}voidsend_v6()[{#ifdef IPV6 int len; structicmp6_hdr *icmp6; icmp6=(structicmp6_hdr*)sendbuf; icmp6->icmp6_type=ICMP6_ECHO_REQUEST; icmp6->icmp6_code=0; icmp6->icmp6_id=pid; icmp6->icmp6_seq=nsent++;( gettimeofday((structtimeval*)(icmp6+1),NULL); len=8+datalen; /*8-byteICMPv6header*/ sendto(sockfd,sendbuf,len,0,pr->sasend,pr->salen);#endif /*IPV6*/}voidreadloop(void){ int size; char recvbuf[BUFSIZE]; socklen_t len;$ ssize_t n; structtimeval tval; sockfd=socket(pr->sasend->sa_family,SOCK_RAW,pr->icmpproto); setuid(getuid()); /*don'tneedspecialpermissionsanymore*/ size=60*1024; /*OKifsetsockoptfails*/ setsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,&size,sizeof(size)); if(ttl_flag)setsockopt(sockfd,IPPROTO_IP,IP_TTL,&ttl,sizeof(ttl));【if(broadcast_flag)setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&broadcast_flag,sizeof(broadcast_flag)); sig_alrm(SIGALRM); /*sendfirstpacket*/ for(;;){ len=pr->salen; n=recvfrom(sockfd,recvbuf,sizeof(recvbuf),0,pr->sarecv,&len); if(n<0){ if(errno==EINTR)| continue; else err_sys("recvfromerror"); } gettimeofday(&tval,NULL); (*pr->fproc)(recvbuf,n,&tval); }};voidsig_alrm(intsigno){(*pr->fsend)();send_count++;,alarm(1);return;/*probablyinterruptsrecvfrom()*/}voidsig_int(intsigno){structtimevaltval_end;doubletval_total;)gettimeofday(&tval_end,NULL);tv_sub(&tval_end,&tval_start);tval_total=*+/;puts("---pingstatistics---");printf("%lldpacketstransmitted,%lldreceived,%.0lf%%packetloss,time%.2lfms\n",send_count,recv_count,(send_count-recv_count)*/send_count,tval_total);doublertt_avg=rtt_total/recv_count;》printf("rttmin/avg/max/mdev=%.3lf/%.3lf/%.3lf/%.3lfms\n",rtt_min,rtt_avg,rtt_max,rtt_sqr_total/recv_count-rtt_avg*rtt_avg);close(sockfd);exit(0);}voidtv_sub(structtimeval*out,structtimeval*in){? if((out->tv_usec-=in->tv_usec)<0){ /*out-=in*/ --out->tv_sec; out->tv_usec+=1000000; } out->tv_sec-=in->tv_sec;};|char*sock_ntop_host(conststructsockaddr*sa,socklen_tsalen){staticcharstr[128];/*Unixdomainislargest*/switch(sa->sa_family){caseAF_INET:{structsockaddr_in*sin=(structsockaddr_in*)sa;、if(inet_ntop(AF_INET,&sin->sin_addr,str,sizeof(str))==NULL)return(NULL);return(str);}#ifdefIPV6caseAF_INET6:{-structsockaddr_in6*sin6=(structsockaddr_in6*)sa;if(inet_ntop(AF_INET6,&sin6->sin6_addr,str,sizeof(str))==NULL)return(NULL);return(str);}#endif。#ifdefHAVE_SOCKADDR_DL_STRUCTcaseAF_LINK:{structsockaddr_dl*sdl=(structsockaddr_dl*)sa;if(sdl->sdl_nlen>0)snprintf(str,sizeof(str),"%*s",sdl->sdl_nlen,&sdl->sdl_data[0]);else^snprintf(str,sizeof(str),"AF_LINK,index=%d",sdl->sdl_index);return(str);}#endifdefault:snprintf(str,sizeof(str),"sock_ntop_host:unknownAF_xxx:%d,len%d",sa->sa_family,salen);return(str);'}return(NULL);}char*Sock_ntop_host(conststructsockaddr*sa,socklen_tsalen){~char*ptr;if((ptr=sock_ntop_host(sa,salen))==NULL)err_sys("sock_ntop_hosterror");/*inet_ntop()setserrno*/return(ptr);}structaddrinfo*host_serv(constchar*host,constchar*serv,intfamily,intsocktype){intn;structaddrinfohints,*res;'bzero(&hints,sizeof(structaddrinfo));=AI_CANONNAME;/*alwaysreturncanonicalname*/=family;/*AF_UNSPEC,AF_INET,AF_INET6,etc.*/=socktype;/*0,SOCK_STREAM,SOCK_DGRAM,etc.*/if((n=getaddrinfo(host,serv,&hints,&res))!=0)return(NULL);return(res);/*returnpointertofirstonlinkedlist*/$}/*endhost_serv*/staticvoiderr_doit(interrnoflag,intlevel,constchar*fmt,va_listap){interrno_save,n;charbuf[MAXLINE];errno_save=errno;/*valuecallermightwantprinted*/#ifdefHAVE_VSNPRINTFvsnprintf(buf,sizeof(buf),fmt,ap);/*thisissafe*/…#elsevsprintf(buf,fmt,ap);/*thisisnotsafe*/#endifn=strlen(buf);if(errnoflag)snprintf(buf+n,sizeof(buf)-n,":%s",strerror(errno_save));strcat(buf,"\n");if(daemon_proc){—syslog(level,buf);}else{fflush(stdout);/*incasestdoutandstderrarethesame*/fputs(buf,stderr);fflush(stderr);}return;}\/*Fatalerrorunrelatedtoasystemcall.*Printamessageandterminate.*/voiderr_quit(constchar*fmt,...){}va_listap;va_start(ap,fmt);err_doit(0,LOG_ERR,fmt,ap);va_end(ap);exit(1);}、/*Fatalerrorrelatedtoasystemcall.*Printamessageandterminate.*/voiderr_sys(constchar*fmt,...){va_listap;va_start(ap,fmt);/err_doit(1,LOG_ERR,fmt,ap);va_end(ap);exit(1);}^%六、程序擴(kuò)展功能的需求分析與實現(xiàn)(2、實驗二擴(kuò)展功能-h 顯示幫助信息-b 允許ping一個廣播地址,只用于IPv4-t設(shè)置ttl值,只用于IPv4-q 安靜模式。不顯示每個收到的包的分析結(jié)果,只在結(jié)束時,顯示匯總結(jié)果實現(xiàn)見源代碼)%{七、實驗數(shù)據(jù)、結(jié)果分析實驗一見附錄實驗二~八、總結(jié)通過程序設(shè)計,對ping的工作原理進(jìn)一步認(rèn)識。尤其是ICMP報文的結(jié)構(gòu)模式,以及ping的一些擴(kuò)展功能的實現(xiàn)。對基于linux的c語言編程的方法進(jìn)一步掌握。程序設(shè)計中,對各種函數(shù)之間的協(xié)同工作運(yùn)用理解更加深刻。更掌握了如何使用信號量進(jìn)行通信。雖然程序設(shè)計及調(diào)試中也遇到不少困難,也都在同學(xué)幫助下,及通過資料查詢逐一解決。比如pi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 售房業(yè)主違約合同范例
- 衣服購買團(tuán)購合同范例
- 教師補(bǔ)課合同范例
- 快餐連鎖加盟合同范例
- 茶幾桌子供貨合同范例
- 木匠采購木料合同范例
- 2024年鍍金扣項目可行性研究報告
- 超市合作協(xié)議合同范例
- 2024年遠(yuǎn)程快速應(yīng)用接入方案項目可行性研究報告
- 國家合同范例平臺
- JGJ120-2012建筑基坑支護(hù)技術(shù)規(guī)程
- 國防教育基地建設(shè)項目運(yùn)營方案
- 維生素B市場研究報告
- 四川省廣安市2023年九年級上學(xué)期期末化學(xué)試題附答案
- 2022年云南省昆明市中考語文真題答案詳解
- 五年級信息技術(shù)上冊期末試卷及答案
- 成長計劃300字初中綜合素質(zhì)評價初三
- 工廠空氣重度污染應(yīng)急預(yù)案
- 清華大學(xué)《工程倫理》網(wǎng)課習(xí)題及期末考試答案
- 課件-5.1認(rèn)識人工智能
- 婦產(chǎn)科學(xué)智慧樹知到課后章節(jié)答案2023年下浙江大學(xué)
評論
0/150
提交評論