日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

以太网,IP,TCP,UDP数据包分析【转】

發(fā)布時間:2025/5/22 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太网,IP,TCP,UDP数据包分析【转】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文地址:http://www.cnblogs.com/feitian629/archive/2012/11/16/2774065.html

1、ISO開放系統(tǒng)有以下幾層:

7

應(yīng)用層

6

表示層

5

會話層

4

傳輸層

3

網(wǎng)絡(luò)層

2

數(shù)據(jù)鏈路層

1

物理層

2、TCP/IP 網(wǎng)絡(luò)協(xié)議棧分為應(yīng)用層(Application)、傳輸層(Transport)、網(wǎng)絡(luò)層(Network)和鏈路層(Link)四層。

通信過程中,每層協(xié)議都要加上一個數(shù)據(jù)首部(header),稱為封裝(Encapsulation),如下圖所示

?

不同的協(xié)議層對數(shù)據(jù)包有不同的稱謂,在傳輸層叫做段(segment),在網(wǎng)絡(luò)層叫做數(shù)據(jù)報(datagram),在鏈路層叫做幀(frame)。數(shù)據(jù)封裝成幀后發(fā)到傳輸介質(zhì)上,到達目的主機后每層協(xié)議再剝掉相應(yīng)的首部,最后將應(yīng)用層數(shù)據(jù)交給應(yīng)用程序處理。

其實在鏈路層之下還有物理層,指的是電信號的傳遞方式,比如現(xiàn)在以太網(wǎng)通用的網(wǎng)線(雙絞線)、早期以太網(wǎng)采用的的同軸電纜(現(xiàn)在主要用于有線電視)、光纖等都屬于物理層的概念。

3、集線器(Hub)是工作在物理層的網(wǎng)絡(luò)設(shè)備,用于雙絞線的連接和信號中繼(將已衰減的信號再次放大使之傳得更遠)。

交換機是工作在鏈路層的網(wǎng)絡(luò)設(shè)備,可以在不同的鏈路層網(wǎng)絡(luò)之間轉(zhuǎn)發(fā)數(shù)據(jù)幀(比如十兆以太網(wǎng)和百兆以太網(wǎng)之間、以太網(wǎng)和令牌環(huán)網(wǎng)之間),由于不同鏈路層的幀格式不同,交換機要將進來的數(shù)據(jù)包拆掉鏈路層首部重新封裝之后再轉(zhuǎn)發(fā)。

路由器是工作在第三層的網(wǎng)絡(luò)設(shè)備,同時兼有交換機的功能,可以在不同的鏈路層接口之間轉(zhuǎn)發(fā)數(shù)據(jù)包,因此路由器需要將進來的數(shù)據(jù)包拆掉網(wǎng)絡(luò)層和鏈路層兩層首部并重新封裝。

4、?網(wǎng)絡(luò)層的IP 協(xié)議是構(gòu)成Internet 的基礎(chǔ)。IP 協(xié)議不保證傳輸?shù)目煽啃?#xff0c;數(shù)據(jù)包在傳輸過程中可能丟失,可靠性可以在上層協(xié)議或應(yīng)用程序中提供支持。

傳輸層可選擇TCP 或UDP 協(xié)議。TCP 是一種面向連接的、可靠的協(xié)議,有點像打電話,雙方拿起電話互通身份之后就建立了連接,然后說話就行了,這邊說的話那邊保證聽得到,并且是按說話的順序聽到的,說完話掛機斷開連接。也就是說TCP 傳輸?shù)碾p方需要首先建立連接,之后由TCP 協(xié)議保證數(shù)據(jù)收發(fā)的可靠性,丟失的數(shù)據(jù)包自動重發(fā),上層應(yīng)用程序收到的總是可靠的數(shù)據(jù)流,通訊之后關(guān)閉連接。UDP 協(xié)議不面向連接,也不保證可靠性,有點像寄信,寫好信放到郵筒里,既不能保證信件在郵遞過程中不會丟失,也不能保證信件是按順序寄到目的地的。使用UDP 協(xié)議的應(yīng)用程序需要自己完成丟包重發(fā)、消息排序等工作。

5、 數(shù)據(jù)傳輸經(jīng)過的各層協(xié)議過程如下

?

