導航:首頁 > 數據處理 > 組裝分片數據包用到哪個欄位

組裝分片數據包用到哪個欄位

發布時間:2022-05-01 09:29:06

A. 數據包中的什麼欄位指明這是一個基於udp的通信

UDP協議的全稱是用戶數據報,在網路中它與TCP協議一樣用於處理數據包。在OSI模型中,在第四層——傳輸層,處於IP協議的上一層。UDP有不提供數據報分組、組裝和不能對數據包的排序的缺點,也就是說,當報文發送之後,是無法得知其是否安全完整到達的。

為什麼要使用UDP

在選擇使用協議的時候,選擇UDP必須要謹慎。在網路質量令人不十分滿意的環境下,UDP協議數據包丟失會比較嚴重。但是由於UDP的特性:它不屬於連接型協議,因而具有資源消耗小,處理速度快的優點,所以通常音頻、視頻和普通數據在傳送時使用UDP較多,因為它們即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。比如我們聊天用的ICQ和OICQ就是使用的UDP協議。

在Java中操縱UDP

使用位於JDK中Java.net包下的DatagramSocket和DatagramPacket類,可以非常方便地控制用戶數據報文。

在描述它們之前,必須了解位於同一個位置的InetAddress類。InetAddress實現了Java.io. Serializable介面,不允許繼承。它用於描述和包裝一個Internet IP地址,通過三個方法返回InetAddress實例:

getLocalhost():返回封裝本地地址的實例。

getAllByName(String host):返回封裝Host地址的InetAddress實例數組。

getByName(String host):返回一個封裝Host地址的實例。其中,Host可以是域名或者是一個合法的IP地址。

B. 數據分片應遵守哪些基本原則數據分片有哪些基本類型和方法

鏈路層具有最大傳輸單元MTU這個特性,它限制了數據幀的最大長度,不同的網路類型都有一個上限值。乙太網的MTU是1500,你可以用 netstat -i 命令查看這個值。如果IP層有數據包要傳,而且數據包的長度超過了MTU,那麼IP層就要對數據包進行分(fragmentation)操作,使每一片的長度都小於或等於MTU。我們假設要傳輸一個UDP數據包,乙太網的MTU為1500位元組,一般IP首部為20位元組,UDP首部為8位元組,數據的凈荷(payload)部分預留是1500-20-8=1472位元組。如果數據部分大於1472位元組,就會出現分片現象。
分片(sharding)是資料庫分區的一種,它將大型資料庫分成更小、更快、更容易管理的部分,這些部分叫做數據碎片。碎片這個詞意思就是整體的一小部分。
Jason Tee表示:「簡言之,分片(sharding)資料庫需要將資料庫(database)分成多個沒有共同點的小型資料庫,且它們可以跨多台伺服器傳播。」
技術上來說,分片(sharding)是水平分區的同義詞。在實際操作中,這個術語常用來表示讓一個大型資料庫更易於管理的所有資料庫分區。
分片(sharding)的核心理念基於一個想法:資料庫大小以及資料庫上每單元時間內的交易數呈線型增長,查詢資料庫的響應時間(response time)以指數方式增長。
另外,在一個地方創建和維護一個大型資料庫的成本會成指數增長,因為資料庫將需要高端的計算機。相反地,數據碎片可以分布到大量便宜得多的商用伺服器上。就硬體和軟體要求而言,數據碎片相對來說沒什麼限制。
在某些情況中,資料庫分片(sharding)可以很簡單地完成。按地理位置拆分用戶資料庫就是一個常見的例子。位於東海岸的用戶被分到一台伺服器上,在西海岸的用戶被分在另一台伺服器上。假設沒有用戶有多個地理位置,這種分區很易於維護和創建規則。
但是數據分片(sharding)在某些情況下會是更為復雜的過程。例如,一個資料庫持有很少結構化數據,分片它就可能非常復雜,並且結果碎片可能會很難維護。
分片過程
對於發送端發送的每份IP數據報來說,其標識欄位都包含一個唯一值。該值在數據報分片時被復制到每個片中。標志欄位用其中一個比特來表示「更多的片」。除了最後一片外,其他每個組成數據報的片都要把該比特置1。片偏移欄位指的是該片偏移原始數據報開始處的位置。另外,當數據報被分片後,每個片的總長度值要改為該片的長度值。
最後,標志欄位中有一個比特稱作「不分片」位。如果將這一比特置1,IP將不對數據報進行分片。相反把數據報丟棄並發送一個ICMP差錯報文給起始端。
當IP數據報被分片後,每一片都成為一個分組,具有自己的IP首部,並在選擇路由時與其他分組獨立。這樣,當數據報的這些片到達目的端時有可能會失序,但是在IP首部中有足夠的信息讓接收端能正確組裝這些數據報片。

