tcp/ip IP数据报头详解
下列兩幅圖是IP數(shù)據(jù)報頭結構:
在IP數(shù)據(jù)報頭中有三個字段與數(shù)據(jù)報的分片與重組有很大的關系,分別是標識符、標志和片偏移量。
標識占16位,用于目的主機將數(shù)據(jù)報的各個分片重裝成原來的數(shù)據(jù)報。當數(shù)據(jù)報分片時,該標識字段的值被復制到所有的數(shù)據(jù)報片的標識字段中。這樣,目的就可以正確的將標識字段值相同的各數(shù)據(jù)報分片重裝成原來的數(shù)據(jù)報。
其中標志占3位,該字段目前只有后兩位有意義,前一位字段保留。
其中,最低位記為MF(More Fragment),用于把數(shù)據(jù)報最后一片與前面其它各片區(qū)分開來。MF = 1代表片未完,即鈣片不是原始數(shù)據(jù)報的最后一片;MF = 0表示鈣片是原始數(shù)據(jù)報的最后一片。
次低位DF(Don’t Fragment),用來控制數(shù)據(jù)報是否允許分片。DF = 1表示該數(shù)據(jù)報不允許分片;DF = 0允許分片。
其實,數(shù)據(jù)報的分片和重組都是由機器自動完成的,因此設置DF位的真正意義在于,程序員可以控制數(shù)據(jù)報的分片過程,這為程序調試提供了方便和靈活性。
片偏移占13位,表示本片在原數(shù)據(jù)報中的偏移,偏移量以8字節(jié)為單位。由于各片數(shù)據(jù)均按照獨立數(shù)據(jù)報方式傳輸,因此到達目的站的片序是不定的,目的主機在重裝數(shù)據(jù)報時需要該字段提供偏移量
例如:
A: 有一數(shù)據(jù)報總長度4820字節(jié),首部20字節(jié),數(shù)據(jù)4800字節(jié)。某一網(wǎng)絡能傳送的數(shù)據(jù)報的最大長度是1420字節(jié),該如何分片?
B: 有一數(shù)據(jù)報總長度4500字節(jié),ip報頭20字節(jié),考慮到還有一種情況,分片的數(shù)據(jù)包還可能繼續(xù)進行分片, 如下截圖:
所有片段的數(shù)據(jù)量: 1480+1000+1480+540 = 4500字節(jié)
如何得片段偏移:
A1: 0
A2: 0 + 1480/8 = 185
A3: 185+1000/8 = 310
A4: 310+1480/8 = 495
在分片時,除最后一片外,其他每一片的數(shù)據(jù)部分必須是8字節(jié)的整數(shù)倍
A1: 每個分段數(shù)據(jù)首部中,16位標識符 是相同的,接收端可以依靠此標識,來識別是否是同一組數(shù)據(jù)。
A2: 3位標志位,用DF來區(qū)分是否允許分片,如果為0,繼續(xù)查看MF,接收端會把MF=1的分組數(shù)據(jù)放到緩存中,直到把所有16位標識符相同的分段讀取完為止。
(根據(jù)網(wǎng)絡傳輸速度,接收端不一定最后收到MF=0的標識分段數(shù)據(jù). 而因該是check16位標識符相同的分組,全部放到緩沖區(qū) )
A3: 然后根據(jù)13位偏移量,來重組緩存中的數(shù)據(jù)(可以通過MF=0來確定最后一段分組數(shù)據(jù)).
所以重組前提依據(jù)上述三個步驟來確認。缺一不可.
當需要進行分片時,在每個數(shù)據(jù)報片的首部存放著該數(shù)據(jù)報的標識、標志位和片偏移,在進行重組時,標識用來分辨該數(shù)據(jù)報片的原數(shù)據(jù)報是哪個,標志位中的MF用來分辨這是不是原數(shù)據(jù)報的最后一片,片偏移用來分辨這個數(shù)據(jù)報片相對原數(shù)據(jù)報的位置。通過這幾個字段,可以穩(wěn)定的完成數(shù)據(jù)報的分片與重組操作
總結
以上是生活随笔為你收集整理的tcp/ip IP数据报头详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jeesite导出Excel Minim
- 下一篇: 3D Mapping with an R