【问题标题】:Error in the tcp segment area inside a IP packet?IP数据包内的tcp段区域出错?
【发布时间】:2016-12-31 15:08:30
【问题描述】:

在 IP 网络中使用 IPv4 协议。当通过网络传输数据报时(TTL=2),在包含带有网页地址的 TCP 段的字段内会发生错误。路由器读取这样的数据报会有什么反应?

我与这个问题斗争了两天。 我所知道的:

  • 路由器只读取数据报的头部,如果校验和失败,数据报将被路由器丢弃,

  • 如果报头校验和正确,路由器总是将 TTL 减一,在 -1 之后,数据报正被转发到网络中的下一个路由器

基于这两点,我得出结论,数据报会走得更远,TTL将为1,路由器将计算新的校验和。

但是,对于这些问题还有其他三个可能的答案:

  1. 路由器将 ICMP 发送到错误源
  2. 路由器根据头校验和修复错误,然后转发数据报
  3. 路由器将数据报发送出网络(丢弃数据报)

有解决这个问题的帮助吗?

【问题讨论】:

  • 为什么我会被否决?
  • 路由器不读取包内数据报的头部。路由器是一个三层设备,它会读取三层包头。它根本不关心数据包的有效负载。
  • @RonMaupin,所以基本上如果标头校验和正常,那么路由器将计算新的校验和,将 TTL 减一并将数据报转发到下一个路由器?
  • 你说得对,它会走得更远。而且(2)是不可能的,IPv4 不执行纠错(TCP 也不执行)。另一方面,这个想法是路由器不执行完整的数据包校验和计算。但是,第 2 层可能会计算校验和,在这种情况下,数据包将被丢弃。但如果我们出于教学目的而忽略第 2 层,数据包就会通过。
  • @o9000,我现在有答案了。 tnx,如果您愿意,您可以将其发布为获得 +25 的答案...

标签: networking tcp ip ipv4


【解决方案1】:

IPv4 路由器必须实现的确切算法在RFC 1812 - Requirements for IP Version 4 Routers 中进行了描述。根据the IETF RFC Index,它仍然适用(“状态:最佳实践”)。

转发算法见Section 5.2.1。确定步骤之间依赖关系的约束是(引用):

(1) 路由器必须验证 IP 标头,如章节中所述 [5.2.2],在根据内容执行任何操作之前 标题。这允许路由器检测并丢弃坏的 在消耗其他资源之前的数据包。

(2) 处理某些 IP 选项需要路由器 插入 将其 IP 地址添加到选项中。 [...]

(3) 路由器在检查前不能检查和递减TTL 是否应该将数据包传送到路由器本身,例如 第 [4.2.2.9] 节中提到的原因。

(4) 更一般地,当一个数据包被本地传送到 路由器, 不得以任何方式修改其 IP 标头 [...]。

接收数据包时执行的实际步骤是(引用):

(1)路由器收到IP包(加上附加信息 关于它,如第 [3.1] 节所述)来自链路层。

(2) 路由器验证 IP 标头,如第 1 节所述 [5.2.2]。请注意,IP 重组没有完成,除了 IP 在步骤 (4) 中排队等待本地传递的片段。

(3) 路由器执行任何 IP 选项的大部分处理。 作为 在第 [5.2.4] 节中描述,一些 IP 选项需要额外的 在做出路由决定后进行处理。

(4)路由器检查IP的目的IP地址 数据报,如第 [5.2.3] 节所述,以确定它如何 应继续处理 IP 数据报。有三种 可能性:

o IP 数据报的目的地是路由器,应该是 排队等待本地交付,如果需要进行重新组装。

o IP 数据报不是发往路由器的,应该是 排队等待转发。

o IP 数据报应该排队等待转发,但是(副本) 还必须排队等待本地交付。

因此很明显,首先执行 IPv4 标头的校验和验证。 Section 5.2.2 IP Header Validation 中描述了确切的步骤,但在这里它们并不重要。重要的是只检查 IP 标头,而不检查内容。因此路由器无法检测到错误。

基于这两点,我得出结论,数据报会走得更远,TTL将为1,路由器将计算新的校验和。

正确。

至于其他选项:

  1. 路由器将 ICMP 发送到错误源

不,没有超时错误。至于其他 ICMP 错误,没有任何信号表明发送方数据包损坏。因此,即使路由器可以检测到数据包损坏(例如损坏的位在 IP 标头中),它仍然不会发送 ICMP 消息。

  1. 路由器根据头校验和修复错误,然后转发数据报

不,在 IPv4 和 TCP 中执行的校验和只允许检测错误,不能纠正。

  1. 路由器将数据报送出网络(丢弃数据报)

它不会丢弃它,因为它没有检测到错误。

关于我在评论中所说的链路层错误检测,传输过程中通常有两个错误来源:(1)来自传输介质(干扰、损坏的电缆、未正确连接的插头等)和(2)来自转发设备本身(有缺陷的内存芯片、固件错误、宇宙射线撞击芯片等)。链路层通常可以检测甚至纠正来自(1)的错误,但显然不能来自(2)。因此,如果设备故障损坏了数据包内容,问题中描述的场景确实是可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2016-04-19
    • 2018-09-04
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多