以太網(wǎng)驅(qū)動程序首先根據(jù)以太網(wǎng)首部中的“上層協(xié)議”字段確定該數(shù)據(jù)幀的有效載荷(payload,指除去協(xié)議首部之外實際傳輸?shù)臄?shù)據(jù))是IP、ARP 還是RARP 協(xié)議的數(shù)據(jù)報,然后交給相應(yīng)的協(xié)議處理。假如是IP 數(shù)據(jù)報,IP 協(xié)議再根據(jù)IP 首部中的“上層協(xié)議”字段確定該數(shù)據(jù)報的有效載荷是TCP、UDP、ICMP 還是IGMP,然后交給相應(yīng)的協(xié)議處理。假如是TCP 段或UDP段,TCP 或UDP 協(xié)議再根據(jù)TCP 首部或UDP 首部的“端口號”字段確定應(yīng)該將應(yīng)用層數(shù)據(jù)交給哪個用戶進程。IP 地址是標識網(wǎng)絡(luò)中不同主機的地址,而端口號就是同一臺主機上標識不同進程的地址,IP 地址和端口號合起來標識網(wǎng)絡(luò)中唯一的進程。

雖然IP、ARP 和RARP 數(shù)據(jù)報都需要以太網(wǎng)驅(qū)動程序來封裝成幀,但是從功能上劃分,ARP 和RARP 屬于鏈路層,IP 屬于網(wǎng)絡(luò)層。雖然ICMP、IGMP、TCP、UDP 的數(shù)據(jù)都需要IP 協(xié)議來封裝成數(shù)據(jù)報,但是從功能上劃分,ICMP、IGMP 與IP 同屬于網(wǎng)絡(luò)層,TCP 和UDP屬于傳輸層。

6、以太網(wǎng)幀格式

?

(1)其中的源地址和目的地址是指網(wǎng)卡的硬件地址(也叫MAC 地址),長度是48 位,是在網(wǎng)卡出廠時固化的。

(2)注意網(wǎng)卡芯片(例如DM9000A)收到的數(shù)據(jù)就是如上所示的一長串數(shù)據(jù);其中包括以太網(wǎng)幀頭、IP報報頭、傳輸層協(xié)議段頭、應(yīng)用層所需數(shù)據(jù)。

(3)以太網(wǎng)幀中的數(shù)據(jù)長度規(guī)定最小46 字節(jié),最大1500 字節(jié),ARP 和RARP 數(shù)據(jù)包的長度不夠46 字節(jié),要在后面補填充位。最大值1500 稱為以太網(wǎng)的最大傳輸單元(MTU),不同的網(wǎng)絡(luò)類型有不同的MTU,如果一個數(shù)據(jù)包從以太網(wǎng)路由到撥號鏈路上,數(shù)據(jù)包度大于撥號鏈路的MTU了,則需要對數(shù)據(jù)包進行分片fragmentation)。ifconfig 命令的輸出中也有“MTU:1500”。注意,MTU 個概念指數(shù)據(jù)幀中有效載荷的最大長度,不包括幀首部的長度。

7、IP數(shù)據(jù)報格式

IPv4:

?

IP 數(shù)據(jù)報的首部長度和數(shù)據(jù)長度都是可變長的,但總是4 字節(jié)的整數(shù)倍。對于IPv4,4 位版本字段是4。4 位首部長度的數(shù)值是以4 字節(jié)為單位的,最小值為5,也就是說首部長度最小是4x5=20 字節(jié),也就是不帶任何選項的IP 首部,4 位能表示的最大值是15,也就是說首部長度最大是60 字節(jié)。8 位TOS 字段有3 個位用來指定IP 數(shù)據(jù)報的優(yōu)先級(目前已經(jīng)廢棄不用),還有4 個位表示可選的服務(wù)類型(最小延遲、最大呑吐量、最大可靠性、最小成本),還有一個位總是0。總長度是整個數(shù)據(jù)報(包括IP 首部和IP 層payload)的字節(jié)數(shù)。每傳一個IP 數(shù)據(jù)報,16 位的標識加1,可用于分片和重新組裝數(shù)據(jù)報。3 位標志和13 位片偏移用于分片。TTL(Time to live)是這樣用的:源主機為數(shù)據(jù)包設(shè)定一個生存時間,比如64,每過一個路由器就把該值減1,如果減到0 就表示路由已經(jīng)太長了仍然找不到目的主機的網(wǎng)絡(luò),就丟棄該包,因此這個生存時間的單位不是秒,而是跳(hop)。協(xié)議字段指示上層協(xié)議是TCP、UDP、ICMP 還是IGMP。然后是校驗和,只校驗IP 首部,數(shù)據(jù)的校驗由更高層協(xié)議負責(zé)。IPv4的IP 地址長度為32 位。

8、UDP段格式

UDP 協(xié)議不面向連接,也不保證傳輸?shù)目煽啃浴?/p>

