最近看了一下ip資料報分片與重組的過程
有個問題不明白
當到達ip層的資料報超過資料鏈路的mtu時就要分片
分片後的ip資料報包頭中的標記欄位中mf位被設為1(代表後面還有分段)或0(代表這是最後乙個段)
資料報在重組的時候,我不明白哪個標記代表所有分片後的包都到達目的地了
難道通過mf=0這個去判斷
但是每個分片後的包是不按序到達的,也就是說mf=0的分片並不一定是最後乙個到達
那麼怎麼去判斷分片後的包都已經完整到達目的端?
ip分片與重組主要用三個域:identification, more fragments(你說的mf位)和 fragment offset
identification可以標識小包屬於哪個大包。
mf位可以看出是不是最後乙個分片小包。
每隔分片的小包都有fragment offset域,代表它在原始大包中的位置。
由mf可以找到最後乙個分片,然後由它的fragment offset域就可以知道前面需要什麼分片。或者說,由其他小包的fragment offset和長度就可以算出是不是所有小包都到了。
真誠的謝謝樓上的回答
由mf可以找到最後乙個分片,然後由它的fragment offset域就可以知道前面需要什麼分片。或者說,由其他小包的fragment offset和長度就可以算出是不是所有小包都到了。
這個地方我還是不明白
identification, more fragments和 fragment offset這幾個欄位的意思我都清楚
問題是每個小包到達目的地的順序是不一樣的
比方說有可能mf=0的先到達,mf=1的後到達
這個怎麼去重組乙個完整的包呢
fragment offset只能說名它在原包的位置
也就是說如何去判斷小包的結束?
書上是說通過mf=0去判斷
但是每乙個小包是不按序到達的
所有小包的資料長度加起來 等不等於 原大包的長度。如果相等則所有小包都收齊了。
原大包的長度可以通過最後乙個小包的offset 加 最後乙個小包的長度 得到。
我明白了
原來還是要通過資料的總長度去判斷
網路層 IP資料報
網路層的協議資料單元pdu是ip資料報,ipv4是ip協議的乙個版本,還有最新的ipv6版本,後面進行介紹。版本 指版本號4 首部長度 佔4位,一行首部4位元組 32位 至少5行共20位元組,最多15行共60位元組 區分服務 未使用該欄位 總長度 佔16位,首部和資料長度之和,最大2 16 1位元組...
ip層本機接受資料報處理
當資料報的目的位址是本機是,ip rcv finish函式就會將skb dst input函式指標初始化為ip local deliver,ip層本地傳送資料報也分為兩個階段分配分別有兩個處理函式 ip local deliver和ip local deliver finish。本地 資料報的首要任...
IP資料報的格式
ip資料報的格式如下 這裡只討論ipv4 該圖出自 tcpip 圖 36.8.ip資料報格式 ip資料報的首部長度和資料長度都是可變長的,但總是4位元組的整數倍。對於ipv4,4位版本欄位是4。4位首部長度的數值是以4位元組為單位的,最小值為5,也就是說首部長度最小是4x5 20位元組,也就是不帶任...