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