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