9、TCP段格式

?

?

(1)序號:指出段中的數(shù)據(jù)部分在發(fā)送方數(shù)據(jù)流中的位置。

確認號:指出接收方希望收到對方下次發(fā)送的數(shù)據(jù)的第一個字節(jié)的序號。

TCP段首部的定長部分為20個字節(jié),即5個單位的長度。

URG位:緊急標志,和緊急指針配合使用,當其為1時表示,此報文要盡快傳送。

ACK位:確認標志,和確認號字段配合使用,當ACK位置1時,確認號字段有效。

PSH位:為推送標志,置1時,發(fā)送方將立即發(fā)送緩沖區(qū)中的數(shù)據(jù)。

RST位:復(fù)位標志,置1時,表明有嚴重差錯,必須釋放連接。

SYN位: 同步標志,置1時,表示請求建立連接。

FIN位:終止標志,置1時,表明數(shù)據(jù)已經(jīng)發(fā)送完,請求釋放連接。

窗口大小:32bit,用于向?qū)Ψ酵ǜ娈斍氨緳C的接受緩沖區(qū)的大小。

校驗和字段長度:16bit,校驗范圍包括段首部、數(shù)據(jù)以及偽首部。

(2)TCP數(shù)據(jù)傳輸過程

?

(3)TCP連接的建立

建立連接的過程:

【1】. 客戶端發(fā)出段1,SYN 位表示連接請求。序號是1000,這個序號在網(wǎng)絡(luò)通訊中用作臨時的地址,每發(fā)一個數(shù)據(jù)字節(jié),這個序號要加1,這樣在接收端可以根據(jù)序號排出數(shù)據(jù)包的正確順序,也可以發(fā)現(xiàn)丟包的情況,另外,規(guī)定SYN 位和FIN 位也要占一個序號,這次雖然沒發(fā)數(shù)據(jù),但是由于發(fā)了SYN 位,因此下次再發(fā)送應(yīng)該用序號1001。mss表示最大段尺寸,如果一個段太大,封裝成幀后超過了鏈路層的最大幀長度,就必須在IP 層分片,為了避免這種情況,客戶端聲明自己的最大段尺寸,建議服務(wù)器端發(fā)來的段不要超過這個長度。

【2】 服務(wù)器發(fā)出段2,也帶有SYN 位,同時置ACK 位表示確認,確認序號是1001,表示“我接收到序號1000 及其以前所有的段,請你下次發(fā)送序號為1001 的段”,也就是應(yīng)答了客戶端的連接請求,同時也給客戶端發(fā)出一個連接請求,同時聲明最大尺寸為1024。

【3】 客戶端發(fā)出段3,對服務(wù)器的連接請求進行應(yīng)答,確認序號是8001。

在這個過程中,客戶端和服務(wù)器分別給對方發(fā)了連接請求,也應(yīng)答了對方的連接請求,其中服務(wù)器的請求和應(yīng)答在一個段中發(fā)出,因此一共有三個段用于建立連接,稱為'''三方握手(three-way-handshake)'''。在建立連接的同時,雙方協(xié)商了一些信息,例如雙方發(fā)送序號的初始值、最大段尺寸等。

(4)TCP數(shù)據(jù)傳輸過程

【1】? 客戶端發(fā)出段4,包含從序號1001 開始的20 個字節(jié)數(shù)據(jù)。

【2】? 服務(wù)器發(fā)出段5,確認序號為1021,對序號為1001-1020 的數(shù)據(jù)表示確認收到,同時請求發(fā)送序號1021 開始的數(shù)據(jù),服務(wù)器在應(yīng)答的同時也向客戶端發(fā)送從序號8001 開始的10 個字節(jié)數(shù)據(jù),這稱為piggyback。

【3】? 客戶端發(fā)出段6,對服務(wù)器發(fā)來的序號為8001-8010 的數(shù)據(jù)表示確認收到,請求發(fā)送序號8011 開始的數(shù)據(jù)。

在數(shù)據(jù)傳輸過程中,ACK 和確認序號是非常重要的,應(yīng)用程序交給TCP 協(xié)議發(fā)送的數(shù)據(jù)會暫存在TCP 層的發(fā)送緩沖區(qū)中,發(fā)出數(shù)據(jù)包給對方之后,只有收到對方應(yīng)答的ACK 段才知道該數(shù)據(jù)包確實發(fā)到了對方,可以從發(fā)送緩沖區(qū)中釋放掉了,如果因為網(wǎng)絡(luò)故障丟失了數(shù)據(jù)包或者丟失了對方發(fā)回的ACK 段,經(jīng)過等待超時后TCP 協(xié)議自動將發(fā)送緩沖區(qū)中的數(shù)據(jù)包重發(fā)。

