一个数据包的大小是好多?

一个数据包的大小是好多?

 
 
一、数据链路层对数据帧的长度都有一个限制,也就是链路层所能承受的最大数据长度,这个值 称为最大传输单元,即MTU。以以太网为例,这个值一般是1500字节。 二、对于IP数据包来说,也有一个长度,在IP包头中,以16位来描述IP包的长度,也就是说, 一个IP包,最长多是65535字节。 三、结合以上两个概念,第一个重要的结论就出来了,若是IP包的大小,起过了MTU值,那么就须要 分片,也就是把一个IP包分为多个,这个概念很是容易理解,一个载重5T的卡车,要拉10T的货,它 固然就得分几回来拉了。 四、IP分片是不少资料常讲的内容,可是我却是以为分不分片其实不重要,重要的是另外一个东西。一个 数据包穿过一个大的网络,它其间会穿过多个网络,每一个网络的MTU值是不一样的。咱们能够设想,若是 接受/发送端都是以太网,它们的MTU都是1500,咱们假设发送的时候,数据包会以1500来封装,然而, 不幸的是,传输中有一段X.25网,它的MTU是576,这会发生什么呢?我想,这个才是咱们所关心的。 固然,结论是显而易见的,这个数据包会被再次分片,咱开始用火车拉,到了半路,不通火车,只通汽车, 那一车货会被分为不少车……仅此而已,更重要的是,这种状况下,若是IP包被设置了“不容许分片标志”,那 会发生些什么呢?对,数据包将被丢弃,然事收到一份ICMP不可达差错,告诉你,须要分片! 这个网络中最小的MTU值,被称为路径MTU,咱们应该有一种有效的手段,来发现这个值,最笨的方法或许是先 用traceroute查看全部节点,而后一个个ping…… 五、到了传输层,也会有一个最大值的限制,固然,对于只管发,其它都无论的UDP来讲,再也不咱们讨论之列。这里 说的是TCP协议。说到大小,或许会让人想到TCP著名的滑动窗口的窗口大小,它跟收发两端的缓存有关,这里讨论 的是传输的最大数据包大小,因此,它也不在讨论之列。 TCP的选项字段中,有一个最大报文段长度(MSS),表示了TCP传往另外一端的最大数据的长度,当一个链接立时,链接 的双方都要通告各自的MSS,也就是说,它说是与TCP的SYN标志在一块儿的。固然,对于传输来说,老是但愿MSS越大越好, 如今超载这么严重,谁家不但愿多拉点货……可是,MSS老是有个限制的,也就是MTU-IP头长度-TCP头长度,对于以太网来说 它一般是1500-20-20=1460,虽然老是但愿它能很大(如1460),可是大多数BSD实现,它都是512的倍数,如1024…… 六、回到分片上来,例如,在Win2000下执行以下命令: ping 192.168.0.1 -l 1473 按刚才的说法,1473+20(ip头)+8(icmp头)=1501,则好大于1500,它会被分片,可是,咱们关心的是: 这个数据包会被怎么样分法? 能够猜测,第一个包是 以太头+IP头+ICMP头+1472的数据; 那第二个分片包呢? 它能够是: 以太头+IP头+ICMP头+1个字节的数据 或者是: 以太头+IP头+1个字节的数据 也就是省去ICMP头的封装,固然,IP头是不能够省的,不然怎么传输了…… 事实上,TCP/IP协议采用的是后一种封装方式,这样,一次能够节约8个字节的空间。IP包头中,用了三个标志来描述一个分片包: 一、分片标志:若是一个包被分片了,被置于1,最后一个分片除外;——这样,对于接收端来说,能够根据这个标志位作为重组的重 要依据之一; 二、分片偏移标志:光有一个标志位说明“本身是否是分片包”是不够的,偏移标志位说明了本身这个分片拉于原始数据报的什么位置, 很明显,这两个标志一结合,就很容易重组分片包了。 三、不容许分片标志:若是数据包强行设置了这个标志,那么在应该分片的时候,…… err,刚才已经说过了
相关文章
相关标签/搜索