




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、以太網(wǎng)數(shù)據(jù)包結(jié)構(gòu)以太網(wǎng)包(幀)格式在以太網(wǎng)的發(fā)展過(guò)程中,出現(xiàn)了很多的幀格式,目前,應(yīng)用最多的是以太網(wǎng) II格式,也就是以太網(wǎng)版本2,是由DEC、Intel和Xerox在1982年制定的,現(xiàn) 在幾乎是以太網(wǎng)的標(biāo)準(zhǔn),它是由RFC894所定義的,其幀格式如下圖所示:目的MAC地址(6字節(jié))源MAC地址(6字節(jié))協(xié)議類(lèi)型(2字節(jié))以太網(wǎng)幀數(shù)據(jù)負(fù)載(46字節(jié)到1500字節(jié))協(xié)議類(lèi)型說(shuō)明:0 x0800: IP協(xié)議數(shù)據(jù)包 0 x0806: ARP協(xié)議數(shù)據(jù)包 0 x0835: RARP協(xié)議數(shù)據(jù)包0 x8863: PPP Over Ethernet Discovery Stage0 x8864: PPP Ov
2、er Ethernet Session StageIP協(xié)議數(shù)據(jù)包結(jié)構(gòu)如下頁(yè)表:IP是一個(gè)無(wú)連接的協(xié)議,主要就是負(fù)責(zé)在主機(jī)間尋址并為數(shù)據(jù)包設(shè)定路由,在交換數(shù)據(jù)前它并不建立會(huì)話(huà)。因?yàn)樗槐WC正確傳遞,另一方面,數(shù)據(jù)在被收到時(shí),IP不需要收到確認(rèn),所以它是不可靠的。4位版 本4位包頭 長(zhǎng)度8位服務(wù)類(lèi)型即TOS16位總長(zhǎng)度16位標(biāo)識(shí)號(hào)即ID號(hào)3 位Flag-13位片偏移8位生存時(shí)間8位協(xié)議類(lèi)型M位包頭校驗(yàn)和015 163132位源IP地址20 個(gè) 字節(jié)關(guān)位目的IP地址|網(wǎng)篷樣隆LJ.in版本號(hào)(Version):長(zhǎng)度4比特。標(biāo)識(shí)目前采用的IP協(xié)議的版本號(hào)。一般 的值為 0100(IPv4),IPv6
3、的值(0110)IP包頭長(zhǎng)度(Header Length):長(zhǎng)度4比特。這個(gè)字段的作用是為了描述 IP包頭的長(zhǎng)度,因?yàn)樵贗P包頭中有變長(zhǎng)的可選部分。IP包頭最小長(zhǎng)度為20字 節(jié),由于變長(zhǎng)的可選部分最大長(zhǎng)度可能會(huì)變成24字節(jié)。服務(wù)類(lèi)型(Type of Service):長(zhǎng)度8比特。這個(gè)子段可以拆分成兩個(gè)部 分:優(yōu)先級(jí)(Precedence)和服務(wù)條款(TOS)。TOS (前三位)目前不太使用。而Precedence則用于QOS應(yīng)用(TOS字段的詳細(xì)描述RFC 1340 1349)8個(gè)BIT的含義是:000前三位不用0表示最小時(shí)延,如Telnet服務(wù)使用該位0表示吞吐量,如FTP服務(wù)使用該位0表示
4、可靠性,如SNMP服務(wù)使用該位0表示最小代價(jià)0不用IP包總長(zhǎng)(Total Length):長(zhǎng)度16比特。IP包最大長(zhǎng)度65535字節(jié)。標(biāo)識(shí)符(Identifier):長(zhǎng)度16比特。該字段和Flags和Fragment Offest 字段聯(lián)合使用,對(duì)大的上層數(shù)據(jù)包進(jìn)行分段(fragment)操作。標(biāo)記(Flags):長(zhǎng)度3比特。該字段第一位不使用。第二位是DF位,DF位設(shè)為1時(shí)表明路由器不能對(duì)該上層數(shù)據(jù)包分段。如果一個(gè)上層數(shù)據(jù)包無(wú)法在不分段的情況下進(jìn)行轉(zhuǎn)發(fā),則路由器會(huì)丟棄該上層數(shù)據(jù)包并返回一個(gè)錯(cuò)誤信息。第三位是MF位,當(dāng)路由器對(duì)一個(gè)上層數(shù)據(jù)包分段,則路由器會(huì)在除了最后一個(gè)分段的IP包的包頭中將M
5、F位設(shè)為1。分段序號(hào)(Fragment Offset):長(zhǎng)度13比特。該字段對(duì)包含分段的上層數(shù) 據(jù)包的IP包賦予序號(hào)。由于IP包在網(wǎng)絡(luò)上傳送的時(shí)候不一定能按順序到達(dá),這 個(gè)字段保證了目標(biāo)路由器在接受到IP包之后能夠還原分段的上層數(shù)據(jù)包。到某 個(gè)包含分段的上層數(shù)據(jù)包的IP包在傳送是丟失,則整個(gè)一系列包含分段的上層 數(shù)據(jù)包的IP包都會(huì)被要求重傳。生存時(shí)間(TTL):長(zhǎng)度8比特。當(dāng)IP包進(jìn)行傳送時(shí),先會(huì)對(duì)該字段賦予某 個(gè)特定的值。當(dāng)IP包經(jīng)過(guò)每一個(gè)沿途的路由器的時(shí)候,每個(gè)沿途的路由器會(huì)將 IP包的TTL值減少1。如果TTL減少為0,則該IP包會(huì)被丟棄。這個(gè)字段可以 防止由于故障而導(dǎo)致IP包在網(wǎng)絡(luò)中不
6、停被轉(zhuǎn)發(fā)。協(xié)議(Protocol):長(zhǎng)度8比特。標(biāo)識(shí)了上層所使用的協(xié)議。如果是ICMP 協(xié)議,此處的協(xié)議代碼應(yīng)為1。如果TCP協(xié)議,則此處的協(xié)議代碼應(yīng)為6。如果 是UDP協(xié)議,則此處的協(xié)議代碼應(yīng)為17。頭部校驗(yàn)(Header Checksum):長(zhǎng)度16位,由于IP包頭是變長(zhǎng)的,所以 提供一個(gè)頭部校驗(yàn)來(lái)保證IP包頭中信息的正確性。起源和目標(biāo)地址 (Source and Destination Addresses)IP選項(xiàng)(options)主要用于控制和測(cè)試兩大目的。作為選項(xiàng) 用戶(hù)可以使用也可以不使用IP選項(xiàng) 但作為IP協(xié)議的組成部分 所有實(shí)現(xiàn)IP協(xié)議的設(shè)備能處理IP選項(xiàng)。在使用選項(xiàng)的過(guò)程中,有
7、可能造成數(shù)據(jù)包頭部不是32b的整數(shù)倍,那么則 需要填充域來(lái)湊齊。IP數(shù)據(jù)報(bào)選項(xiàng)有選項(xiàng)瑪、長(zhǎng)度、和選項(xiàng)數(shù)據(jù)3部分組成,其中,選項(xiàng)瑪用于確定該選項(xiàng)的具體內(nèi)容,選項(xiàng)數(shù)據(jù)部分長(zhǎng)度有選項(xiàng)字段決 定。源路由。所謂源路由是指IP數(shù)據(jù)包穿越互聯(lián)網(wǎng)所經(jīng)過(guò)的路徑是 有源主機(jī)指定的,他 區(qū)別于有主機(jī)或路由器的互聯(lián)層軟件自行選擇路由后得出的路徑。源路由選項(xiàng)是非常有用的一個(gè)選項(xiàng),可用于測(cè)試某個(gè)特定網(wǎng)絡(luò)的吞吐量, 也可以是數(shù)據(jù)包繞開(kāi)出錯(cuò)網(wǎng)絡(luò)。源路由選項(xiàng)可以分為兩類(lèi),一類(lèi)是 嚴(yán)格源路由選項(xiàng),一類(lèi)是松散源路由選 項(xiàng)。記錄路由所謂記錄路由是指記錄下IP數(shù)據(jù)報(bào)從源主機(jī)到目的主機(jī)所經(jīng)過(guò)的路徑上的 各個(gè)路由器的IP地址,記錄路由功能
8、可以通過(guò)IP數(shù)據(jù)報(bào)的記錄路由選項(xiàng)完成。利用記錄路由選項(xiàng),可以判斷IP數(shù)據(jù)報(bào)傳輸過(guò)程中的所經(jīng)過(guò)的路徑,通常 還可以測(cè)試互聯(lián)網(wǎng)中路由配置是否正確。時(shí)間戳所謂時(shí)間戳(timer stamp)就是記錄下IP數(shù)據(jù)報(bào)經(jīng)過(guò)的每一個(gè)路由器時(shí)的當(dāng)?shù)貢r(shí)間,記錄時(shí)間戳可以使用IP數(shù)據(jù)報(bào)的時(shí)間戳選項(xiàng)。時(shí)間戳中的時(shí)間采用格林尼治時(shí)間。時(shí)間戳選項(xiàng)提供了 IP數(shù)據(jù)報(bào)傳輸中的時(shí)域參數(shù),用于分析網(wǎng)路吞吐率,擁塞情況,負(fù)載情況等ICMP報(bào)文結(jié)構(gòu)如下:internet控制消息協(xié)議ICMP是用于報(bào)告錯(cuò)誤并代表IP對(duì)消息進(jìn)行控制。類(lèi)型(8位)代碼(8位)校驗(yàn)和(16位)標(biāo)示符(16位)序號(hào)(16位)當(dāng)前時(shí)間(32位)8bits類(lèi)型和8
9、bits代碼字段:一起決定了 ICMP報(bào)文的類(lèi)型.如下表:類(lèi)屋代碼捎述Qi目的不可達(dá):Q網(wǎng)絡(luò)不可這1主機(jī)不可ii2的成:如!讓i端口不可達(dá)4需蟄進(jìn)行分片但沒(méi)曾了不分片比特5源站痛失暇6目的網(wǎng)蠟不認(rèn)識(shí)7目的主機(jī)不訊詛3源主擔(dān)禎隔罟|作.1殳不甲|9目的網(wǎng)兆被強(qiáng)制禁止10目的主機(jī)被強(qiáng)制禁止II由于眼身類(lèi)粵ms.網(wǎng)皤不可達(dá)12由干服務(wù)美土丁口主機(jī)不可達(dá)11由于過(guò)濾.渥信被曲制禁止14生腿枳15優(yōu)先枳中止生效4Q源端禎美竹|基本流掉制510定向0對(duì)網(wǎng)錯(cuò)由定百I(mǎi)對(duì)主帆而定曲2對(duì)1!2類(lèi)E和網(wǎng)咯Hi.定而3對(duì)服務(wù)類(lèi)必和主機(jī)而定茵80請(qǐng)求園界二斌求90路由券通告1C0垮由器請(qǐng)求11起時(shí):0偉贛期何生存時(shí)0.
10、為C fTraceroute1在散據(jù)報(bào)那裝期m生存時(shí)E為。12懸裁問(wèn)鹿0壞的IP首條包括各種是錯(cuò)|L130時(shí)請(qǐng)求140時(shí)間戳應(yīng)答套0信息靖求IWT用拓01言息應(yīng)答t作庶不用)17D境址掩擋請(qǐng)求1S0地址掩此應(yīng)答16bits校驗(yàn)和字段:包括數(shù)據(jù)在內(nèi)的整個(gè)ICMP數(shù)據(jù)包的校驗(yàn)和,其計(jì)算方 法和IP頭部校驗(yàn)和的計(jì)算方法是一樣的。16bits標(biāo)識(shí)符字段:用于標(biāo)識(shí)本ICMP進(jìn)程16bits序列號(hào)字段:用于判斷回射應(yīng)答數(shù)據(jù)報(bào)。時(shí)間戳:時(shí)間戳請(qǐng)求報(bào)文(Type=13)和時(shí)間戳應(yīng)答報(bào)文(Type=14)用于測(cè) 試兩臺(tái)主機(jī)之間數(shù)據(jù)報(bào)來(lái)回一次的傳輸時(shí)間。傳輸時(shí),主機(jī)填充原始時(shí)間戳,接 收方收到請(qǐng)求后填充接收時(shí)間戳
11、后以Type=14的報(bào)文格式返回,發(fā)送方計(jì)算這個(gè) 時(shí)間差。一些系統(tǒng)不響應(yīng)這種報(bào)文。TCP報(bào)文結(jié)構(gòu)如下表:(摘自 HYPERLINK /viewtopic.php?f=3&t=21 /viewtopic.php?f=3&t=21)傳輸控制協(xié)議(TCP)向上與用戶(hù)應(yīng)用程序進(jìn)程接口,向下與網(wǎng)絡(luò)層協(xié)議IP 接口。用戶(hù)應(yīng)用程序采用首先調(diào)用TCP(或UDP),然后將應(yīng)用程序數(shù)據(jù)遞交給TCP這一方式,在IP網(wǎng)絡(luò)上傳送數(shù)據(jù)。TCP將這些數(shù)據(jù)打包分段并調(diào)用IP模塊向目的主機(jī)傳送每個(gè)數(shù)據(jù)段。接收方的TCP將段中的數(shù)據(jù)放入接收緩沖器,然后將段重裝為應(yīng)用程序數(shù)據(jù),再將這些數(shù)據(jù)發(fā)送到目的的應(yīng)用程序進(jìn)程。盡管T C P和
12、U D P都使用相同的網(wǎng)絡(luò)層(I P),T C P卻向應(yīng)用層提 供與U D P完全不同的服務(wù)。T C P提供一種面向連接的、可靠的字節(jié)流服務(wù)。00 01 D2 03 04 05 06 07 0W9 1011 12 13 14 話(huà)】6 17 1& 19 202 22 23 24 25 26 27 28 29 30 31 B源端口號(hào)16位目標(biāo)端n號(hào)16位順序目32位序列編號(hào)數(shù)據(jù)偏移成,絲一;牛* 32位確認(rèn)編號(hào)頭滁度保留6位mm Cj K 11 : N N窗口大小16位校驗(yàn)和16位緊急指針16位可選項(xiàng)8的倍數(shù)位數(shù)據(jù)源端口號(hào)(16位),標(biāo)識(shí)主機(jī)上發(fā)起傳送的應(yīng)用程序;目的端口(16位) 標(biāo)識(shí)主機(jī)上傳送
13、要到達(dá)的應(yīng)用程序。源端和目的端的端口號(hào),用于尋找發(fā)端和收 端應(yīng)用進(jìn)程。這兩個(gè)值加上IP首部中的源端IP地址和目的端IP地址唯一確 定一個(gè)T C P連接。一個(gè)IP地址和一個(gè)端口號(hào)有時(shí)也稱(chēng)為一個(gè)插口( s o c k e t),插口對(duì)(s o c k e t p a i r)(包含客戶(hù)I P地址、客戶(hù)端口號(hào)、服 務(wù)器IP地址和服務(wù)器端口號(hào)的四元組)可唯一確定互聯(lián)網(wǎng)絡(luò)中每個(gè)T C P連接的雙方。IP+TCP端口唯一確定一個(gè)TCP連接。TCP協(xié)議通過(guò)使用端口來(lái)標(biāo)識(shí)源端和目標(biāo)端的應(yīng)用進(jìn)程。端口號(hào)可以使用 0到65535之間的任何數(shù)字。在收到服務(wù)請(qǐng)求時(shí),操作系統(tǒng)動(dòng)態(tài)地為客戶(hù)端的應(yīng) 用程序分配端口號(hào)。在服務(wù)
14、器端,每種服務(wù)在眾所周知的端口(Well-KnowPort)為用戶(hù)提供服務(wù)。順序號(hào)字段:占32比特。用來(lái)標(biāo)識(shí)從TCP源端向TCP目標(biāo)端發(fā)送的數(shù)據(jù) 字節(jié)流,它表示在這個(gè)報(bào)文段中的第一個(gè)數(shù)據(jù)字節(jié)。確認(rèn)號(hào)字段:占32比特。只有ACK標(biāo)志為1時(shí),確認(rèn)號(hào)字段才有效。它 包含目標(biāo)端所期望收到源端的下一個(gè)數(shù)據(jù)字節(jié)。頭部長(zhǎng)度字段:占4比特。給出頭部占32比特的數(shù)目。沒(méi)有任何選項(xiàng)字 段的TCP頭部長(zhǎng)度為20字節(jié);最多可以有60字節(jié)的TCP頭部。預(yù)留:由跟在數(shù)據(jù)偏移字段后的6位構(gòu)成,預(yù)留位通常為0.標(biāo)志位字段(U、A、P、R、S、F):占6比特。各比特的含義如下:URG :緊急指針(urgent pointer)
15、有效。ACK :確認(rèn)序號(hào)有效。PSH :立即發(fā)送(默認(rèn)要等到發(fā)送緩沖區(qū)存滿(mǎn)再發(fā)送數(shù)據(jù))RST :重建連接。 SYN :發(fā)起一個(gè)連接。FIN:釋放一個(gè)連接。窗口大小字段:占16比特。此字段用來(lái)進(jìn)行流量控制。單位為字節(jié)數(shù), 這個(gè)值是本機(jī)期望一次接收的字節(jié)數(shù)。 TCP校驗(yàn)和字段:占16比特。對(duì)整個(gè)TCP報(bào)文段,即TCP頭部和TCP數(shù) 據(jù)進(jìn)行校驗(yàn)和計(jì)算,并由目標(biāo)端進(jìn)行驗(yàn)證。緊急指針字段:占16比特。它是一個(gè)偏移量,和序號(hào)字段中的值相加表 示緊急數(shù)據(jù)最后一個(gè)字節(jié)的序號(hào)。選項(xiàng)字段:占32比特。可能包括窗口擴(kuò)大因子、時(shí)間戳等選項(xiàng)。TCP三次握手:創(chuàng)建TCP連接1、A 端 SYN=1,ACK=0Sequenc
16、eNumber二XXX2、B端SYN=1,ACK=1 SequenceNumber=YYY Acknowledgement=XXX+13、A端SYN=0,ACK=1 SequenceNumber=XXX+1 Acknowledgement=YYY+1這個(gè)TCP負(fù)載中已經(jīng)可以包含業(yè)務(wù)數(shù)據(jù)了。FIN=1,ACK=1FIN=1,ACK=1TCP鏈接撤銷(xiāo):1、A端SequenceNumber=XXXAcknowledgement=YYY2、B端SequenceNumber=YYYAcknowledgement=XXX+13、A端Acknowledgement=YYY+1FIN=0,ACK=1Seque
17、nceNumber=XXX+1定義TCP報(bào)頭typedef struct _tcphdrbyte source_port2; /發(fā)送端端口號(hào),16 位byte dest_port2; /接收端端口號(hào),16 位byte sequence_no4; /32位,標(biāo)示消息端的數(shù)據(jù)位于全體數(shù)據(jù)塊的某一字節(jié)的數(shù)字byte ack_no4; /32位,確認(rèn)號(hào),標(biāo)示接收端對(duì)于發(fā)送端接收到數(shù)據(jù)塊數(shù)值byte offset_reser_con2;/數(shù)據(jù)偏移4位,預(yù)留6位,控制位6為byte window2; /窗口 16 位byte checksum2; /校驗(yàn)碼,16 位byte urgen_pointer2;
18、 /16 位,緊急數(shù)據(jù)指針byte options3; /選祥和填充,32 位TCP_HEADER;本文來(lái)自CSDN博客: HYPERLINK /byxdaz/archive/2007/08/01/1720966.aspx /byxdaz/archive/2007/08/01/1720966.aspxTCP/IP協(xié)議簡(jiǎn)單分析首先TCP和IP是兩種不同的協(xié)議,它們來(lái)七層網(wǎng)絡(luò)模型中分別在不同的層 次,IP協(xié)議是網(wǎng)絡(luò)層的協(xié)議,TCP是更高一層的傳輸層的協(xié)議,TCP是建立在IP 協(xié)議之上的,所以一般把TCP和IP連在一起說(shuō)TCP/IP協(xié)議。Windows系統(tǒng)的TCP協(xié)議棧的數(shù)據(jù)包默認(rèn)是1460字節(jié)大小
19、,如果一次傳輸 的數(shù)據(jù)大于這個(gè)長(zhǎng)度,會(huì)把分割成幾個(gè)長(zhǎng)度都不大于1460字節(jié)的TCP數(shù)據(jù)包, 每個(gè)數(shù)據(jù)包都會(huì)被賦予一個(gè)sequnce number (相當(dāng)于每個(gè)數(shù)據(jù)包的順序號(hào),憑 這個(gè)接收端可以知道數(shù)據(jù)包的前后順序)之后TCP的數(shù)據(jù)包再被包裹上一層IP的數(shù)據(jù)的頭形成IP數(shù)據(jù)包在網(wǎng)上傳 輸(其實(shí)最后還要包一層以太網(wǎng)數(shù)據(jù)包,網(wǎng)絡(luò)上最終傳輸?shù)亩际且蕴W(wǎng)數(shù)據(jù)包)。IP數(shù)據(jù)包到了目的地后,接收端首先把IP數(shù)據(jù)包的包頭去掉,取出TCP的 包接收端每收到一個(gè)TCP的數(shù)據(jù)包都需要返回給發(fā)送端一個(gè)ACK的數(shù)據(jù)包告訴 發(fā)送端已接到此數(shù)據(jù)包,如果接收端在一定的時(shí)間內(nèi)沒(méi)有收到某個(gè)數(shù)據(jù)包的ACK 響應(yīng),會(huì)再次發(fā)送這個(gè)數(shù)據(jù)
20、包,這樣就保證了數(shù)據(jù)都能被接收端接收到(因特網(wǎng) 上丟數(shù)據(jù)包是很正常的事,如果沒(méi)有數(shù)據(jù)包重發(fā)機(jī)制,很難保證發(fā)送的數(shù)據(jù)都能 被接收端完整的收到)。每個(gè)TCP數(shù)據(jù)包也是由包頭和實(shí)際數(shù)據(jù)組成,包頭包含如下主要內(nèi)容:l Source port (2 字節(jié))發(fā)送端的端口號(hào)l Destination port (2 字節(jié))接收端的端口號(hào)TCP包頭中只包含雙方的端口號(hào)雙方的IP地址在IP包的包頭所以在TCP 數(shù)據(jù)包的包頭中沒(méi)有IP地址。l Sequence number (4 字節(jié))數(shù)據(jù)的順序號(hào),表示當(dāng)前數(shù)據(jù)包中的數(shù)據(jù)起始順序號(hào),比如前一個(gè)數(shù)據(jù)包的 SEQ為十六進(jìn)制的:df d5 aa 3d,數(shù)據(jù)包的實(shí)際數(shù)據(jù)
21、長(zhǎng)度為16字節(jié),那么下 一個(gè)數(shù)據(jù)包的SEQ就要在前一個(gè)數(shù)據(jù)包的SEQ基礎(chǔ)上加上16,為:df d5 aa 4dl Acknowledgement number (4 字節(jié))接收到對(duì)方的某個(gè)數(shù)據(jù)包后的回應(yīng)順序號(hào)。如果接收到了對(duì)方主動(dòng)發(fā)送來(lái)的 某個(gè)數(shù)據(jù)包,必須要返回對(duì)方一個(gè)ACK回應(yīng)數(shù)據(jù)包,數(shù)據(jù)包的頭部的 Acknowledgement number部分根據(jù)對(duì)方發(fā)送數(shù)據(jù)的SEQ和實(shí)際數(shù)據(jù)長(zhǎng)度,返回 SEQ+實(shí)際數(shù)據(jù)長(zhǎng)度,表示已經(jīng)接收到這個(gè)數(shù)據(jù)包。對(duì)方收到這個(gè)回應(yīng),根據(jù)數(shù) 值計(jì)算后知道這個(gè)數(shù)據(jù)包已經(jīng)被對(duì)方接收。如果接收不到ACK的回應(yīng),就意味著 這個(gè)數(shù)據(jù)包已經(jīng)在網(wǎng)上被丟失,需要重新發(fā)送此數(shù)據(jù)包。l
22、Header length ( 1 字節(jié))表示TCP數(shù)據(jù)包的包頭長(zhǎng)度,整個(gè)TCP數(shù)據(jù)包的長(zhǎng)度減包頭長(zhǎng)度就能得到TCP數(shù)據(jù)包的實(shí)際傳送的數(shù)據(jù)長(zhǎng)度。l Flags ( 1 字節(jié))標(biāo)志字節(jié),每一位都是一個(gè)標(biāo)志,以下是幾個(gè)主要標(biāo)志:ACK -表示數(shù)據(jù)包是個(gè)ACK回應(yīng)數(shù)據(jù)包,表示接收到了對(duì)方的某個(gè)數(shù)據(jù)包, 具體哪個(gè)包由包頭的Acknowledgement number部分指示。PSH -表示這是個(gè)有實(shí)際數(shù)據(jù)的包。SYN -表示這是個(gè)建立連接的數(shù)據(jù)包,通訊雙方要通訊,總是由客戶(hù)端先發(fā)送SYN數(shù)據(jù)包到服務(wù)端以建立TCP的連接。FIN -表示通訊結(jié)束,拆除連接的數(shù)據(jù)包。下面描述一次TCP傳送數(shù)據(jù)的完整過(guò)程 以
23、一個(gè)客戶(hù)端向服務(wù)端發(fā)送一些數(shù)據(jù)為例。客戶(hù)端f IP:Pcirt)服務(wù)浦 1 IP:Pcirt)1.1SYN客戶(hù)端初始SEQ1L 1.2 SYN ACK服務(wù)能初始SEQ1.3 ACK11112.1客戶(hù)端發(fā)送服客端數(shù)據(jù)包-11NW服第端發(fā)往客戶(hù)端ACK11孔W,hJ+ 1客尸端發(fā)送服務(wù)端的2CK13,1客戶(hù)端發(fā)送FINST1111服曾端ACKFIN1 L :游客戶(hù)端發(fā)送林:1/1Figure 1.一次完整的TCP通訊的過(guò)程1、建立連接TCP是面向連接的協(xié)議,客戶(hù)端和服務(wù)端要通訊就必須先建立一個(gè)連接。首 先通訊雙方都有地址,就是IP地址加端口號(hào)(IP:Port)標(biāo)識(shí)通訊的每一端,客 戶(hù)端的IP:Po
24、rt跟服務(wù)器IP:Port之間就構(gòu)成一個(gè)socket套接字。所謂建立連 接就是在客戶(hù)端的IP:Port跟服務(wù)器IP:Port之間建立一個(gè)通道 初始化一些通 訊的基礎(chǔ)設(shè)置,以便以后的數(shù)據(jù)通訊的正常進(jìn)行??蛻?hù)端發(fā)送SYN總是客戶(hù)端發(fā)起連接 首先客戶(hù)端發(fā)送SYN數(shù)據(jù)包到服務(wù)端以建立TCP連接,SYN數(shù)據(jù)包只有TCP包頭,沒(méi)有實(shí)際數(shù)據(jù)。Flags標(biāo)志字節(jié)的SYN位置位,表示是SYN數(shù)據(jù)包。Sequence number由客戶(hù)端隨機(jī)生成一個(gè)4字節(jié)的數(shù)據(jù),作為本次連接通訊 客戶(hù)端數(shù)據(jù)的起始順序號(hào),以后客戶(hù)端發(fā)往服務(wù)端的數(shù)據(jù)包的Sequence number 都在此基礎(chǔ)上加上每次傳送的實(shí)際數(shù)據(jù)長(zhǎng)度依次相加遞
25、增,這樣根據(jù)每個(gè)數(shù)據(jù)包 的Sequence number就能判斷出數(shù)據(jù)包的前后順序,以便接收方根據(jù)數(shù)據(jù)包的順 序拼接數(shù)據(jù)包。服務(wù)端回應(yīng)ACK、SYN服務(wù)端收到客戶(hù)端的SYN后,首先要發(fā)送一個(gè)ACK數(shù)據(jù)包給客戶(hù)端表示收到 了這個(gè)數(shù)據(jù)包。數(shù)據(jù)包的Flags標(biāo)志字節(jié)的ACK置位,表示是ACK回應(yīng)數(shù)據(jù)包。Acknowledgement number設(shè)置為接收到的數(shù)據(jù)包的SEQ +數(shù)據(jù)包實(shí)際長(zhǎng) 度,因?yàn)榻邮盏降腟YN的實(shí)際數(shù)據(jù)長(zhǎng)度為0,但是TCP協(xié)議認(rèn)為實(shí)際長(zhǎng)度為0的 主動(dòng)發(fā)送的數(shù)據(jù)長(zhǎng)度為1,SYN是客戶(hù)端主動(dòng)發(fā)送的數(shù)據(jù)包,所以服務(wù)端把Acknowledgement number設(shè)置為接收到的數(shù)據(jù)包的S
26、EQ + 1。TCP通訊可以是雙向的,一旦建立了連接,服務(wù)端也可以向客戶(hù)端發(fā)送數(shù)據(jù)。所以服務(wù)端也會(huì)向客戶(hù)端發(fā)送一個(gè)SYN包,數(shù)據(jù)包的Flags標(biāo)志字節(jié)的SYN 置位,表示是SYN數(shù)據(jù)包,同時(shí)隨機(jī)生成一個(gè)4字節(jié)的數(shù)據(jù),作為本次連接通訊 服務(wù)端數(shù)據(jù)的起始順序號(hào)Sequence number o實(shí)際中,服務(wù)端把這兩個(gè)數(shù)據(jù)包合并為一個(gè)數(shù)據(jù)包,SYN和ACK都是置位, Sequence number和Acknowledgement number也同時(shí)設(shè)置,作為一個(gè)數(shù)據(jù)包發(fā) 送回客戶(hù)端。客戶(hù)端回應(yīng)ACK客戶(hù)端收到服務(wù)端的SYN數(shù)據(jù)包后,需要回應(yīng)一個(gè)ACK數(shù)據(jù)包,表示接收到 此數(shù)據(jù)包。同樣ACK數(shù)據(jù)包的Ac
27、knowledgement number設(shè)置為接收到的數(shù)據(jù)包 的SEQ + 1(SYN、ACK數(shù)據(jù)包的實(shí)際數(shù)據(jù)長(zhǎng)度也是0)。2、相互收發(fā)數(shù)據(jù)通訊雙方建立了連接后,就可以相互進(jìn)行數(shù)據(jù)包的傳送。發(fā)送數(shù)據(jù)的一端,把數(shù)據(jù)包的Flags標(biāo)準(zhǔn)字節(jié)的PSH置位,表示是有實(shí)際數(shù) 據(jù)的數(shù)據(jù)包。Sequence number置為前一次的數(shù)據(jù)包的Sequence number加上前一次數(shù)據(jù) 包的長(zhǎng)度。如果數(shù)據(jù)包還兼做ACK包,則把ACK置位,同時(shí)設(shè)置好Acknowledgement number把數(shù)據(jù)包發(fā)送到對(duì)方。接收方收到對(duì)方主動(dòng)發(fā)送的數(shù)據(jù)數(shù)據(jù)包后,一定要回復(fù)ACK數(shù)據(jù)包,如果同 時(shí)有數(shù)據(jù)發(fā)往對(duì)方,可以把實(shí)際數(shù)據(jù)
28、包跟ACK數(shù)據(jù)包合在一起發(fā)送。在拆除連接之前,通訊雙方可以一直相互發(fā)送接收數(shù)據(jù),數(shù)據(jù)的順序都建立 在各自的Sequence number基礎(chǔ)上。圖1中,藍(lán)色部分的數(shù)據(jù)通訊就表示這一階段。3、拆除連接雙方數(shù)據(jù)交換完畢,需要拆除連接,結(jié)束通訊。3.1.客戶(hù)端發(fā)送FIN通訊的一方向另一方發(fā)送FIN數(shù)據(jù)包表示要結(jié)束通訊,拆除連接??蛻?hù)端把數(shù)據(jù)包的Flags標(biāo)準(zhǔn)字節(jié)的FIN置位,表示是通訊結(jié)束數(shù)據(jù)包。3.2.服務(wù)端返回ACK,F(xiàn)IN服務(wù)端收到客戶(hù)端的FIN數(shù)據(jù)包后,先回應(yīng)一個(gè)ACK數(shù)據(jù)包,然后也發(fā)送一 個(gè)FIN數(shù)據(jù)包,還是服務(wù)端也結(jié)束通訊??蛻?hù)端回應(yīng)ACK客戶(hù)端回應(yīng)ACK表示接收到服務(wù)端的FIN數(shù)據(jù),雙
29、方通訊結(jié)束。UDP報(bào)文結(jié)構(gòu)如下表:UDP源端口號(hào)(16位)UDP目標(biāo)端口號(hào)(16位UDP長(zhǎng)度(16位)UDP校驗(yàn)和(16位)數(shù)據(jù)區(qū)UDP協(xié)議不提供數(shù)據(jù)傳送的保證機(jī)制。如果在從發(fā)送方到接收方的傳遞過(guò)程中出現(xiàn)數(shù)據(jù)報(bào)的丟失,協(xié)議本身并不能做出任何檢測(cè)或提示。因此,通常人們把UDP協(xié)議稱(chēng)為不可靠的傳輸協(xié)議。但UDP協(xié)議擁有TCP協(xié)議望塵莫及的速度。主要應(yīng)用于視頻電話(huà)會(huì)議。ARP協(xié)議數(shù)據(jù)包:ARP,全稱(chēng)Address Resolution Protocol,中文名為地址解析協(xié)議,它工作在數(shù)據(jù)鏈路層,在本層和硬件接口聯(lián)系,同時(shí)對(duì)上層提供服務(wù)。IP數(shù)據(jù)包常通過(guò)以太網(wǎng)發(fā)送,以太網(wǎng)設(shè)備并不識(shí)別32位IP地址,它
30、們是以48位以太網(wǎng)地址傳輸以太網(wǎng)數(shù)據(jù)包。因此,必須把IP目的地址轉(zhuǎn)換成以太網(wǎng)目的地址。在以太網(wǎng)中,一個(gè)主機(jī)要和另一個(gè)主機(jī)進(jìn)行直接通信,必須要知道目標(biāo)主機(jī)的MAC地址。但這個(gè)目標(biāo)MAC地址是如何獲得的呢?它就是通過(guò)地址解析協(xié)議獲得的。ARP協(xié)議用于將網(wǎng)絡(luò)中的IP地址解析為的硬件地址(MAC地址),以保證通信的順利進(jìn)行。ARP和RARP報(bào)頭結(jié)構(gòu)ARP和RARP使用相同的報(bào)頭結(jié)構(gòu),如圖1所示。硬件類(lèi)型協(xié)議類(lèi)型硬件地址長(zhǎng)度J協(xié)議長(zhǎng)度操作類(lèi)型發(fā)送方的硬件地址字節(jié))4源物理地址(4-5字節(jié))4源IP地址(0-1字節(jié))4源IP地址(2-3字節(jié))目標(biāo)硬件地址ST字節(jié))目標(biāo)硬件地址字節(jié))目標(biāo)IP地址(0-3字節(jié)
31、)4(圖1 ARP/RARP報(bào)頭結(jié)構(gòu))?硬件類(lèi)型字段指明了發(fā)送方想知道的硬件接口類(lèi)型,以太網(wǎng)的值為1;?協(xié)議類(lèi)型字段指明了發(fā)送方提供的高層協(xié)議類(lèi)型,IP為0800(16進(jìn)制);?硬件地址長(zhǎng)度和協(xié)議長(zhǎng)度指明了硬件地址和高層協(xié)議地址的長(zhǎng)度,這樣ARP報(bào)文就可以在任意硬件和任意協(xié)議的網(wǎng)絡(luò)中使用;?操作字段用來(lái)表示這個(gè)報(bào)文的類(lèi)型,ARP請(qǐng)求為1,ARP響應(yīng)為2,RARP請(qǐng)求為3,RARP響應(yīng)為4;?發(fā)送方的硬件地址(0-3字節(jié)):源主機(jī)硬件地址的前3個(gè)字節(jié);?發(fā)送方的硬件地址(4-5字節(jié)):源主機(jī)硬件地址的后3個(gè)字節(jié);?發(fā)送方IP(0-1字節(jié)):源主機(jī)硬件地址的前2個(gè)字節(jié);?發(fā)送方IP(2-3字節(jié)):
32、源主機(jī)硬件地址的后2個(gè)字節(jié);?目的硬件地址(0-1字節(jié)):目的主機(jī)硬件地址的前2個(gè)字節(jié);?目的硬件地址(2-5字節(jié)):目的主機(jī)硬件地址的后4個(gè)字節(jié);?目的(0-3字節(jié)):目的主機(jī)的IP地址。ARP和RARP的工作原理ARP的工作原理如下:首先,每臺(tái)主機(jī)都會(huì)在自己的ARP緩沖區(qū)(ARP Cache)中建立一個(gè)ARP列表,以表示IP地址和MAC地址的對(duì)應(yīng)關(guān)系。當(dāng)源主機(jī)需要將一個(gè)數(shù)據(jù)包要發(fā)送到目的主機(jī)時(shí),會(huì)首先檢查自己ARP列表 中是否存在該IP地址對(duì)應(yīng)的MAC地址 如果有,就直接將數(shù)據(jù)包發(fā)送到這個(gè)MAC 地址;如果沒(méi)有,就向本地網(wǎng)段發(fā)起一個(gè)ARP請(qǐng)求的廣播包,查詢(xún)此目的主機(jī)對(duì) 應(yīng)的MAC地址。此A
33、RP請(qǐng)求數(shù)據(jù)包里包括源主機(jī)的IP地址、硬件地址、以及目的主機(jī)的IP地址。網(wǎng)絡(luò)中所有的主機(jī)收到這個(gè)ARP請(qǐng)求后,會(huì)檢查數(shù)據(jù)包中的目的IP是否和自 己的IP地址一致。如果不相同就忽略此數(shù)據(jù)包;如果相同,該主機(jī)首先將發(fā)送 端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已經(jīng)存在該IP 的信息,則將其覆蓋,然后給源主機(jī)發(fā)送一個(gè)ARP響應(yīng)數(shù)據(jù)包,告訴對(duì)方自己是它需要查找的MAC地址;源主機(jī)收到這個(gè)ARP響應(yīng)數(shù)據(jù)包后,將得到的目的主機(jī)的IP地址和MAC地址 添加到自己的ARP列表中,并利用此信息開(kāi)始數(shù)據(jù)的傳輸。如果源主機(jī)一直沒(méi)有收到ARP響應(yīng)數(shù)據(jù)包,表示ARP查詢(xún)失敗。RARP的工作原理如
34、下:發(fā)送主機(jī)發(fā)送一個(gè)本地的RARP廣播,在此廣播包中,聲明自己的MAC地址并且請(qǐng)求任何收到此請(qǐng)求的RARP服務(wù)器分配一個(gè)IP地址;本地網(wǎng)段上的RARP服務(wù)器收到此請(qǐng)求后,檢查其RARP列表,查找該MAC地址對(duì)應(yīng)的IP地址;如果存在,RARP服務(wù)器就給源主機(jī)發(fā)送一個(gè)響應(yīng)數(shù)據(jù)包并將此IP地址提供給對(duì)方主機(jī)使用;如果不存在,RARP服務(wù)器對(duì)此不做任何的響應(yīng);源主機(jī)收到從RARP服務(wù)器的響應(yīng)信息,就利用得到的IP地址進(jìn)行通訊;如果一直沒(méi)有收到RARP服務(wù)器的響應(yīng)信息,表示初始化失敗。#include pcap.h以太網(wǎng)頭結(jié)構(gòu)/目的主機(jī)物理地址源主機(jī)物理地址以太網(wǎng)幀類(lèi)型typedef struct et
35、h_headerunsigned char eth_dst6;unsigned char eth_src6;unsigned short eth_type;eth_header;/* 4字節(jié)的IP地址*/typedef struct ip_address u_char byte1;u_char byte2;u_char byte3;u_char byte4;ip_address;/版本(4 bits) +首部長(zhǎng)度(4 bits)/ 服務(wù)類(lèi)型(Type of service)/ 總長(zhǎng)(Total length)/* IPv4 首部 */ typedef struct ip_header u_ch
36、ar ver_ihl; u_char tos;u_short tlen;/ 標(biāo)志位(Flags) (3 bits) + 段偏移量(Fragment offset) (13 bits)/ 存活時(shí)間(Time to live)/ 協(xié)議(Protocol)/ 首部校驗(yàn)和(Header checksum)/ 源地址(Source address)/ 目的地址(Destination address)/ 選項(xiàng)與填充(Option + Padding)u_short identification; / 標(biāo)識(shí)(Identification) u_short flags_fo;u_char ttl;u_cha
37、r proto;u_short crc;ip_address saddr;ip_address daddr;u_int op_pad;ip_header;/* UDP 首部*/typedef struct udp_header(u_short sport;/ 源端口 (Source port)u_short dport;/ 目 的端口 (Destination port)u_short len;/ UDP 數(shù)據(jù)包長(zhǎng)度(Datagram length)u_short crc;/ 校驗(yàn)和(Checksum)udp_header;/*回調(diào)函數(shù)原型*/void packet_handler(u_cha
38、r *param, const struct pcap_pkthdr *header, const u_char *pkt_data);main()pcap_if_t *alldevs;pcap_if_t *d;int inum;int i=0;pcap_t *adhandle;char errbufPCAP_ERRBUF_SIZE;u_int netmask;char packet_filter = ip and udp;struct bpf_program fcode;/*獲得設(shè)備列表*/if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &
39、alldevs, errbuf) = -1) fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf);exit(1);/*打印列表*/for(d=alldevs; d; d=d-next)printf(%d. %s, +i, d-name); if (d-description)printf( (%s)n, d-description);elseprintf( (No description available)n);if(i=0)printf(nNo interfaces found! Make sure WinPcap is insta
40、lled.); return -1;printf(Enter the interface number (1-%d):,i);scanf(%d”, &inum);if(inum i)printf(nInterface number out of range.n);/*釋放設(shè)備列表*/pcap_freealldevs(alldevs);return -1;/*跳轉(zhuǎn)到已選設(shè)備*/for(d=alldevs, i=0; inext, i+);/*打開(kāi)適配器*/if ( (adhandle= pcap_open(d-name, / 設(shè)備名 65536,/要捕捉的數(shù)據(jù)包的部分/ 65535保證能捕獲到不
41、同數(shù)據(jù)鏈路層上的每 個(gè)數(shù)據(jù)包的全部?jī)?nèi)容PCAP_OPENFLAG_PROMISCUOUS,/ 混雜模式1000,/讀取超時(shí)時(shí)間NULL, /遠(yuǎn)程機(jī)器驗(yàn)證 errbuf /錯(cuò)誤緩沖池 )=NULL)fprintf(stderr,nUnable to open the adapter. %s is not supported by WinPcapn);/*釋放設(shè)備列表*/pcap_freealldevs(alldevs);return -1;/*檢查數(shù)據(jù)鏈路層,為了簡(jiǎn)單,我們只考慮以太網(wǎng)*/if(pcap_datalink(adhandle) != DLT_EN10MB)fprintf(stder
42、r,nThis program works only on Ethernet networks.n);/*釋放設(shè)備列表*/pcap_freealldevs(alldevs);return -1;if(d-addresses != NULL)/*獲得接口第一個(gè)地址的掩碼*/netmask=(struct sockaddr_in *)(d-addresses-netmask)-sin_addr.S_un.S_addr; else/*如果接口沒(méi)有地址,那么我們假設(shè)一個(gè)C類(lèi)的掩碼*/netmask=0 xffffff;編譯過(guò)濾器if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) 0 )fprintf(stderr,nUnable to compile the packet filte
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45227-2025化工園區(qū)封閉管理系統(tǒng)技術(shù)要求
- GB/T 45126-2025鋼渣碳酸化固定二氧化碳含量的測(cè)定方法
- 出攤貨架轉(zhuǎn)讓合同范本
- 農(nóng)村田地征用合同范本
- 臨時(shí)股合同范本
- 代課老師合同范本
- 冰箱采購(gòu)談判合同范本
- 半永久加盟合同范本
- 健身器合同范本
- 養(yǎng)殖鴿子合作合同范本
- 超市店長(zhǎng)考核方案(實(shí)例)
- 德力西質(zhì)量獎(jiǎng)自評(píng)報(bào)告組織概述
- 任務(wù)八-汽車(chē)四輪定位的檢測(cè)分析課件
- 自相矛盾課件(省一等獎(jiǎng))
- 小學(xué)數(shù)學(xué)思想方法(課件)
- 小學(xué)語(yǔ)文人教五年級(jí)下冊(cè)最閃亮的星課件
- 傷寒論講義陽(yáng)明病篇講解
- 菲斯特轉(zhuǎn)子秤的課件1
- 家譜吊線(xiàn)圖模板
- 天車(chē)維護(hù)與安全操作培訓(xùn)課件
- 焊工安全技術(shù)操作規(guī)程
評(píng)論
0/150
提交評(píng)論