一个数据包的大小是好多?
1.数据链路层对数据帧的长度有限制,即链路层所能承受的最大数据长度。这个值
它被称为最大传输单位,即MTU。以以太网为例,这个值通常是1500字节。
2.对于IP数据包,也有一个长度。在IP报头中,IP分组的长度由16比特描述,也就是说,
一个IP包,最长可能是65535字节。
3.综合以上两个概念,第一个重要结论就出来了。如果IP数据包的大小超过了MTU值,则有必要。
分片,也就是把一个IP包分成多个部分,非常容易理解。一辆载重5T的货车要拉10T的货。
当然我也只是进了几次拉。
4.许多材料中经常提到IP碎片化,但我不。;我不认为它it'把它分开很重要。重要的是另一件事。一个
数据包经过一个很大的网络,会经过多个网络,每个网络的MTU值都不一样。我们可以想象如果
接收方/发送方都是以太网,他们的MTU是1500。我们假设发送时,数据包会用1500封装。然而,
可惜传输中有一个X.25网络,它的MTU是576。会发生什么?我觉得这才是我们关心的。
当然结论很明显,这个数据包又要切片了,我们就开始拉火车了。在路上,不会有火车,只有汽车。
那辆车将被分成许多辆车...那个这就是全部。更重要的是,在这种情况下,如果用"没有碎片标志",那么
会发生什么?是的,数据包将被丢弃,但我收到了一个ICMP不可达错误,告诉你它需要被分段!
该网络中最小的MTU值称为路径MTU。我们应该有一个有效的手段来求这个值,最笨的方法可能是第一个。
使用traceroute查看所有节点,然后逐一ping……...
5.在传输层,也会有一个最大限制。当然,对于UDP,它只发送而不Idon'我不在乎其他任何事情,这已经不是我们讨论的问题了。这里
谈论TCP协议。说到尺寸,可能会让人想起TCP著名的滑动窗口,它与收发器两端的缓存有关,在这里讨论。
是传输的最大数据包大小,因此不进行讨论。
在TCP的option字段中,有一个最大消息段长度(MSS),表示TCP向另一端传输的最大数据的长度。当一个连接被建立时,它被连接。
双方都要公布自己的MSS,也就是说和TCP的SYNlogo一起。当然,对于传输来说,总是希望MSS越大越好。
现在超载这么严重,谁不我不想拉更多的货...但是MSS对于以太网总是有一个限制,就是MTU-IP头长度-TCP头长度。
塔通经常是1500-20-201460。虽然它总是被期望很大(比如1460),但是大多数BSD实现都是512的倍数,比如1024...
6.回到切片。例如,在Win2000下执行以下命令:
平192.168.0.1-l1473
按照我刚才说的,147320(ip头)8(icmp头)1501比1500好,会碎片化,但是我们关心的是:
这个包怎么分?
你可以猜到,第一个包是
以太网IP报头ICMP报头1427的数据;
第二个切片包呢?
它可以是:
以太网IP报头ICMP的第一个1字节的数据
或者:
以太网IP第一个字节的数据
也就是说省略了ICMP头的封装。当然不能省略IP头,不然怎么传输...
其实TCP/IP协议采用的是后一种封装,一次可以节省8个字节。在IP报头中,有三个标志用于描述分段的数据包:
1.分片标志:如果一个包是分片的,则设置为1,除了最后一个分片;——这样,对于接收端来说,标志位可以作为重组权重。
基地之一;
2.碎片偏移标志:只有一个标志位表示你是否是碎片包是不够的。偏移标志位指示您的片段在原始数据报中的位置。
显然,这两个标志一旦结合起来,就很容易把支离破碎的包装重新组织起来。
3.不允许分片标志:如果这个标志是为数据包强制设置的,那么在需要分片的时候,……
LWIP协议怎么提高UDP速度?
首先物理层要支持。比如支持10Mbps的以太网最快可以传输1M/S,支持100Mbps的以太网可以传输10M/
s其次,物理层支持的速度很高,你的板卡处理能力也要跟上。如果你用的是Cort:1500字节),所以不适合大数据量的以太网传输。