❶ 數據包,數據報文,數據幀之間的關系
一、數據幀(Frame):數據鏈路層,傳遞的單位是frame 幀,就是數據鏈路層的協議數據單元,包括三部分
1、幀頭,裡面有mac地址,通過這個地址可以在底層的交換機這個層面里順著網線找到你的計算機。
2、數據部分,ip數據包,意思是使用ip地址定位的一個數據包。
3、幀尾。其中,幀頭和幀尾包含一些必要的控制信息,比如同步信息、地址信息、差錯控制信息等;數據部分則包含網路層傳下來的數據,比如ip數據包。
二、數據包(Packet):TCP/IP協議通信傳輸中的數據單位,處於網路層,在區域網中,「包」是包含在「幀」里的。packet是整個tcpip通信協議里網路層的傳輸單位,也是最小的單位。
有著目的地的ip地址及其來源的ip地址和其他的校驗信息。它也被稱為頭。來自傳輸層託付給自己待傳送的信息。這個信息會被分成多個ip數據包發送出去。所以網路層傳遞的是ip包,ip包里是待傳輸消息的一部分。
三、數據報(Datagram):現在來到傳輸層了,傳輸層直接接受來自你的消息,小到給朋友發個晚安,大到給別人傳遞個文件,只要提供對方的ip地址(還有埠號),其它的都交給傳輸層幫助實現。
這兩種協議都會在發送前把你的消息拆分成多個ip數據包來傳輸。udp英文就叫 user datagram protocol。所以數據報是啥,就是帶地址的消息。
(1)數據的分片發生在網路中的什麼位置擴展閱讀:
1、據報是不能比數據幀大的,數據幀根據不同網路(無線有線)長度會有所區別,數據包(一塊數據)進行為網路層傳輸時會進行判別,如果長過是網路層要進行分片,成為數據報。
2、假設要傳輸一個UDP數據包,乙太網的MTU為1500位元組,一般IP首部為20位元組,UDP首部為8位元組,數據的凈荷(payload)部分預留是1500-20-8=1472位元組。如果數據部分大於1472位元組,就會出現分片現象。
3、IP分片發生在IP層,不僅源端主機會進行分片,中間的路由器也有可能分片,因為不同的網路的MTU是不一樣的,如果傳輸路徑上的某個網路的MTU比源端網路的MTU要小,路由器就可能對IP數據報再次進行分片。而分片數據的重組只會發生在目的端的IP層。
4、TCP:對於TCP數據,在建立連接的三次握手的過程中,連接雙方會相互通告MSS(Maximum Segment Size,最大報文段長度),MSS一般是MTU—IP首部(20)—TCP首部(20),每次發送的TCP數據都不會超過雙方MSS的最小值,所以就保證了IP數據報不會超過MTU,避免了IP分片。
❷ 接收端如何判斷一個收到的IP數據包的分片情況
IP數據包的分片情況有以下四種情況:
1、如果收到的包IP頭中Fragmentation Flags為0且有UDP欄位,則未分片。
2、如果收到的包IP頭中Fragmentation Flags為1且有UDP欄位,則為第一片。
3、如果收到的包IP頭中Fragmentation Flags為1且無UDP欄位,則為中間片。
4、如果如果收到的包IP頭中Fragmentation Flags為0且無UDP欄位,則為最後一片。
❸ 為什麼有時需要對IP數據報進行分片如何分片
任何時候IP層接收到一份要發送的IP數據報時,它要判斷向本地哪個介面發送數據(選路),並查詢該介面獲得其MTU。IP把MTU與數據報長度進行比較,如果需要則進行分片。分片可以發生在原始發送端主機上,也可以發生在中間路由器上。
把一份IP數據報分片以後,只有到達目的地才進行重新組裝(這里的重新組裝與其他網路協議不同,它們要求在下一站就進行進行重新組裝,而不是在最終的目的地)。重新組裝由目的端的IP層來完成,其目的是使分片和重新組裝過程對運輸層( T C P和UDP)是透明的,除了某些可能的越級操作外。已經分片過的數據報有可能會再次進行分片(可能不止一次)。IP首部中包含的數據為分片和重新組裝提供了足夠的信息。
回憶IP首部(圖3 - 1),下面這些欄位用於分片過程。對於發送端發送的每份IP數據報來說,其標識欄位都包含一個唯一值。該值在數據報分片時被復制到每個片中(我們現在已經看到這個欄位的用途)。標志欄位用其中一個比特來表示「更多的片」。除了最後一片外,其他每個組成數據報的片都要把該比特置1。片偏移欄位指的是該片偏移原始數據報開始處的位置。另外,當數據報被分片後,每個片的總長度值要改為該片的長度值。
最後,標志欄位中有一個比特稱作「不分片」位。如果將這一比特置1,IP將不對數據報進行分片。相反把數據報丟棄並發送一個I C M P差錯報文(「需要進行分片但設置了不分片比特」,見圖6 - 3)給起始端。在下一節我們將看到出現這個差錯的例子。
當IP數據報被分片後,每一片都成為一個分組,具有自己的IP首部,並在選擇路由時與其他分組獨立。這樣,當數據報的這些片到達目的端時有可能會失序,但是在IP首部中有足夠的信息讓接收端能正確組裝這些數據報片。
盡管IP分片過程看起來是透明的,但有一點讓人不想使用它:即使只丟失一片數據也要重傳整個數據報。為什麼會發生這種情況呢?因為IP層本身沒有超時重傳的機制——由更高層來負責超時和重傳(T C P有超時和重傳機制,但UDP沒有。一些UDP應用程序本身也執行超時和重傳)。當來自T C P報文段的某一片丟失後,T C P在超時後會重發整個T C P報文段,該報文段對應於一份IP數據報。沒有辦法只重傳數據報中的一個數據報片。事實上,如果對數據報分片的是中間路由器,而不是起始端系統,那麼起始端系統就無法知道數據報是如何被分片的。就這個原因,經常要避免分片。文獻[Kent and Mogul 1987]對避免分片進行了論述。
使用UDP很容易導致IP分片(在後面我們將看到, T C P試圖避免分片,但對於應用程序來說幾乎不可能強迫T C P發送一個需要進行分片的長報文段)。我們可以用s o c k程序來增加數據報的長度,直到分片發生。在一個乙太網上,數據幀的最大長度是1 5 0 0位元組(見圖2 - 1),其中1 4 7 2位元組留給數據,假定IP首部為2 0位元組, UDP首部為8位元組。我們分別以數據長度為1471, 1472, 1473和1 4 7 4位元組運行s o c k程序。最後兩次應該發生分片:
bsdi % sock -u -i -nl -w1471 svr4 discard
bsdi % sock -u -i -nl -w1472 svr4 discard
bsdi % sock -u -i -nl -w1473 svr4 discard
bsdi % sock -u -i -nl -w1474 svr4 discard
相應的tcpmp輸出如圖11 - 7所示。
前兩份UDP數據報(第1行和第2行)能裝入乙太網數據幀,沒有被分片。但是對應於寫1473位元組的IP數據報長度為1 5 0 1,就必須進行分片(第3行和第4行)。同理,寫1 4 7 4位元組產生的數據報長度為1 5 0 2,它也需要進行分片(第5行和第6行)。
當IP數據報被分片後, tcpmp列印出其他的信息。首先,frag 26304(第3行和第4行)和frag 26313(第5行和第6行)指的是IP首部中標識欄位的值。
分片信息中的下一個數字,即第3行中位於冒號和@號之間的1480,是除IP首部外的片長。兩份數據報第一片的長度均為1480:UDP首部佔8位元組,用戶數據佔1 4 7 2位元組(加上IP首部的2 0位元組分組長度正好為1 5 0 0位元組)。第1份數據報的第2片(第4行)只包含1位元組數據—剩下的用戶數據。第2份數據報的第2片(第6行)包含剩下的2位元組用戶數據。
在分片時,除最後一片外,其他每一片中的數據部分(除IP首部外的其餘部分)必須是8位元組的整數倍。在本例中, 1480是8的整數倍。
位於@符號後的數字是從數據報開始處計算的片偏移值。兩份數據報第1片的偏移值均為0(第3行和第5行),第2片的偏移值為1480(第4行和第6行)。跟在偏移值後面的加號對應於IP首部中3 bit標志欄位中的「更多片」比特。設置這一比特的目的是讓接收端知道在什麼時候完成所有的分片組裝。
最後,注意第4行和第6行(不是第1片)省略了協議名( UDP)、源埠號和目的埠號。協議名是可以列印出來的,因為它在IP首部並被復制到各個片中。但是,埠號在UDP首部,只能在第1片中被發現。
發送的第3份數據報(用戶數據為1473位元組)分片情況如圖11 - 8所示。需要重申的是,任何運輸層首部只出現在第1片數據中。
另外需要解釋幾個術語: IP數據報是指IP層端到端的傳輸單元(在分片之前和重新組裝之後),分組是指在IP層和鏈路層之間傳送的數據單元。一個分組可以是一個完整的IP數據報,也可以是IP數據報的一個分片。