首页 > 编程知识 正文

tcpip详解卷3,tcpip详解卷一第几版比较好

时间:2023-05-04 22:25:17 阅读:161519 作者:2061

另一方面,IP瓦片的概述链路层通常是由IP层发送的IP数据标记,以保持可传递的每个帧的最大长度有一个上限IP数据报的抽象以及链路层细节的一致和分离(通过搜索转发公告,见上一篇Internet文章) ),http://ww IP比较外出接口的MTU和数据大小,有价值的是IP引人了分片和重组数据报本身是片您也可以在原始源主机和端到端路径上的任何中间路由器上只允许http://www.Sina.com/源主机进行分片。 (我看过IPv6片的例子。 ) 2、示例使用IPv4分片http://www.Sina.com/UDP的APP应用程序可能需要考虑生成的IP数据报的大小,以避免IP层分片。 具体来说,如果结果数据报的大小超过链路的MTU,IP数据报将被拆分为3358www.Sina.com/。数据报应该从哪个本地接口发送图例因为下图显示了一个3023字节的UDP/IPv4数据报被划分为多个IPv4数据包

已发现原始UDP数据报包含要求的MTU是多少数据报太大则进行分片(。 结果产生了。 请记住,该大小还包括20字节的IPv4头。 因此,总发送字节数为3060,增加的IPv4开销约为1.3% IPv4中的分片:,由原始发送侧设置。 同时,在片到达目的地的时候,利用它来将片分成组IPv6中的分片有些不一样:,给原始ipvom提供该片的第一个字节1480等于从第一个片的大小减去IPv4报头的大小类似的分析可以应用于第三个分片。 最后,前言:指示此数据报后面是否有更多的组,只有最后一个分片应该为0。 当接收到MF=0的分片时,重组程序可以确定原始数据报的长度。 它等于分片偏移字段的值(8倍)和IPv4总长度字段的值)减去IPv4头长度。 由于每个偏移字段相对于原始数据报,因此重组进程可以处理不按顺序到达的分片。 将数据报切片后,每个IPv4标头的总长度字段将更改为切片的总长度3。 避免由于切片导致的数据报丢失(避免切片)。IP切片看起来是透明的,但由于前面提到的特征,它并不理想。可能导致性能问题要理解为什么会这样,3358www.Sina超时和重发等机制是更高层次的责任。 (TCP有超时和重发操作,UDP中没有。 一些基于UDP的APP应用程序可以自己实现超时和重传,但这是在UDP的上一层完成的。 (如果TCP段的分片丢失,TCP将重新发送整个TCP段。 这涉及整个IP数据报。 只重发数据报中的一个分片是不可能的。 确实,如果分片由中央路由器而不是原始系统创建,则原始系统将不知道数据报是如何分片的。 这样,如果任何一个分片丢失了,整个数据报就丢失 了、瓷砖的演示案例使用UDP生成IP瓷砖很简单。 (后来让我们看看TCP尽量避免分片。 几乎不可能强制APP应用程序发送比TCP请求的分片大得多的消息段。 )您可以使用sock程序增加数据报的大小,直到显示分片。 在以太网上,一帧数据的最大大小通常为1500字节。 见第三章。 假设IPv4报头为20个字节,UDP报头为8个字节e,则最多1472个字节的APP描述数据可以避免分片。 以数据大小1471、1472、1473、1474字节执行sock程序。 最后两个预计将生成瓷砖:

下图显示了tcpdump输出。 为了简洁起见,一些行被组织起来了。

前两个UDP数据报(组1和组2 )适用于典型的“DIX”或“Ethemet”封装的以太网帧,并且没有分片。 第三种情况下,APP应用程序的1473字节IPv4数据报的长度为1501,需要分片(组3和组4 )。 同样,写入1474字节生成的数据报的长度为1502字节。 同样,tCPdump打印了一些附加信息。 分片(组5和组6 )也捕获了分片的数据报。 首先,输出frag37671 (组3和4 )和frag37672 (组5和6 )给出了IPv4报头内的识别字段。 平铺信息中的下一个数字(在组4和组6的冒号和@字符之间)是不包含IPv4标头的IPv4组大小。 两家报纸的第一个平铺包含1480字节数据8字节的UDP头和14

72字节的用户数据。 ( 20字节不带选项的IPv4头部使得分组恰好是1500字节。)第一个被分片的数据报的第二个 分片(分组3)包含1字节的数据(用户数据剩下的1个字节)。第二个被分片的数据报的第 二个分片(分组5)包含用户数据剩下的2个字节。分片要求除了最后一个分片之外的所有 分片的数据部分(即,除IPv4头部外的所有东西)应是8字节的倍数。本例中, 1480就是8 的倍数。 (相比于第5章的IPv6分片例子,那里1500字节的以太网MTU不能被充分利用。)跟随在@字符后的数字是指该分片的数据相对原始数据报开头的偏移量。每个新的被 分片的数据报的第一个分片都是以偏移0开始的(分组4和6),两个数据报的第二个分片都 是从偏移1480字节开始(分组3和5)。偏移量后的“+”字符代表还有组成这个数据报的 分片,对应IPv4头部里的3位的标志字段里的MF位字段被置成10一个令人意外的现象是:有更大偏移量的分片要比第一个分片优先投递。事实上,发 送方故意对这些分片进行了重新排序。经过思考,我们认为这样做是有好处的。如果最后一 个分片先被投递,接收主机就可以确定所需的缓存空间的最大值,以重组整个数据报。考 虑到反正重组进程重新排序是鲁棒的,这就不是什么问题了。另一方面,有些技术要利用 更高层的信息,这些信息从第一个分片可得到(包含UDP端口号),而后面的分片都没有 [KEwG96] 。最后,注意到分组3和5 (非第一个分片)遗漏了源和目的UDP端口号o tcpdump为了 能打印除了第一个分片外的分片的端口号,它不得不重组被分片的数据报以恢复只出现在第 一个分片(该分片没有遗漏源和目的端口号)的UDP头部中的端口号0 五、重组超时 一个数据报的任何一个分片首先到达时,IP层就得启动一个计时器。如果不这样做的话,不能到达的分片(如下图可见)可能会最终导致接收方用尽缓存,留下一种攻击机会 演示说明 下面的例子由一个特殊程序产生,该程序构造一个ICMPv4回显请求报文,并且以一定延迟只发送这个消息的前面两个分片,然后不再发送任何其他分片。下图显示了回复(为了简洁,某些行已被整理)

这里我们看到第一个分片(的时间和序列空间)被发送,总长度是4000第二个分片20s 后被发送,但最后一个分片一直没被发送。接收到第一个分片30s后,目标机器回复一个ICMPv4超时(代码1)消息,告诉发送方数据报已丢失,包括第一个分片的拷贝。一般的 超时时间是30s或60so正如我们所见,收到任何一个分片时计时器就开始计时,且收到新 的分片也不会被重置。因此,计时器给出了同一数据报分片之间可被分隔的最大间隔时间的 限度 注意:历史上,大多数衍生自Berkeley-Unix的IP实现方案从不产生这个错误。然 而这些实现确实用了计时器,也确实在计时器超时的时候丢弃了所有分片,但是却 从不产生ICMP错误。有时会碰到另一个细节:除非接收到了第一个分片(比如分片偏移字段为0的分片),否则没必要产生ICMP错误。原困是这些ICMP错误的接收者会困传输层头部不可用而无法知道哪个用户进程发送的数据报丢弃了。假设 更高层协议最终将会超时,并在必要时重传它六、IP分片和ARP/ND之间的交互 待续

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。