1、Fragmenting of an IPv4 Fragment
为什么这个可以节省CPU时间
因为当部分数据报达到的时候就已经可以重组数据了,比如1,3,2这样就可以将数据进行排序了,不用等到所有数据达到再排序,但是必须等4,当在设定的时间里没有等到4,这个Fragment就丢掉。
2、Reassembly
为什么要把数据报碎片化,在主机中实现
因为:这样能减少路由负担,最重要的是路由选址是动态变化的,碎片化的数据报,可能经过了不同的路由传送,
IP数据转发
1、网络服务规范
- TCP / IP支持无连接和面向连接的服务
- 基本交付服务在Internet层(第3层)无连接
- 可选的可靠的,面向连接的服务在运输层(第4层)
2、IP数据报
- 数据包通过路由器跨多个物理网络发送
- Internet协议定义了通用虚拟数据包-IP数据报
- IPv4数据报最多为64K八位字节,包括头部和数据
- IPv6最多可包含64K八位字节有效负载和报头
2.1、IPv4数据报头格式
2.2、 IPv6数据报
3、IP数据报转发
- 每个路由器都使用本地转发表转发虚拟数据包
- 每个条目对应一个网络,而不是一个主机
•因此表中的条目数与网络数成正比 - 每个条目包含:
•目的地址
•make地址
•下一跳:路由器的IP地址或直接交付 - 然后进行地址解析
3.1、 最长前缀匹配
- 现实中转发算法更复杂
- 转发表可以包含默认条目
- 网络管理员可以指定主机特定的路由
•例如 沿与网络上其他主机的流量不同的路径引导特定主机的流量 - 对于特定于主机的路由:
•转发表条目包含覆盖整个地址的掩码(IPv4为32位,IPv6为128位)
•地址掩码可以重叠!! - 考虑一个转发表,其中包含IPv4网络前缀的条目:
•128.10.0.0/16
•128.10.2.0/24 - 如果数据报到达目的地128.10.2.3,则两者都将匹配!
•因此,Internet转发使用最长的前缀匹配
3.2、最大努力交付
- IPv4和IPv6尝试尽力而为的传递,并且不保证处理: •数据报复制
•延迟或无序交货
•数据损坏
•数据报丢失 - 这些问题由其他协议层处理
4、封装形式
- 通过物理网络发送IP数据报时,它将放置在帧的数据区域中,并且帧类型设置为IP
5、最大传输单元(MTU)和数据报大小
- 最大传输单元-帧可以在给定网络上承载的最大数据量
- 数据包可能需要处理不同的MTU大小,因为它们通过Internet传递
- 数据报必须分段
- IPv4和IPv6的做法不同
5.1、IPv6片段大小
- 选择分片作为基础网络的MTU
- 但必须在原始来源完成,而不是在路由器上完成 •主机应选择不需要分段的数据报大小
•如果沿途的路由器收到的数据报大于MTU,它将丢弃并发送错误消息 - 因此,主机必须沿到达目的地的路径学习每个网络的MTU!
•path MTU是沿路径的最小MTU
•path MTU discovery 是学习路径MTU的过程 - 尝试大小并查看是否返回错误的迭代过程!
为什么要在主机中实现数据碎片化?
因为:这样能减少路由负担,最重要的是路由选址是动态变化的,碎片化的数据报,可能经过了不同的路由传送,若由路由器实现,则较为复杂
5.2、 重新组装
- 在最终主机处完成 •路由器需要较少的状态信息 •片段可以采取不同的路线
- 头部字段指示数据何时是片段以及其所属位置
- 每个数据报都包含一个片段
- 如果丢失任何片段,整个数据报将丢失
5.3、收集碎片数据报
- 碎片可以采取不同的路线
- 特定的发送方可以将多个数据报发送到同一目的地,因此多个片段可能会乱序到达并散布
- 需要能够识别碎片
- 识别字段
•与IP源地址一起使用以确定该片段属于哪个原始数据报 - 片段偏移字段
•允许接收者确定片段的有效载荷在原始数据报中的位置
5.4、 碎片丢失
- 接收方收到片段时,它将启动计时器 •重新组装计时器
- 如果丢失任何片段,则整个数据报都会丢失
- 接收器必须在内存中缓冲片段,直到所有片段到达或计时器到期
- 如果计时器在接收到所有片段之前已过期,则已接收的片段将被丢弃
- 全有或全无的方法
- 在有损网络上,如果数据报是分段的,则丢失数据报的可能性更高
•因此,通常应尽可能避免碎片化
5.5、 IPv4片段的片段
- 碎片可以碎片化
•但是子片段的形成方式相同 - Destination无需等待片段的所有子片段到达即可重新组合整个原始数据报
•减少CPU时间
•意味着需要更少的数据存储在片段头中 - 在Internet中,设计人员试图避免按减少的MTU顺序排列网络
为什么这个可以节省CPU时间
因为当部分数据报达到的时候就已经可以重组数据了,比如1,3,2这样就可以将数据进行排序了,不用等到所有数据达到再排序,但是必须等4,当在设定的时间里没有等到4,这个Fragment就丢掉。