C. 分片後的IP數據報在重組時是怎樣確定順序的具體到哪個協議

重組由目的端IP層來完成。
有標識欄位來確定分片屬於哪一個報文,有分片中的片偏移確定分片的順序。
除最後一個分片外,分片的標志欄位有一個比特標識「更多的片」。

D. IP協議報文有哪些主要欄位

1、版本(4比特)
IP協議版本已經經過多次修訂,1981年的RFC0791描述了IPV4,RCF2460中介紹了IPV6。
2、報頭長度(4比特)
報頭長度是報頭數據的長度,以4位元組表示,也就是以32位元組為單位。報頭長度是可變的。必需的欄位使用20位元組(報頭長度為5,IP選項欄位最多有40個附加位元組(報頭長度為15)。
3、服務類型(8比特)
該欄位給出發送進程建議路由器如何處理報片的方法。可選擇最大可靠性、最小延遲、最大吞吐量和最小開銷。路由器可以忽略這部分。
4、數據報長度(16比特)
該欄位是報頭長度和數據位元組的總和,以位元組為單位。最大長度為65535位元組。
5、標識符(16比特)
原是數據的主機為數據報分配一個唯一的數據報標識符。在數據報傳向目的地址時,如果路由器將數據報分為報片,那麼每個報片都有相同的數據標識符。
6、標志(3比特)
標志欄位中有2為與報片有關。
位0:未用。
位1:不是報片。如果這位是1,則路由器就不會把數據報分片。路由器會盡可能把數據報傳給可一次接收整個數據報的網路;否則,路由器會放棄數據報,並返回差錯報文,表示目的地址不可達。IP標准要求主機可以接收576位元組以內的數據報,因此,如果想把數據報傳給未知的主機,並想確認數據報沒有因為大小的原因而被放棄,那麼就使用少於或等於576位元組的數據。
位2:更多的報片。如果該位為1,則數據報是一個報片,但不是該分片數據報的最後一個報片;如果該位為0,則數據報沒有分片,或者是最後一個報片。
7、報片偏移(13比特)
該欄位標識報片在分片數據報中的位置。其值以8位元組為單位,最大為8191位元組,對應65528位元組的偏移。
例如,將要發送的1024位元組分為576和424位元組兩個報片。首片的偏移是0,第二片的偏移是72(因為72×8=576)。
8、生存時間(8比特)
如果數據報在合理時間內沒有到達目的地,則網路就會放棄它。生存時間欄位確定放棄數據報的時間。
生存時間表示數據報剩餘的時間,每個路由器都會將其值減一,或遞減需要數理和傳遞數據報的時間。實際上,路由器處理和傳遞數據報的時間一般都小於1S,因此該值沒有測量時間,而是測量路由器之間跳躍次數或網段的個數。發送數據報的計算機設置初始生存時間。
9、協議(8比特)
該欄位指定數據報的數據部分所使用的協議,因此IP層知道將接收到的數據報傳向何處。TCP協議為6,UDP協議為17。
10、報頭檢驗和(16比特)
該字端使數據報的接收方只需要檢驗IP報頭中的錯誤,而不校驗數據區的內容或報文。校驗和由報頭中的數值計算而得,報頭校驗和假設為0,乙太網幀和TCP報文段以及UDP數據報中的可選項都需要進行報文檢錯。
11、源IP地址(32比特)
表示數據報的發送方。
12、目的IP地址(32比特)
表示數據報的目的地。

E. 容器分片組裝和分段組裝的區別

IP分片和TCP分段的區別
1,MTU(Maximum Transmission Unit,MTU),最大傳輸單元
(1)乙太網和802.3對數據幀的長度都有一個限制,其最大值分別是1500和1492個位元組。鏈路層的這個特性稱作MTU。不同類型的網路大多數都有一個上限。如果IP層有一個數據要傳,且數據的長度比鏈路層的MTU還大,那麼IP層就要進行分片(fragmentation),把數據報分成若乾片,這樣每一個分片都小於MTU。
(2)把一份IP數據報進行分片以後,由到達目的端的IP層來進行重新組裝,其目的是使分片和重新組裝過程對運輸層(TCP/UDP)是透明的。由於每一分片都是一個獨立的包,當這些數據報的片到達目的端時有可能會失序,但是在IP首部中有足夠的信息讓接收端能正確組裝這些數據報片。
(3)盡管IP分片過程看起來透明的,但有一點讓人不想使用它:即使只丟失一片數據也要重新傳整個數據報。why?因為IP層本身沒有超時重傳機制------由更高層(比如TCP)來負責超時和重傳。當來自TCP報文段的某一片丟失後,TCP在超時後會重發整個TCP報文段,該報文段對應於一份IP數據報(而不是一個分片),沒有辦法只重傳數據報中的一個數據分片。
(4)使用UDP很容易導致IP分片,TCP試圖避免IP分片。那麼TCP是如何試圖避免IP分片的呢?其實說白了,採用TCP協議進行數據傳輸是不會造成IP分片的,因為一旦TCP數據過大,超過了MSS,則在傳輸層會對TCP包進行分段(如何分,見下文!),自然到了IP層的數據報肯定不會超過MTU,當然也就不用分片了。而對於UDP數據報,如果UDP組成的IP數據報長度超過了1500,那麼IP數據報顯然就要進行分片,因為UDP不能像TCP一樣自己進行分段。總結:UDP不會分段,就由我IP來分。TCP會分段,當然也就不用我IP來分了!
2,MSS(Maxitum Segment Size)最大分段大小的縮寫,是TCP協議裡面的一個概念 (1)MSS就是TCP數據包每次能夠傳輸的最大數據分段。為了達到最佳的傳輸效能TCP協議在建立連接的時候通常要協商雙方的MSS值,這個值TCP協議在實現的時候往往用MTU值代替(需要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes)所以往往MSS為1460。通訊雙方會根據雙方提供的MSS值得最小值確定為這次連接的最大MSS值。
(2)相信看到這里,還有最後一個問題:TCP是如何實現分段的呢?其實TCP無所謂分段,因為每個TCP數據報在組成前其大小就已經被MSS限制了,所以TCP數據報的長度是不可能大於MSS的,當然由它形成的IP包的長度也就不會大於MTU,自然也就不用IP分片了

F. 對IP數據報分片的重組通常發生在( )上

B。原因如下:

1、在TCP/IP分層中,數據鏈路層用MTU來限制所能傳輸的數據包大小。MTU是指一次傳送的數據最大長度,不包括數據鏈路層數據幀的幀頭。當發送的IP數據報的大小超過了MTU時,IP層就需要對數據進行分片,否則數據將無法發送成功。

2、IP分片發生在IP層,不僅源端主機會進行分片,中間的路由器也有可能分片,因為不同網路的MTU是不一樣的。如果傳輸路徑上的某個網路的MTU比源端網路的MTU要小,路由器就可能對IP數據報再次進行分片。而分片數據的重組只會發生在目的端的IP層。

3、IP層是沒有超時重傳機制的。如果IP層對一個數據包進行了分片,只要有一個分片丟失了,只能依賴於傳輸層進行重傳,結果是所有的分片都要重傳一遍,這個代價有點大。由此可見,IP分片會大大降低傳輸層傳送數據的成功率,所以要避免IP分片。

(6)組裝分片數據包用到哪個欄位擴展閱讀

IP數據報分片重組的相關明細

1、IP分片

①當IP需要分片時,會從原來的分組中把IP首部和IP選項復制到新的分組中,IP首部復制在一個結構中,只復制那些將被復制到每個分片中的選項;

②設置分片包括MF位的偏移欄位。如果原來分組中已設置了MF位,則在所有分片中都把MF置位。如果原來分組中沒有設置MF位,則除了最後一個分片外,其它所有分片中的MF都置位;

③為分片設置長度,以網路位元組序存儲長度;

④從原始分組中把數據復制到分片中。調整新創建的分片的分組首部,使其具有正確的全長。把新分片的介面指針清零,計算新分片的檢驗和,把該分片與前面的分片鏈接起來。

2、IP重組

①如果MF位或分片偏移非零,則DF就被掩蓋掉了,分組就是一個必須被重裝的分片。如果兩者都為零,則分組就是一個完整的數據報,不需要進行重組;

②在一個全局雙向鏈表上記錄不完整的數據報。分片是由4元組唯一標識的,利用這個4元組作為匹配項對表進行線性搜索,為當前分片找到合適的數據報;

③修改數據報長度欄位,從中減去標准IP首部和任何選項,運算後決定是否應該重組;

④通過把當前分片與以前收到的分片組合在一起,能重裝成一個完整的數據報,它就返回指向該重裝好的數據報的指針。如果沒有重裝好,則保存該分片,跳到下一步去處理下一個分片。如果重裝處理產生一個完整的數據報,就把它上傳給合適的傳輸層協議。

G. 那麼應該劃分為幾個短些的數據報片各數據報片得數據欄位長度,片偏移欄位和MF標志各為何數值

首先ip數據報首部20還剩1460,最大為500,再加上除最後一分片外,其它分片長度必須為8的整數倍,所以分為3片長度分別為496,496,468,偏移量分別為0/8,4968,496•2/8。MF分別為1,1,0。

例如:

3片;

第一片:數據欄位長度1480、片偏移是0,MF是1;

第二片:數據欄位長度1480、片偏移是185,MF是1;

第三片:數據欄位長度1020、片偏移是370和MF是0。

(7)組裝分片數據包用到哪個欄位擴展閱讀:

首部長度:佔4位,可表示的最大十進制數值是15。請注意,這個欄位所表示數的單位是32位字(1個32位字長是4位元組),因此,當IP的首部長度為1111時,首部長度就達到60位元組。當IP分組的首部長度不是4位元組的整數倍時,必須利用最後的填充欄位加以填充。

因此數據部分永遠在4位元組的整數倍開始,這樣在實現IP協議時較為方便。首部長度限制為60位元組的缺點是有時可能不夠用。但這樣做是希望用戶盡量減少開銷。最常用的首部長度就是20位元組(即首部長度為0101),這時不使用任何選項。

H. 在IP首部中,與分片有關的欄位是那幾個

IP數據包在封裝時, 在IP頭的第8-9個位元組(16bit)中, 存放關於分片的信息. 其中前3個bit表示分片的狀態, 後13個bit表示當前片斷在分片之前的整塊待封裝的數據包中的偏移量(因為IP數據包的最大可能長度為16bit, 而這13bit無法表示16bit的范圍, 故實際使用時, 偏移量的計算是用這13bit的值乘8(3bit), 以實現表示16bit的范圍)。

不分片標記(Don't Fragment Flag)

IP頭第8-9位元組從左往右的第2bit表示當前IP數據包是(1)否(0)不分片, 預設值為0, 就是不不分片, 即允許分片. 因為默認允許分片, 所以我們平常使用Ping命令時, 加參數-l 65500(指定IP包大小)Ping一台機器也不會有問題。

是否有後續分片標記(More Fragments Flag)

IP頭第8-9位元組從左往右的第3bit表示當前數據包里的數據是否為某塊數據的最後一個分片, 若為0, 則說明當前數據包內的數據沒有分片或者是最後一個分片, 若為1, 則表示後面還有屬於同一塊數據的分片。

I. 為什麼有時需要對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數據報的一個分片。

閱讀全文

與組裝分片數據包用到哪個欄位相關的資料

熱點內容
基金交易費用什麼時候扣除的 瀏覽:892
多少萬以上工程需要招代理 瀏覽:724
農信手機銀行如何截圖交易記錄 瀏覽:719
爬取數據後如何存儲 瀏覽:140
大連有哪些職業技術學校大專 瀏覽:979
專送如何解綁代理商 瀏覽:224
富人發信息怎麼打招呼 瀏覽:820
買了二手房如何交易 瀏覽:318
多多買菜做代理商怎麼賺錢 瀏覽:772
駕駛技術生疏怎麼練習 瀏覽:913
蜂窩數據漫遊如何打開 瀏覽:471
五金加工產品包括哪些 瀏覽:46
肉類技術型是什麼意思 瀏覽:360
股票交易新盈利16筆怎麼投 瀏覽:58
qq中媒體數據是什麼 瀏覽:332
交易貓怎麼找商店客服 瀏覽:593
生產產品用的鋼材屬於什麼科目 瀏覽:371
微商清貨商城有哪些代理 瀏覽:798
鬢角用什麼技術修剪 瀏覽:629
市場干什麼利潤大 瀏覽:968