一、以太網(wǎng)鏈路層協(xié)議封裝格式
以太網(wǎng)數(shù)據(jù)在網(wǎng)絡(luò)介質(zhì)上傳輸需要遵循一定的機(jī)制,其中CSMA/CD介質(zhì)訪問(wèn)控制機(jī)制約定了以太網(wǎng)在傳輸數(shù)據(jù)時(shí),兩幀之間需要等待一個(gè)幀間隙時(shí)間(IFG或IPG),為以太網(wǎng)接口提供了幀接收之間的恢復(fù)時(shí)間,該恢復(fù)時(shí)間最小值為傳輸96bit所花費(fèi)的時(shí)間,對(duì)于10M線路,該時(shí)間為9.6uS,100M線路為960nS,1G的線路為96nS。同時(shí)以太網(wǎng)數(shù)據(jù)幀在傳輸時(shí)還需要有7byte的前導(dǎo)字段和1byte的定界符。因此以太網(wǎng)數(shù)據(jù)在傳輸過(guò)程中是由以下部分組成的:7byte(前導(dǎo))+1byte(定界符)+以太網(wǎng)數(shù)據(jù)幀+12byte(IPG)。
在全雙工工作模式下,如果CSMA/CD介質(zhì)訪問(wèn)控制機(jī)制發(fā)現(xiàn)傳輸沖突時(shí),則會(huì)放棄當(dāng)前幀發(fā)送,改為發(fā)送一個(gè)48比特的噪聲幀。
其中以太網(wǎng)數(shù)據(jù)幀限制為最小長(zhǎng)度為64byte,最大長(zhǎng)度為1518byte,其格式為:6byte(目的MAC地址)+6byte(源MAC地址)+2byte(類型字段)+數(shù)據(jù)字段+4byte(FCS校驗(yàn)字段)。其中幀類型字段標(biāo)識(shí)其后的數(shù)據(jù)類型。
這里值得注意的是區(qū)分Ethernet II幀格式和802.3幀格式的不同,我們有時(shí)可能會(huì)混用了這兩個(gè)術(shù)語(yǔ)。
Ethernet II幀是最常見(jiàn)的一種以太網(wǎng)幀格式,也是今天以太網(wǎng)的事實(shí)標(biāo)準(zhǔn),由DEC,Intel和Xerox在1982年公布標(biāo)準(zhǔn),Ethernet II可以支持TCP/IP,Novell IPX/SPX,Apple Talk Phase I等協(xié)議,其比較常見(jiàn)的類型字段為:0X0800(IP幀),0X0806(ARP請(qǐng)求/應(yīng)答幀),0X8035(PARP請(qǐng)求/應(yīng)答幀),0X8137(Novell IPX),0X809b(Apple Talk)。RFC 894定義了IP報(bào)文在Ethernet II上的封裝格式。
802.3幀將Ethernet II幀頭中的類型字段替換為幀長(zhǎng)度字段(取值范圍為0X0000-0X05dc,不包括CRC檢驗(yàn)碼),因此對(duì)于接收到的幀,如果類型字段取值范圍為0X0000-0X05dc,則可以判斷其為802.3幀,而非Ethernet II幀。其中RAW 802.3是1983年Novell發(fā)布Netware/86網(wǎng)絡(luò)套件時(shí)采用的私有以太網(wǎng)幀格式,只支持IPX/SPX一種協(xié)議;802.3/802.2 LLC是IEEE 公布的正式802.3標(biāo)準(zhǔn),它加入了3byte的LLC字段, 其中SAP值用以標(biāo)志上層應(yīng)用,每個(gè)SAP字段為8bits,其中只有6bit用于標(biāo)識(shí)上層協(xié)議,因此所能標(biāo)識(shí)的協(xié)議數(shù)不超過(guò)32種,導(dǎo)致802.3/802.2 LLC的使用有很大局限性;802.3/802.2 SNAP是IEEE為保證在802.2 LLC上支持更多的上層協(xié)議同時(shí)更好的支持IP協(xié)議而發(fā)布的標(biāo)準(zhǔn),在802.3/802.2 LLC基礎(chǔ)上添加了5byte的SNAP字段,從而使其可以標(biāo)識(shí)更多的上層協(xié)議類型,OUI字段用于代表不同的組織(一般置為0),在802.3/802.2 SNAP基礎(chǔ)上RFC1042定義了IP報(bào)文在802.2網(wǎng)絡(luò)中的封裝方法和ARP協(xié)議在802.2 SANP中的實(shí)現(xiàn)。
目前實(shí)際環(huán)境中大多數(shù)TCP/IP設(shè)備都使用Ethernet II格式的幀,它采用了RFC 894的實(shí)現(xiàn)標(biāo)準(zhǔn)。從上述幀格式中可以看出,Ethernet II格式幀數(shù)據(jù)段的長(zhǎng)度限制在46byte-1500byte之間,當(dāng)數(shù)據(jù)段長(zhǎng)度小于46個(gè)字節(jié)時(shí),加填充字段(PAD)補(bǔ)足。Ethernet II和802.3對(duì)數(shù)據(jù)幀的長(zhǎng)度限制,其最大值分別是1500和1492字節(jié),這一特性稱作最大傳輸單元(MTU)。
圖 IEEE802.2/802.3(RFC1042)和Ethernet II(RFC894)的封裝格式
在TCP/IP協(xié)議族中,鏈路層主要有三個(gè)目的:(1)為IP模塊發(fā)送和接收IP數(shù)據(jù)報(bào);(2)為ARP模塊發(fā)送ARP請(qǐng)求和接收ARP應(yīng)答;(3)為RARP發(fā)送RARP請(qǐng)求和接收RARP應(yīng)答。
二、以太網(wǎng)IP層協(xié)議封裝格式
在TCP/IP協(xié)議族中基于鏈路層以上的協(xié)議主要有三種:IP協(xié)議、ARP協(xié)議和RARP協(xié)議,其中在IP數(shù)據(jù)報(bào)中又額外封裝了ICMP協(xié)議和IGMP協(xié)議。IP層協(xié)議也就是通常的網(wǎng)絡(luò)層協(xié)議,它提供點(diǎn)到點(diǎn)的服務(wù)(不同于傳輸層TCP/UDP協(xié)議提供端到端的服務(wù))。
IP包封裝格式
版本號(hào):IP包的版本,當(dāng)前一般為IPv4,即0100。
首部長(zhǎng)度:IP包頭長(zhǎng)度(Internet Header Length,IHL),是一個(gè)4bit字段,是頭部占32比特的數(shù)字,包括可選項(xiàng)。普通IP數(shù)據(jù)報(bào)(沒(méi)有任何選項(xiàng)),該字段的值是5,即160比特=20字節(jié)。此字段最大值為60字節(jié),表示頭部報(bào)文中沒(méi)有發(fā)送可選部分?jǐn)?shù)據(jù)。
服務(wù)類型(TOS):其中前3比特為優(yōu)先權(quán)子字段(Precedence,現(xiàn)已被忽略)。第8比特保留未用。第4至第7比特分別代表延遲、吞吐量、可靠性和花費(fèi)。當(dāng)它們?nèi)≈禐?時(shí)分別代表要求最小時(shí)延、最大吞吐量、最高可靠性和最小費(fèi)用。這4比特的服務(wù)類型中只能置其中1比特為1??梢匀珵?,若全為0則表示一般服務(wù)。服務(wù)類型字段聲明了數(shù)據(jù)報(bào)被網(wǎng)絡(luò)系統(tǒng)傳輸時(shí)可以被怎樣處理。例如:TELNET協(xié)議可能要求有最小的延遲,F(xiàn)TP協(xié)議(數(shù)據(jù))可能要求有最大吞吐量,SNMP協(xié)議可能要求有最高可靠性,NNTP(Network News Transfer Protocol,網(wǎng)絡(luò)新聞傳輸協(xié)議)可能要求最小費(fèi)用,而ICMP協(xié)議可能無(wú)特殊要求(4比特全為0)。實(shí)際上,大部分主機(jī)會(huì)忽略這個(gè)字段,但一些動(dòng)態(tài)路由協(xié)議如OSPF(Open Shortest Path First Protocol)、IS-IS(Intermediate System to Intermediate System Protocol)可以根據(jù)這些字段的值進(jìn)行路由決策。
總長(zhǎng)度:頭部及數(shù)據(jù)項(xiàng)長(zhǎng)度,最大長(zhǎng)度為65535bytes。
標(biāo)識(shí):當(dāng)IP包較大需要進(jìn)行分段時(shí),用于標(biāo)識(shí)該段所屬的分組。通常每發(fā)一份報(bào)文,它的值會(huì)加1。
標(biāo)志:構(gòu)成為[0][D][M],其中D為1表示不分段,M為0表示為最后分段,為1表示非最后分段。
片偏移:即分段偏移。如果一份數(shù)據(jù)報(bào)要求分段的話,此字段指明該段偏移距原始數(shù)據(jù)報(bào)開(kāi)始的位置。
生存時(shí)間(TTL):表示一個(gè)IP數(shù)據(jù)流的生命周期,由發(fā)送數(shù)據(jù)的源主機(jī)設(shè)置,通常為32、64、128等。每次IP數(shù)據(jù)包經(jīng)過(guò)一個(gè)路由器的時(shí)候TTL就減一,當(dāng)減到0時(shí),這個(gè)數(shù)據(jù)包就消亡了。
協(xié)議:傳輸層的協(xié)議類型。
首部校驗(yàn)和:根據(jù)IP頭部計(jì)算得到的校驗(yàn)和碼。計(jì)算方法是:對(duì)頭部中每個(gè)16比特進(jìn)行二進(jìn)制反碼求和。(和ICMP、IGMP、TCP、UDP不同,IP不對(duì)頭部后的數(shù)據(jù)進(jìn)行校驗(yàn))。
選項(xiàng):占32比特。用來(lái)定義一些任選項(xiàng):如記錄路徑、時(shí)間戳等。這些選項(xiàng)很少被使用,同時(shí)并不是所有主機(jī)和路由器都支持這些選項(xiàng)??蛇x項(xiàng)字段的長(zhǎng)度必須是32比特的整數(shù)倍,如果不足,必須填充0以達(dá)到此長(zhǎng)度要求。
數(shù)據(jù):IP包攜帶的各種傳輸層報(bào)文。
IP報(bào)文頭部實(shí)例:45 00 00 30 52 52 40 00 80 06 2c 23 c0 a8 01 01 d8 03 e2 15
三、傳輸層協(xié)議封裝格式
1.TCP協(xié)議
TCP是一種可靠的、面向連接的字節(jié)流服務(wù)。源主機(jī)在傳送數(shù)據(jù)前需要先和目標(biāo)主機(jī)建立連接。然后,在此連接上,被編號(hào)的數(shù)據(jù)段按序收發(fā)。同時(shí),要求對(duì)每個(gè)數(shù)據(jù)段進(jìn)行確認(rèn),保證了可靠性。如果在指定的時(shí)間內(nèi)沒(méi)有收到目標(biāo)主機(jī)對(duì)所發(fā)數(shù)據(jù)段的確認(rèn),源主機(jī)將再次發(fā)送該數(shù)據(jù)段。
TCP包封裝格式
源、目標(biāo)端口號(hào)字段:占16比特。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)地為客戶端的應(yīng)用程序分配端口號(hào)。在服務(wù)器端,每種服務(wù)在"眾所周知的端口"(Well-Know Port)為用戶提供服務(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é)。
數(shù)據(jù)偏移量:實(shí)際上是TCP首部長(zhǎng)度,用來(lái)標(biāo)識(shí)數(shù)據(jù)段的起始位置。給出頭部占32比特的數(shù)目。沒(méi)有任何選項(xiàng)字段的TCP頭部長(zhǎng)度為20字節(jié);最多可以有60字節(jié)的TCP頭部。
控制標(biāo)識(shí)(U、A、P、R、S、F)::TCP協(xié)議中的六個(gè)重要的標(biāo)志。是兩個(gè)計(jì)算機(jī)數(shù)據(jù)交流的信息標(biāo)志。接收和發(fā)送斷根據(jù)這些標(biāo)志來(lái)確定信息流的種類。
URG:(Urgent Pointer field significant)緊急指針。用到的時(shí)候值為1,用來(lái)處理避免TCP數(shù)據(jù)流中斷。
ACK:(Acknowledgment fieldsignificant)置1時(shí)表示確認(rèn)號(hào)(AcknowledgmentNumber)為合法,為0的時(shí)候表示數(shù)據(jù)段不包含確認(rèn)信息,確認(rèn)號(hào)被忽略。
PSH:(Push Function),PUSH標(biāo)志的數(shù)據(jù),置1時(shí)請(qǐng)求的數(shù)據(jù)段在接收方得到后就可直接送到應(yīng)用程序,而不必等到緩沖區(qū)滿時(shí)才傳送。
RST:(Reset the connection)用于復(fù)位因某種原因引起出現(xiàn)的錯(cuò)誤連接,也用來(lái)拒絕非法數(shù)據(jù)和請(qǐng)求。如果接收到RST位時(shí)候,通常發(fā)生了某些錯(cuò)誤。
SYN:(Synchronize sequence numbers)用來(lái)建立連接,在連接請(qǐng)求中,SYN=1,ACK=0,連接響應(yīng)時(shí),SYN=1,ACK=1。即,SYN和ACK來(lái)區(qū)分Connection Request和Connection Accepted。
FIN:(No more data from sender)用來(lái)釋放連接,表明發(fā)送方已經(jīng)沒(méi)有數(shù)據(jù)發(fā)送了。
滑動(dòng)窗口:控制報(bào)文流量,用來(lái)告訴對(duì)方目前接收端緩沖器大小。當(dāng)為0時(shí)標(biāo)識(shí)緩沖器已滿,需要停止發(fā)包,單位為byte。
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協(xié)議頭部實(shí)例:0d 28 00 15 50 5f a9 06 00 00 00 00 70 02 40 00 c0 29 00 00
TCP建立連接的三次握手過(guò)程
TCP會(huì)話通過(guò)三次握手來(lái)初始化。三次握手的目標(biāo)是使數(shù)據(jù)段的發(fā)送和接收同步。同時(shí)也向其他主機(jī)表明其一次可接收的數(shù)據(jù)量(窗口大小),并建立邏輯連接。這三次握手的過(guò)程可以簡(jiǎn)述如下:
1、源主機(jī)發(fā)送一個(gè)同步標(biāo)志位(SYN)置1的TCP數(shù)據(jù)段。此段中同時(shí)標(biāo)明初始序號(hào)(Initial Sequence Number,ISN)。ISN是一個(gè)隨時(shí)間變化的隨機(jī)值。
2、目標(biāo)主機(jī)發(fā)回確認(rèn)數(shù)據(jù)段,此段中的同步標(biāo)志位(SYN)同樣被置1,且確認(rèn)標(biāo)志位(ACK)也置1,同時(shí)在確認(rèn)序號(hào)字段表明目標(biāo)主機(jī)期待收到源主機(jī)下一個(gè)數(shù)據(jù)段的序號(hào)(即表明前一個(gè)數(shù)據(jù)段已收到并且沒(méi)有錯(cuò)誤)。此外,此段中還包含目標(biāo)主機(jī)的段初始序號(hào)。
3、源主機(jī)再回送一個(gè)數(shù)據(jù)段,同樣帶有遞增的發(fā)送序號(hào)和確認(rèn)序號(hào)。
至此為止,TCP會(huì)話的三次握手完成。接下來(lái),源主機(jī)和目標(biāo)主機(jī)可以互相收發(fā)數(shù)據(jù)。
2.UDP協(xié)議
UDP是一種不可靠的、無(wú)連接的數(shù)據(jù)報(bào)服務(wù)。源主機(jī)在傳送數(shù)據(jù)前不需要和目標(biāo)主機(jī)建立連接。數(shù)據(jù)被冠以源、目標(biāo)端口號(hào)等UDP報(bào)頭字段后直接發(fā)往目的主機(jī)。這時(shí),每個(gè)數(shù)據(jù)段的可靠性依靠上層協(xié)議來(lái)保證。在傳送數(shù)據(jù)較少、較小的情況下,UDP比TCP更加高效。
UDP包封裝格式
源、目標(biāo)端口號(hào)字段:16比特。作用與TCP數(shù)據(jù)段中的端口號(hào)字段相同,用來(lái)標(biāo)識(shí)源端和目標(biāo)端的應(yīng)用進(jìn)程。
長(zhǎng)度字段:占16比特。標(biāo)明UDP頭部和UDP數(shù)據(jù)的總長(zhǎng)度字節(jié)。
校驗(yàn)和字段:占16比特。用來(lái)對(duì)UDP頭部和UDP數(shù)據(jù)進(jìn)行校驗(yàn)。和TCP不同的是,對(duì)UDP來(lái)說(shuō),此字段是可選項(xiàng),而TCP數(shù)據(jù)段中的校驗(yàn)和字段是必須有的。
-
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5465瀏覽量
172822 -
封裝
+關(guān)注
關(guān)注
127文章
8008瀏覽量
143460
原文標(biāo)題:今日分享:以太網(wǎng)協(xié)議封裝格式
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
![](https://file1.elecfans.com/web3/M00/00/FE/wKgZO2dPxYCAUskxAAONJbR5FIY763.jpg)
以太網(wǎng)和TCP/IP的關(guān)系解析
以太網(wǎng)協(xié)議的種類和特點(diǎn)
以太網(wǎng)幀格式和功能詳解
以太網(wǎng)幀結(jié)構(gòu)是怎樣的
以太網(wǎng)端口的類型和特性
什么是工業(yè)以太網(wǎng)?有何特點(diǎn)?
工業(yè)以太網(wǎng)和普通以太網(wǎng)區(qū)別在哪
工業(yè)以太網(wǎng)的主要協(xié)議及其特點(diǎn)
![](https://file1.elecfans.com/web2/M00/EA/91/wKgZomZZNV6ABmUHAALQaX4H-ZI635.jpg)
車載以太網(wǎng)硬件接口VN5620設(shè)備展示與介紹#車載以太網(wǎng)
![](https://file1.elecfans.com/web2/M00/E5/38/wKgaomY_QQqANHQTAADb2CrD2i8864.jpg)
PLC以太網(wǎng)開(kāi)放式通信概述
![PLC<b class='flag-5'>以太網(wǎng)</b>開(kāi)放式通信概述](https://file1.elecfans.com/web2/M00/C8/B2/wKgZomYd-dqAXWVGAAAbhJr2118225.jpg)
FPGA學(xué)習(xí)-以太網(wǎng)的原理介紹
![FPGA學(xué)習(xí)-<b class='flag-5'>以太網(wǎng)</b>的原理<b class='flag-5'>介紹</b>](https://file1.elecfans.com/web2/M00/C6/B4/wKgZomYLwYeAelu4AAArXhNuRO0933.png)
工業(yè)以太網(wǎng)的基本原理及優(yōu)勢(shì)
以太網(wǎng)怎么連接 以太網(wǎng)組網(wǎng)結(jié)構(gòu)分析
![<b class='flag-5'>以太網(wǎng)</b>怎么連接 <b class='flag-5'>以太網(wǎng)</b>組網(wǎng)結(jié)構(gòu)分析](https://file1.elecfans.com/web2/M00/C3/63/wKgZomXq2GeAQOWPAABCZuM0CiY485.png)
評(píng)論