IP分片
2015-06-26 20:04
211 查看
当数据超过底层允许最大字节时(一个以太帧1514字节,14字节以太首部,20字节IP首部,UDP8/TCP20,因此IP包每次最大为1500==MTU。去掉协议头UDP有效数据1472字节,TCP为1460字节。)会进行IP分片。LwIP允许的最大IP由如下决定:IP_REASS_MAX_PBUFS 决定IP分片允许最大pbuf数量,IP_REASS_MAXAGE分片的生存时间,超过则错误并将之前接收的IP分片丢弃。
如果数据大于IP_REASS_MAX_PBUFS则有两种选择,一:直接删除数据返回;二,是删除生存时间最长的IP分片PBUF,这个通过IP_REASS_FREE_OLDEST来使能。
当为UDP协议时,如果缓冲区描述符大小小于完整的IP数据包,IP分片数据包到来时,很快将描述符耗尽,后来的IP包由于无缓冲区描述符而丢弃,UDP没有重传机制,很可能永远不会接收到完整的IP分片包。从而大于IP_REASS_MAXAGE出现错误,因此缓冲区描述符也应增大以适应IP分片重装。
TCP发送数据时,将大于MSS的数据分段(segment不叫分片),MSS一般为1460.所以,TCP数据包不会在IP层分片。
IP头部有3位标志字段,标志是否为分片包。第一位无用,第二位0:允许分片,1:不允许。第三位0:最后一片,1:后面还有分片。13位offset表示偏移,用于IP重组时数据排序,13位因此支持最大IP数据包为8192字节。
标准的BSD协议实现如下图所示,采用两个结构体,IPQ为表头,将各个IP分片表头连接起来,并存储IP信息。Ipasfrag为具体的分片数据。
如果数据大于IP_REASS_MAX_PBUFS则有两种选择,一:直接删除数据返回;二,是删除生存时间最长的IP分片PBUF,这个通过IP_REASS_FREE_OLDEST来使能。
当为UDP协议时,如果缓冲区描述符大小小于完整的IP数据包,IP分片数据包到来时,很快将描述符耗尽,后来的IP包由于无缓冲区描述符而丢弃,UDP没有重传机制,很可能永远不会接收到完整的IP分片包。从而大于IP_REASS_MAXAGE出现错误,因此缓冲区描述符也应增大以适应IP分片重装。
TCP发送数据时,将大于MSS的数据分段(segment不叫分片),MSS一般为1460.所以,TCP数据包不会在IP层分片。
IP头部有3位标志字段,标志是否为分片包。第一位无用,第二位0:允许分片,1:不允许。第三位0:最后一片,1:后面还有分片。13位offset表示偏移,用于IP重组时数据排序,13位因此支持最大IP数据包为8192字节。
标准的BSD协议实现如下图所示,采用两个结构体,IPQ为表头,将各个IP分片表头连接起来,并存储IP信息。Ipasfrag为具体的分片数据。
相关文章推荐
- Elastic Search使用
- Category protocol delegate
- ckeditor和ckfinder结合使用时问题的解决办法
- 欢迎使用CSDN-markdown编辑器
- 用场景来规划测试工作
- GridView实现超链接列和图片列,跳转页面并传递参数
- RNote__Reshape2
- Tomcat部署web项目
- ios周刊 第四期
- C++操作符重载
- Web worker耗尽原因定位
- 作业5 四则运算 测试与封装
- 第九章
- iOS周刊 第三期
- nginx常用负载方式
- zTree 树形组件结合bootstrap的使用
- SQL Server 2008 Windows身份验证改为混合模式身份验证
- MFC,VC++计算器小程序
- Java知多少(104)网络编程之统一资源定位符URL
- java、oracle、jsp中string与date与sql.date的转换