为啥数据报很少超过1500字节
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥数据报很少超过1500字节相关的知识,希望对你有一定的参考价值。
1、链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500,你可以用 netstat -i 命令查看这个值。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。2、至于为什么最大值设置成1500字节。
其实,这个最大传输单元MTU等于1500是国际规定的默认值而已,自己也可以将它设置的小一些,【最大值是1500】,就是规定而已,可能是大家评估考虑1500是比较合适的一个数值。
可能可以这样认为,MTU=1500是一个经过实验得到的可以最大效率传输数据的值。倘若大于1500,数据传输速度就会变慢;相反,若小于1500,链路又得不到充分利用,减小了效率。。。。所以,1500就是最好的值。 参考技术A 数据链路层MTU最大为1480字节
为啥会出现错误:“InternalCompilerError:请求的静态内存负载超过 32 个字节”?
【中文标题】为啥会出现错误:“InternalCompilerError:请求的静态内存负载超过 32 个字节”?【英文标题】:Why the error: "InternalCompilerError: Static memory load of more than 32 bytes requested"?为什么会出现错误:“InternalCompilerError:请求的静态内存负载超过 32 个字节”? 【发布时间】:2018-06-18 00:48:52 【问题描述】:使用 Remix (https://remix.ethereum.org/) 并使用 struct。编译器是0.4.19+commit.c4cbbb05
。 “优化”未选中。
pragma solidity ^0.4.4;
contract Test
struct FooBar
uint8 foo;
uint16 bar;
FooBar public fooBar;
function getFooBar() public view returns(FooBar)
return fooBar;
function setFooBar(FooBar value) public
fooBar = value;
它显示错误:“InternalCompilerError: Static memory load of more than 32 bytes requested.”
不知道为什么。在我看来,结构 FooBar
只有 3 个字节大。我的两个函数都读取/写入单个FooBar
。我在这里错过了什么?
更新
对代码进行了一些重构,使其更清晰:
pragma solidity ^0.4.4;
contract Test
struct FooBar
uint8 foo;
uint16 bar;
FooBar public fooBar;
// InternalCompilerError: Static memory load of more than 32 bytes requested.
function setFooBar1(FooBar value) public
fooBar = value;
// No such error.
function setFooBar2(uint8 foo, uint16 bar) public
fooBar.foo = foo;
fooBar.bar = bar;
显然直接传递结构体会导致编译错误,而传递单个字段则不会。想知道有什么区别。
【问题讨论】:
我对这个环境一无所知,但“内部编译器错误”通常意味着它所说的:编译器内部出现错误时:一个错误。您的程序可能正确也可能不正确。 【参考方案1】:这似乎是一个可靠的错误 - 请参阅:
https://github.com/ethereum/solidity/issues/3361
和:
https://github.com/ethereum/solidity/issues/3069
现在还有一个用于以太坊的 Stack Exchange:
https://ethereum.stackexchange.com/
【讨论】:
谢谢@ligi。第一个问题(3361)似乎正是我在这里面临的问题。所以,谢谢你的指点。适当地注意到了论坛。 :) 虽然您的回答并没有解决问题(即使编译错误消失),但我仍然将其标记为已回答,因为它指向一个更好的页面,其中提出了相同的问题并将希望得到解决。以上是关于为啥数据报很少超过1500字节的主要内容,如果未能解决你的问题,请参考以下文章
MTU(Maximum Transmission Unit),最大传输单元