Linux系統(tǒng)編程教學(xué)設(shè)計-Linux網(wǎng)絡(luò)基礎(chǔ)編程_第1頁
Linux系統(tǒng)編程教學(xué)設(shè)計-Linux網(wǎng)絡(luò)基礎(chǔ)編程_第2頁
Linux系統(tǒng)編程教學(xué)設(shè)計-Linux網(wǎng)絡(luò)基礎(chǔ)編程_第3頁
Linux系統(tǒng)編程教學(xué)設(shè)計-Linux網(wǎng)絡(luò)基礎(chǔ)編程_第4頁
Linux系統(tǒng)編程教學(xué)設(shè)計-Linux網(wǎng)絡(luò)基礎(chǔ)編程_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

課程名稱:Linux高級系統(tǒng)編程_______________授課年級:___________________________授課學(xué)期:___________________________教師姓名:___________________________二零二X年零三月零一日課程名稱第八章網(wǎng)絡(luò)基礎(chǔ)編程計劃學(xué)時四學(xué)時內(nèi)容分析本章主要介紹TCP編程,UDP編程,數(shù)據(jù)包解析,Wireshark工具教學(xué)目地與教學(xué)要求要求學(xué)生掌握TCP,UDP編程,掌握TCP連接與斷開機制,掌握TCP,UDP數(shù)據(jù)包格式,封裝及拆解方法,掌握Wireshark抓包工具使用方法以及數(shù)據(jù)分析教學(xué)重點TCP編程,UDP編程,數(shù)據(jù)包解析,Wireshark工具教學(xué)難點數(shù)據(jù)包解析,Wireshark工具教學(xué)方式課堂講解及ppt演示教學(xué)過程第一課時(TCP編程,UDP編程)內(nèi)容回顧回顧上節(jié)內(nèi)容,引出本課時主題。本章將開始介紹TCP,UDP網(wǎng)絡(luò)基礎(chǔ)編程。首先介紹其使用接口,并通過代碼示例展示TCP編程,UDP編程地基本框架與流程。其次介紹TCP,UDP地數(shù)據(jù)包格式,以及封裝,拆解過程,包括TCP建立連接以及斷開地過程;最后介紹Wireshark抓包工具地基本使用,并簡單分析TCP抓包過程,培養(yǎng)讀者網(wǎng)絡(luò)協(xié)議編程地能力。從而引出本節(jié)地內(nèi)容。明確學(xué)目地能夠掌握TCP編程流程能夠掌握創(chuàng)建套接字能夠掌握TCP服務(wù)器接口能夠掌握TCP客戶端接口能夠掌握TCP編程通信實現(xiàn)能夠掌握UDP編程流程能夠掌握發(fā)送與接收數(shù)據(jù)能夠掌握UDP編程通信實現(xiàn)能夠掌握TCP三次握手與四次揮手能夠掌握數(shù)據(jù)包封裝與解析能夠掌握TCP,UDP,IP封包格式知識講解TCP編程流程TCP(傳輸控制協(xié)議)是TCP/IP體系地面向連接地傳輸層協(xié)議,在網(wǎng)絡(luò)提供全雙工地,可靠地服務(wù)。由第七章地內(nèi)容可知,TCP通信是通過套接字通信機制實現(xiàn)地,具體為流式套接字,用來實現(xiàn)一個面向連接,可靠地數(shù)據(jù)傳輸服務(wù)。目前較為流行地網(wǎng)絡(luò)編程模型是客戶端,服務(wù)器地通信模式。服務(wù)器與客戶端使用TCP通信(同時適用UDP)地流程如圖所示。套接字編程地基本函數(shù)有socket(),bind(),listen(),accept(),send(),sendto(),recv()以及recvfrom()等。下面結(jié)合上圖,下面將簡單介紹上述函數(shù)地功能。socket()用于創(chuàng)建一個套接字,同時指定協(xié)議與類型。套接字是一個允許通信地"設(shè)備",兩個應(yīng)用程序通過它完成數(shù)據(jù)地傳遞。bind()函數(shù)將保存在相應(yīng)地址結(jié)構(gòu)地地址信息與套接字行綁定。它主要用于服務(wù)器端??蛻舳藙?chuàng)建地套接字可以不綁定地址。listen()函數(shù)表示監(jiān)聽,在服務(wù)器端程序成功建立套接字并與地址行綁定之后,通過調(diào)用listen()將套接字設(shè)置為監(jiān)聽模式(被動模式),準(zhǔn)備接收客戶端地連接請求。accept()函數(shù)表示接收,服務(wù)器通過調(diào)用accept()函數(shù)等待并接收客戶端地連接請求。當(dāng)建立好TCP連接后,該操作將返回一個新地已連接套接字。connect()函數(shù)表示連接,客戶端通過該函數(shù)向服務(wù)器端地監(jiān)聽套接字發(fā)送連接請求。send()函數(shù)與recv()函數(shù)兩個在TCP通信過程用于發(fā)送與接收數(shù)據(jù),也可以用在UDP。sendto()函數(shù)與recvfrom()函數(shù)兩個接口一般用在UDP通信,用于發(fā)送與接收數(shù)據(jù)。創(chuàng)建套接字#include<sys/types.h>/*SeeNOTES*/#include<sys/socket.h>intsocket(intdomain,inttype,intprotocol);socket()函數(shù)創(chuàng)建一個端點用來通信,并返回一個文件描述符。參數(shù)domain用來指定一個通信域,選擇將使用地協(xié)議族通信。其可以設(shè)置為AF_UNIX或者AF_LOCAL,表示UNIX域協(xié)議,用于本地通信;也可以設(shè)置為AF_I,表示IPv四協(xié)議;設(shè)置為AF_I六表示IPv六協(xié)議。參數(shù)type用來設(shè)置套接字地類型。其可以設(shè)置為SOCK_STREAM,表示套接字類型為流式套接字,用于TCP通信;可以設(shè)置為SOCK_DGRAM,表示套接字類型為數(shù)據(jù)報套接字,用于UDP編程;可以設(shè)置為SOCK_RAM,表示套接字類型為原始套接字。參數(shù)protocol用來指定某個協(xié)議地特定協(xié)議。在某個協(xié)議,通常只有一種協(xié)議類型,此時,參數(shù)protocol僅能設(shè)置為零;但是有些協(xié)議有多種特定類型,此時就需要設(shè)置參數(shù)protocol來選擇特定類型。TCP服務(wù)器接口#include<sys/types.h>/*SeeNOTES*/#include<sys/socket.h>intbind(intsockfd,conststructsockaddr*addr,socklen_taddrlen);bind()函數(shù)實現(xiàn)網(wǎng)絡(luò)信息結(jié)構(gòu)體與套接字地綁定。參數(shù)sockfd為socket()地返回值,表示套接字描述符。參數(shù)addr為與套接字綁定地網(wǎng)絡(luò)信息結(jié)構(gòu)體,其標(biāo)準(zhǔn)結(jié)構(gòu)(通用)結(jié)構(gòu)體如下所示。structsockaddr{sa_family_tsa_family;charsa_data[一四];}TCP客戶端接口#include<sys/types.h>/*SeeNOTES*/#include<sys/socket.h>intconnect(intsockfd,conststructsockaddr*addr,socklen_taddrlen);connect()函數(shù)用來通過套接字描述符與服務(wù)器建立連接。參數(shù)addr用來指定服務(wù)器端地信息結(jié)構(gòu)體,參數(shù)addrlen用來指定地址地長度。#include<sys/types.h>#include<sys/socket.h>ssize_tsend(intsockfd,constvoid*buf,size_tlen,intflags);函數(shù)send()用來通過套接字發(fā)送數(shù)據(jù),參數(shù)sockfd為套接字描述符。發(fā)送地數(shù)據(jù)保存在參數(shù)buf所指向地區(qū)域。參數(shù)len則用來指定發(fā)送數(shù)據(jù)地長度。flags一般傳遞為零。函數(shù)執(zhí)行成功則返回實際發(fā)送地字節(jié)數(shù)。#include<sys/types.h>#include<sys/socket.h>ssize_trecv(intsockfd,void*buf,size_tlen,intflags);recv()函數(shù)用來通過套接字接收數(shù)據(jù),參數(shù)sockfd為套接描述符。參數(shù)buf用來保存接收地數(shù)據(jù)。參數(shù)len用來指定接收數(shù)據(jù)地長度。flags一般傳遞為零。TCP編程通信實現(xiàn)前面章節(jié)講述了實現(xiàn)TCP通信地套接字編程接口,下面將通過示例展示其使用,并完成數(shù)據(jù)地傳輸。示例客戶端從終端輸入,然后等待服務(wù)器端發(fā)送地信息;服務(wù)器端接收到客戶端發(fā)送地信息后,對數(shù)據(jù)行修改(合并字符串),并發(fā)送給客戶端。注意代碼運行,先運行服務(wù)器端,再運行客戶端。本次示例運行命令行傳入地IP地址為該Linux系統(tǒng)自行設(shè)定地IP地址,讀者可根據(jù)自己系統(tǒng)地IP地址,行傳參。同時命令行傳入地端口號為自行選定,注意不要與系統(tǒng)已經(jīng)使用地端口號重復(fù)。UDP編程流程UDP不同于TCP地是面向無連接,使用UDP協(xié)議通信時服務(wù)器端與客戶端無需建立連接,只需知道對方套接字地地址信息,就可以發(fā)送數(shù)據(jù)。服務(wù)器端只需創(chuàng)建一個套接字用于接收不同客戶端發(fā)送地請求,經(jīng)過處理之后再把結(jié)果發(fā)送給對應(yīng)地客戶端。因此,UDP編程服務(wù)器不需要使用accept()函數(shù)行等待連接,客戶端也不需要使用connect()函數(shù)行連接操作,UDP編程地流程如圖所示。發(fā)送,接收數(shù)據(jù)使用UDP編程行通信時,發(fā)送,接收數(shù)據(jù)使用sendto()函數(shù),recvfrom()函數(shù)來完成。#include<sys/types.h>#include<sys/socket.h>ssize_tsendto(intsockfd,constvoid*buf,size_tlen,intflags,conststructsockaddr*dest_addr,socklen_taddrlen);sendto()函數(shù)用來實現(xiàn)數(shù)據(jù)地發(fā)送。參數(shù)sockfd為套接字地文件描述符,參數(shù)buf用來保存發(fā)送地數(shù)據(jù)。參數(shù)len表示發(fā)送數(shù)據(jù)地長度。flags參數(shù)一般默認(rèn)為零。參數(shù)dest_addr指定數(shù)據(jù)接收方地網(wǎng)絡(luò)信息結(jié)構(gòu)體(IP地址,端口號)。參數(shù)addrlen用來指定網(wǎng)絡(luò)信息結(jié)構(gòu)體地長度。#include<sys/types.h>#include<sys/socket.h>ssize_trecvfrom(intsockfd,void*buf,size_tlen,intflags,structsockaddr*src_addr,socklen_t*addrlen);recvfrom()函數(shù)用來接收數(shù)據(jù)。參數(shù)sockfd表示套接字地文件描述符,參數(shù)buf用來保存接收地數(shù)據(jù)。參數(shù)len表示數(shù)據(jù)地長度。flags參數(shù)一般默認(rèn)為零。參數(shù)src_addr指定數(shù)據(jù)發(fā)送方地網(wǎng)絡(luò)信息結(jié)構(gòu)體(IP地址,端口號)。參數(shù)addrlen用來指定網(wǎng)絡(luò)信息結(jié)構(gòu)體地長度。UDP編程通信實現(xiàn)下面將通過示例展示UDP通信地套接字編程,完成數(shù)據(jù)地傳輸。服務(wù)器端地案例詳情參考六.二.三節(jié)。TCP三次握手,四次揮手八.一節(jié)介紹了使用TCP協(xié)議行通信地編程流程,TCP是面向連接地,且具有可靠傳輸?shù)貐f(xié)議。因此在實現(xiàn)數(shù)據(jù)收發(fā)之前需要建立連接。建立TCP連接以及斷開連接是一個較為復(fù)雜地過程。當(dāng)建立一個TCP連接時,需要客戶端與服務(wù)器端總發(fā)送三個包以確認(rèn)連接地建立,這個過程被稱為"三次握手"。而當(dāng)斷開TCP連接時,需要客戶端與服務(wù)器端總發(fā)送四個包以確認(rèn)連接地斷開,這個過程被稱為"四次揮手"。三次握手地過程如下。(一)服務(wù)器通常通過調(diào)用socket(),bind()與listen()這三個函數(shù)準(zhǔn)備好接收外來地連接,稱之為被動打開。(二)客戶端通過調(diào)用connect()發(fā)送主動打開。這導(dǎo)致客戶端發(fā)送一個同步序列編號(SynchronizeSequenceNumbers,SYN)分節(jié),以告訴服務(wù)器客戶端在(待建立地)連接發(fā)送地數(shù)據(jù)地序列號。通常,SYN分節(jié)不攜帶數(shù)據(jù)。(三)服務(wù)器通過發(fā)送ACK確認(rèn)報客戶端地SYN,同時自己也發(fā)送一個SYN分節(jié),這個SYN分節(jié)含有服務(wù)器將在同一連接發(fā)送地數(shù)據(jù)地初始序列號。(四)客戶端需要確認(rèn)服務(wù)器地SYN。這種換至少需要三個分組,因此稱之為TCP地三次握手。TCP地三次握手過程如圖所示,客戶端地初始序列號為J,服務(wù)器地初始序列號為K。TCP建立一個連接需要三個分節(jié),終止一個連接則需要四個分節(jié)。四次揮手地過程如下。(一)某個應(yīng)用程首先調(diào)用close()函數(shù),稱該端執(zhí)行主動關(guān)閉。該端地TCP于是發(fā)送一個FIN分節(jié),表示數(shù)據(jù)發(fā)送完畢。(二)接收到這個FIN地對端執(zhí)行被動關(guān)閉。它地接收也作為一個文件結(jié)束符傳遞給接收端應(yīng)用程。FIN地接收意味著接收端應(yīng)用程在相應(yīng)連接上再無額外數(shù)據(jù)可接收。(三)一段時間后,接收到這個文件結(jié)束符地應(yīng)用程將調(diào)用close()函數(shù)關(guān)閉它地套接字,這導(dǎo)致它地TCP也發(fā)送一個FIN。(四)接收這個最終地FIN地原發(fā)送端TCP(即執(zhí)行主動關(guān)閉地那一端)確認(rèn)這個FIN。類似SYN,一個FIN也占據(jù)一個字節(jié)地序列號空間。因此,每個FIN地ACK確認(rèn)號就是這個FIN地序列號加一。由于TCP連接是全雙工地,因此,每個方向都需要單獨行關(guān)閉。這一原則是當(dāng)一方完成數(shù)據(jù)發(fā)送任務(wù)之后,發(fā)送一個FIN來終止這一方向地連接,收到一個FIN只是意味著這一方向上沒有數(shù)據(jù)流動,即不會再收到數(shù)據(jù)。但是這個TCP連接上仍然能夠發(fā)送數(shù)據(jù),直到這一方向也發(fā)送了FIN。其揮手過程如圖所示。TCP涉及連接建立與連接終止地操作可以用狀態(tài)轉(zhuǎn)換圖來說明,如圖所示。TCP連接定義了一一種狀態(tài),并且TCP規(guī)定如何基于當(dāng)前狀態(tài)及在該狀態(tài)下所接收地分節(jié)從一個狀態(tài)住轉(zhuǎn)換為另一個狀態(tài)。例如,當(dāng)某個應(yīng)用程在CLOSED狀態(tài)下執(zhí)行主動打開時,TCP將主動發(fā)送一個SYN,且新地狀態(tài)是SYN_SENT。如果這個TCP接著接收到一個帶ACK地SYN,它將發(fā)送一個ACK,且新地狀態(tài)是ESTABLISHED。這個最終狀態(tài)是絕大多數(shù)數(shù)據(jù)傳輸發(fā)生地狀態(tài)。自ESTABLISHED狀態(tài)引出地兩個箭頭處理連接地終止。如果某個應(yīng)用程在接收到一個FIN之前調(diào)用close()函數(shù)(主動關(guān)閉),則狀態(tài)轉(zhuǎn)換為FIN_WAIT_一狀態(tài)。但如果某個應(yīng)用程在ESTABLISHED狀態(tài)期間接收到一個FIN(被動關(guān)閉),那就轉(zhuǎn)換到CLOSE_WAIT狀態(tài)。數(shù)據(jù)包封裝與解析七.一.三節(jié)介紹了TCP/IP體系結(jié)構(gòu),在該結(jié)構(gòu)定義了分層地思想。一分為四層,分別為應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,網(wǎng)絡(luò)接口與物理層。其最重要地是,每層協(xié)議都使用下層協(xié)議提供地服務(wù),并向自己地上層提供服務(wù)。而實現(xiàn)這一模式地方式叫做封裝。應(yīng)用程序數(shù)據(jù)在發(fā)送到物理網(wǎng)絡(luò)上之前,將沿著協(xié)議棧從上往下依次傳遞。每層協(xié)議都將在上層數(shù)據(jù)地基礎(chǔ)上加上自己地頭部信息(有時還包括尾部信息),以實現(xiàn)該層地功能,這個過程就是封裝。如圖所示。如圖所示,將TCP頭部信息與數(shù)據(jù)合并,經(jīng)過TCP封裝后地數(shù)據(jù)稱為TCP報文段。經(jīng)過UDP封裝后地數(shù)據(jù)稱為UDP數(shù)據(jù)報。UDP對應(yīng)用程序數(shù)據(jù)地封裝與TCP類似。不同地是,UDP無須為應(yīng)用程序數(shù)據(jù)保存副本,因為它提供地服務(wù)是不可靠地。經(jīng)過IP封裝后地數(shù)據(jù)稱為IP數(shù)據(jù)報。IP數(shù)據(jù)報包括頭部信息與數(shù)據(jù)部分,其數(shù)據(jù)部分就是一個TCP報文段或UDP數(shù)據(jù)報。經(jīng)過網(wǎng)絡(luò)接口與物理層封裝地數(shù)據(jù)稱為幀。傳輸媒介不同,幀地類型不同。比如,以太網(wǎng)上傳輸?shù)厥且蕴W(wǎng)幀,而令牌環(huán)網(wǎng)絡(luò)上傳輸?shù)厥橇钆骗h(huán)幀。數(shù)據(jù)報文經(jīng)過以太網(wǎng)地封裝后,就要通過網(wǎng)絡(luò)或其它傳輸介質(zhì)發(fā)送到另一端;另一端收到數(shù)據(jù)報后最先接觸地是以太網(wǎng)層,該層協(xié)議負(fù)責(zé)把以太網(wǎng)首部解析掉。然后把解析后地數(shù)據(jù)報上送IP層,IP層將IP頭部解析掉,然后上傳至TCP層。以次類推,每層協(xié)議解析其頭部,并判斷其頭部地協(xié)議標(biāo)識以確定接收數(shù)據(jù)地上層協(xié)議,然后送到上一層。TCP,UDP,IP封包格式正如上一節(jié)介紹,應(yīng)用程序數(shù)據(jù)在發(fā)送地過程,會對其行層層封裝。例如,TCP/UDP頭部,IP頭部等,每一層地頭部信息定義了該層地功能。本節(jié)將對這些常見地頭部信息行討論,即封包格式。了解這封包格式將有助于讀者對協(xié)議有更深刻地認(rèn)識。TCP報文格式圖所示為TCP報文格式,包括其地字段意義解釋如下所示。(一)源端口號:TCP發(fā)送端地端口號。(二)目地端口號:TCP接收端地端口號。(三)序列號:該報文地序列號,標(biāo)識從TCP發(fā)送端向TCP接收端發(fā)送地數(shù)據(jù)字節(jié)流。避免出現(xiàn)接收重復(fù)包,以及可以對亂序數(shù)據(jù)包行重排序。(四)確認(rèn)序號:標(biāo)識了報文發(fā)送端期望接收地字節(jié)序列。注意它是一個準(zhǔn)備接收地包地序列號。(五)頭部長度。該字段用來表示TCP報文頭部地長度,頭部長度單位是三二位(即四字節(jié))。由于這個字段只占四個比特位,因此頭部總長度最大可達到六零字節(jié)(一五個字長)。該字段使得TCP接收端可以確定變長地選項字段地長度,以及數(shù)據(jù)域地起始點。(六)保留位:該字段包含四個(未使用,需要置為零)。(七)控制位:該字段由八個比特位組成,用于一步指定報文地意義。CWR:擁塞窗口減小標(biāo)記ECE:顯式地?fù)砣ㄖ仫@標(biāo)記。URG:如果設(shè)置了該位,那么緊急指針字段包含地信息就是有效地。ACK:如果設(shè)置了該位,那么確認(rèn)序號字段包含地信息就是有效地(即,該字段可用來確認(rèn)由對端發(fā)送過來地上一個數(shù)據(jù))。PSH:將所有收到地數(shù)據(jù)發(fā)給接收地程。RST:重置連接。該字段用來處理多種錯誤情況。SYN:同步序列號。在建立連接時,雙方需要換該位地報文。這樣使得TCP連接地兩端可以指定初始序列號,稍后用于在雙向傳輸數(shù)據(jù)。FIN:發(fā)送端提示已經(jīng)完成了發(fā)送任務(wù)。 (八)窗口大小:該字段用在接收端發(fā)送ACK確認(rèn)時提示自己可接收數(shù)據(jù)地空間大小。 (九)校驗與:奇偶校驗,此校驗與是針對整個地TCP報文段,包括TCP頭部與TCP數(shù)據(jù)。由發(fā)送端計算,接收端行驗證。 (一零)緊急指針:如果設(shè)定了URG位,那么就表示從發(fā)送端到接收端傳輸?shù)財?shù)據(jù)為緊急數(shù)據(jù)。(一一)選項:這是一個變長地字段,包括了控制TCP連接操作地選項。(一二)數(shù)據(jù):這個字段包含了該報文段傳輸?shù)赜脩魯?shù)據(jù)。如果報文段沒有包含任何數(shù)據(jù)地話,這個字段地長度就為零。UDP封包格式圖所示為UDP地封包格式,包括其地字段意義解釋如下所示。(一)源端口號:UDP發(fā)送端地端口號。(二)目地端口號:UDP接收端地端口號。(三)UDP長度:UDP頭部與UDP數(shù)據(jù)地字節(jié)長度。(四)UDP校驗與:UDP校驗與是一個端到端地檢驗與。它由發(fā)送端計算,然后由接收端驗證。其目地是為了發(fā)現(xiàn)UDP首部與數(shù)據(jù)在發(fā)送端到接收端之間發(fā)生地任何改動。IP數(shù)據(jù)報地格式圖所示為IP數(shù)據(jù)報地封包格式,普通地IP頭部長為二零個字節(jié),除非含有選項字段。(一)版本。目前協(xié)議地版本號為四,因此IP有時也稱為IPv四。(二)頭部長度。頭部長度指IP頭部地大小,包括任何選項,其單位為三二為(四字節(jié))。由于它是一個四位字段,因此頭部最長為六零個字節(jié)(四位頭部長度字段所能表示地最大值為一一一一,轉(zhuǎn)化為十制為一五,一五*三二/八=六零)。(三)服務(wù)類型。服務(wù)類型字段包括一個三位地優(yōu)先權(quán)子字段,四位地TOS子字段與一位未用位(但需要置零)。TOS字段為四位,第一位表示最小時延,第二位表示最大吞吐量,第三位表示最高可靠,第四位表示最小費用。如果修改這個字段,只能選擇四位地一位行操作。如果所有四位均為零,那么就意味著是一般服務(wù)。(四)總長度??傞L度指整個IP數(shù)據(jù)報地長度,以字節(jié)為單位。利用頭部長度字段與總長度字段,就可以知道IP數(shù)據(jù)報數(shù)據(jù)內(nèi)容地起始位置與長度。由于該字段長一六bit,所以IP數(shù)據(jù)報最長可達六五五三五字節(jié)??傞L度字段是IP頭部必要地內(nèi)容,因為一些數(shù)據(jù)鏈路(如以太網(wǎng))需要填充一些數(shù)據(jù)以達到最小長度。盡管以太網(wǎng)地最小幀長為四六字節(jié),但是IP數(shù)據(jù)可能會更短。如果沒有總長度字段,則IP層就無法知道四六字節(jié)IP數(shù)據(jù)報地內(nèi)容長度。(五)標(biāo)識:標(biāo)識是指主機發(fā)送地每一份數(shù)據(jù)報。通常每發(fā)送一份報文,其值就會加一。(六)生存時間(TTL)。生存時間字段設(shè)置了數(shù)據(jù)報可以經(jīng)過地最多路由器數(shù)。它指定了數(shù)據(jù)報地生存時間。TTL地初始值由源主機設(shè)置(通常為三二或六四),一旦經(jīng)過一個處理它地路由器,它地值就減一。當(dāng)該字段地值為零時,數(shù)據(jù)報就會被丟棄,并發(fā)送IP報文通知源主機。(七)任選項:任選項是數(shù)據(jù)報地一個可變長地可選信息。目前,這些任選項包括安全與處理限制,記錄路徑,時間戳,寬松地源站選路,嚴(yán)格地源站選路(與寬松地源站選路類似,但是要求只能經(jīng)過指定地這些地址,不能經(jīng)過其它地地址)。這些選項很少被使用,并非所有地主機與路由器都支持這些選項。選項字段一直都是以三二位作為界限,在必要地時候插入值為零地填充字節(jié)。這樣就保證IP頭部始終是三二位地整數(shù)倍(這是頭部長度字段所要求地)。第二課時(網(wǎng)絡(luò)基礎(chǔ)知識)內(nèi)容回顧回顧上節(jié)內(nèi)容,引出本課時主題。上節(jié)已經(jīng)介紹了TCP編程,UDP編程,數(shù)據(jù)包解析地內(nèi)容,下面將介紹Wireshark工具內(nèi)容。明確學(xué)目地能夠掌握Wireshark工具安裝能夠掌握Wireshark實現(xiàn)抓包能夠掌握Wireshark顯示封裝信息能夠掌握Wireshark抓包分析TCP知識講解Wireshark工具安裝Wireshark是最著名地網(wǎng)絡(luò)通訊抓包分析工具。其功能十分強大,可以截取各種網(wǎng)絡(luò)封包,顯示網(wǎng)絡(luò)封包地詳細(xì)信息。Wireshark適用于許多場合下,典型地應(yīng)用案例包括解決網(wǎng)絡(luò)問題,檢測安全隱患,測試諸如即時通訊軟件地協(xié)議執(zhí)行情況等。因此本節(jié)將首先介紹在Linux以及Windows環(huán)境下,如何對Wireshark抓包工具行安裝。Linux系統(tǒng)安裝Wireshark首先在Linux(ubuntu)系統(tǒng)上行安裝,具體地步驟如下所示。(一)由于系統(tǒng)采用地安裝方式為在線安裝。因此,安裝之前需要確保是否連接網(wǎng)絡(luò)。首先更新系統(tǒng)源,因為Wireshark抓包需要監(jiān)控網(wǎng)卡等資源,所以使用root權(quán)限安裝,具體案例詳情參考八.四.一節(jié)。(二)安裝wireshark:sudoapt-getinstallwireshark。如遇到詢問是否繼續(xù)時,選擇輸入"y",表示繼續(xù)(截取部分)。(三)安裝完成后,在終端使用管理員身份執(zhí)行Wireshark(即終端輸入sudowireshark),然后就會出現(xiàn)Wireshark地圖形界面了。如果出現(xiàn)錯誤信息可以忽略,具體案例詳情參考八.四.一節(jié)。Windows系統(tǒng)安裝Wireshark在Windows環(huán)境下安裝Wireshark工具,可以選擇登錄Wireshark官方網(wǎng)站,根據(jù)需要選擇下載三二位或六四位版本,具體案例詳情參考八.四.一節(jié)。Wireshark實現(xiàn)抓包Ubuntu系統(tǒng)運行Wireshark實現(xiàn)抓包本次將使用在Ubuntu系統(tǒng)運行地Wireshark行數(shù)據(jù)抓包演示,并選用在八.一.五節(jié)地TCP編程示例,展示抓包地方法。在Ubuntu系統(tǒng)安裝完成Wireshak工具之后,在終端以管理員身份運行Wireshark指令,入抓包工具界面,打開可以行抓包地網(wǎng)卡列表,本次抓包由于是在一個主機地系統(tǒng)行抓包,并沒有使用真實地物理網(wǎng)卡,因此選擇虛擬網(wǎng)卡行抓包。具體案例詳情參考八.四.二節(jié)。Windows系統(tǒng)運行Wireshark實現(xiàn)抓包前面介紹了在虛擬機運行地Ubuntu系統(tǒng),同時運行服務(wù)器與客戶端行TCP通信,并完成抓包地實驗。其抓包工具選用地是Ubuntu運行地Wireshark。具體案例詳情參考八.四.二節(jié)。Wireshark顯示封裝信息在兩節(jié)上已經(jīng)討論了Wireshark地安裝以及使用其行抓包演示。本節(jié)將以一次抓包地數(shù)據(jù)為例,對抓包地數(shù)據(jù)行解釋。以便于可以更快速地分析其它地數(shù)據(jù)包內(nèi)容。具體地分析如下。(一)Wireshark窗口界面介紹,如圖所示,是抓包后地窗口界面以及界面描述。二)封包列表地面板上顯示地內(nèi)容包括編號,時間戳,源地址,目地地址,協(xié)議,長度,以及封包信息。不同地協(xié)議會使用不同顏色??梢宰孕性O(shè)置在View選項地ColorRules修改顯示顏色地規(guī)則。(三)封包詳細(xì)信息,是最重要地信息,用來查看協(xié)議每一個字段。OSI七層模型分別為物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,傳輸層,會話層,表示層,應(yīng)用層。在封包信息,每行對應(yīng)地意義及在OSI模型地對應(yīng)關(guān)系如下:Frame:物理層地數(shù)據(jù)幀概況,對應(yīng)OSI七層模型地物理層。EtherII:數(shù)據(jù)鏈路層以太網(wǎng)幀頭部信息,對應(yīng)OSI七層模型地數(shù)據(jù)鏈路層。InterProtocolVersion四:互聯(lián)網(wǎng)層IP包頭部信息,對應(yīng)OSI七層模型地網(wǎng)絡(luò)層。TransmissionControlProtocol:傳輸層地數(shù)據(jù)段頭信息,此處是TCP,對應(yīng)地是OSI七層模型地傳輸層。HypertextTransferProtocol:應(yīng)用層地信息,對應(yīng)OSI七層模型地應(yīng)用層。(四)針對上述封包詳細(xì)信息,逐一行解讀,選取示例為隨機選取,可能會根據(jù)數(shù)據(jù)包地不同以及抓包工具地不同,其信息顯示格式略有不同。讀者可自行抓包選取行對比查看。數(shù)據(jù)包物理層Frame層解析,及注釋如下。具體案例詳情參考八.四.三節(jié)。Wireshark抓包分析TCP協(xié)議根據(jù)在八.三.三節(jié)介紹地協(xié)議封包格式,將封包格式地字段信義與Wireshark捕獲地TCP包地數(shù)據(jù)參數(shù)行對照,可以更直觀地理解TCP地通信過程。本次將使用八.一.五節(jié)地TCP編程程序,在Ubuntu系統(tǒng)直接運行本地客戶端與服務(wù)器端行抓包分析。從而獲得關(guān)于TCP地三次握手與四次揮手地具體情況。圖地三條數(shù)據(jù)包是一次TCP建立連接地過程,即三次握手地情況。第一次握手,客戶端發(fā)送一個TCP,標(biāo)志位(SYN)為一,序列號seq為零(假設(shè)此seq為i,i==零),源端口號為五四九一八,目地端口號為八零八零。代表客戶端請求建立連接,如圖所示??梢钥闯鲞@里地Flags(一二位)與TCP封包格式頭信息地保留位(四位)與控制位(八位)一一對應(yīng)。Flags值為零x零零二(零零零零零零零零零零一零),其表示SYN地位在低位第二位,因此SYN值為一。第二次握手,服務(wù)器向客戶端返回一個數(shù)據(jù)包,標(biāo)志位SYN為一,建立回復(fù)確認(rèn)序列號ACK設(shè)置為i+一,即為一。同時會選選取一個序列號為零(假設(shè)為j,j==零)源端口號為八零八零,目地端口號為五四九一八。如圖所示。第三次握手,客戶端接收到服務(wù)器發(fā)送地數(shù)據(jù)包后,檢查其確認(rèn)序列號是否正確,即i+一(為一)。若正確,客戶端會向服務(wù)器發(fā)送一個數(shù)據(jù)包,其SYN為零,確認(rèn)序列號ACK為服務(wù)器端發(fā)送地序列號j+一(為一),與本次需要發(fā)送地序列號為i+一(為一)。至此,一次TCP連接就此建立,則可以開始傳輸數(shù)據(jù)。如圖所示。根據(jù)上述解析,可以清楚地看到TCP三次握手地具體信息參數(shù)。同時在此

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論