为什么 IP 报头需要有源地址?



IP 标头中的源地址有什么用?网络层不是只关心使用路由表将数据包转发到目标地址吗?

事实上,即使没有其原始源地址,数据包也会被发送到目的地并正确路由。您将无法将源地址字段留空,因为它会更改标头的长度,至少您需要一些 IP 地址。对于 IPv4 (RFC791(,此字段的长度必须正好为 32 位,对于 IPv6 (RFC8200(,此字段的长度必须正好为 128 位,因此不允许使用零长度字段。

数据包是否到达其目的地取决于两者之间的基础结构。目标绝对有可能收到数据包,前提是如果它认为数据包是非法的,则没有某些防火墙或其他过滤器来丢弃数据包,某些防火墙会这样做。

要回答为什么需要它,通常以双向通信,您需要提及接收者应该将响应发送到何处。

如果您不想获得响应,那么您可能不在乎接收方是否知道数据包的源地址。在这种情况下,您可以欺骗真正的源地址并使用所需的任何地址发送数据包,只要您不偏离协议规范即可。

但是,这将是一个例外而不是规则。因此,大多数协议被设计为用于(或至少支持(双向通信,并且源地址字段内置于其规范中。

如果您不知道应该将其发送到哪里,您将如何发送确认?

像TCP和ICMP这样的协议需要这一点。

如果源地址存储在 IP 标头中,则这些协议不需要传输源地址。

例如,TCP 不会显式存储源地址,而是存储源(和目标(端口。如果源地址和目标地址一个接一个地传输,而不是在不同的标头中传输,也更容易阅读。

在任何情况下,几乎每个协议都需要源地址。

许多高级协议(如HTTP(需要将内容发送回最初发送数据包的用户。

这些协议也必须向发送者发送IP。

如果无法传输数据包并发回错误响应,则还需要源地址。

最新更新