(5)TCP連接的關(guān)閉

【1】? 客戶端發(fā)出段7,FIN 位表示關(guān)閉連接的請求。

【2】? 服務(wù)器發(fā)出段8,應(yīng)答客戶端的關(guān)閉連接請求。

【3】? 服務(wù)器發(fā)出段9,其中也包含F(xiàn)IN 位,向客戶端發(fā)送關(guān)閉連接請求。

【4】? 客戶端發(fā)出段10,應(yīng)答服務(wù)器的關(guān)閉連接請求。

建立連接的過程是三方握手,而關(guān)閉連接通常需要4 個段(四次握手),服務(wù)器的應(yīng)答和關(guān)閉連接請求通常不合并在一個段中,因為有連接半關(guān)閉的情況,這種情況下客戶端關(guān)閉連接之后就不能再發(fā)送數(shù)據(jù)給服務(wù)器了,但是服務(wù)器還可以發(fā)送數(shù)據(jù)給客戶端,直到服務(wù)器也關(guān)閉連接為止,稍后會看到這樣的例子。

10、DM9000A實驗數(shù)據(jù)總結(jié)

DM9000A收到上位機TCP的數(shù)據(jù)包packet[ ]如下

(0x01,0x60,0x6E,0x11,

0x02,0x0F,0xE0,0x05,

0xC5,0xF3,0x29,0x00,

0x08,0x00,0x45,0x00,

0x00,0x40,0x28,0x03,

0x40,0x00,0x40,0x06,

0x91,0x5D,0xC0,0xA8,

0x00,0x04,0xC0,0xA8,

0x00,0x03,0x0C,0x72,

0x04,0x00,0xA8,0x85,

0x77,0x60,0x00,0x00,

0x00,0x00,0xB0,0x02,

0xFF,0xFF,0x84,0x51,

0x00,0x00,0x02,0x04,

0x05,0xB4,0x01,0x03,

0x03,0x00,0x01,0x01,

0x08,0x0A,0x00,0x00,

0x00,0x00,0x00,0x00,

0x00,0x00,0x01,0x01,

0x04,0x02,0xD8,0x9C,

0x05,0xA6,)

具體分析如下:

這個包結(jié)構(gòu)為:以太網(wǎng)幀頭 + IP數(shù)據(jù)報 + TCP/UDP數(shù)據(jù)包;

0x01,0x60,0x6E,0x11,0x02,0x0F, 為目的物理地址;packet[0] ~ packet[5]。

0xE0,0x05,0xC5,0xF3,0x29,0x00,為源物理地址;packet[6] ~ packet[11]。

0x08,0x00:協(xié)議類型,0800為IP;packet[12] 、packet[13]。

0x45:版本號和首部長度;packet[14];

0x00:TOS;packet[15];

0x00,0x40:16位總長度;packet[16] packet[17];;

0x28,0x03:16位標識;packet[18]~ packet[19];

0x40,0x00 : 3位標志 + 13位片偏移;packet[20] packet[21];;

?0x40,:8位的生存時間TTL;packet[22];

0x06:8位的協(xié)議號;packet[23];

(ICMP:1;IGMP:2;TCP:6;EGP:8;UDP:17;)

0x91,0x5D:首部校驗和;packet[24];packet[25];

0xC0,0xA8,0x00,0x04:源IP地址;packet[26]~packet[29];

0xC0,0xA8,0x00,0x04:目的IP地址;packet[30]~packet[33];

選項(無);

0x0c,0x72:源端口;packet[34],packet[35];

0x04,0x00;目的端口;pcket[36],packet[37];

0xa8,0x85,0x77,0x60:序號;packet[38] ~ packet[41];

0x00,0x00,0x00,0x00:確認號;packet[42]~packet[45];

0Xb0,0x02:(HLEN,保留6bit,URG,ACK,PSH,PST,SYN,FIN);packet[46]~packet[47];

0Xff,0xff:窗口大小;packet[48],packet[49];

0x84,0x51:校驗和;packet[50],packet[51];

0x00,0x00:緊急指針;packet[52],packet[53];

…………

最后還用4字節(jié)的CRC;屬于以太網(wǎng)幀。

轉(zhuǎn)載于:https://www.cnblogs.com/the-tops/p/7510848.html

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的以太网,IP,TCP,UDP数据包分析【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。