我没有在 Internet 上找到任何关于此的信息,因为每个网站都只是说明它在那里,但从来没有为什么。
我的一个想法是路由器可以识别发件人在哪个网段,因此它可以更快地重定向数据包,但我不知道这是不是真的......
我没有在 Internet 上找到任何关于此的信息,因为每个网站都只是说明它在那里,但从来没有为什么。
我的一个想法是路由器可以识别发件人在哪个网段,因此它可以更快地重定向数据包,但我不知道这是不是真的......
因此,当响应发送者时,目标节点知道在目标字段中指定哪个地址。
首先,路径上的节点知道将任何错误消息发送到哪里。
在大多数情况下,IP 是一种双向协议。因此,必须有发送者和接收者。
除了 Ron 和 Ricky 提到的(接收者需要知道响应谁,沿途的节点需要知道将任何 ICMP 消息发送到哪里)之外,TCP 连接由源 IP 地址的唯一 4 元组标识,目的 IP 地址、源端口号和目的端口号。如果没有源 IP 地址,接收方的 TCP 堆栈将不知道特定传入数据包属于哪个流。当然,对于 UDP 或任何其他支持让多个远程主机向同一传输层协议和传输层协议流标识符(例如端口号)发送数据包的传输层协议,情况也是如此。
例如,考虑一个 Web 服务器。它在服务器的 TCP 端口 80 上侦听传入的数据包。但是,连接到该服务器的所有客户端都会将其数据包发送到 Web 服务器 IP 地址上的端口 80。此外,不能保证源端口号在不同计算机上的客户端之间会有所不同。因此,如果数据包中没有源 IP 地址,则 TCP 堆栈不知道任何给定的传入数据包属于端口 80 的哪个连接,因此,不知道其有效负载应该是哪个流(套接字)送到了(送去了。此外,它不知道要使用哪个接收窗口等,因为它无法唯一标识数据包属于哪个连接。
此外,虽然这不是设计的原因,但另一个有用的地方是 NAT。NAT 使用 5 元组来唯一标识传入数据包属于哪个连接、源 IP 地址、源端口、目标 IP 地址、目标端口和传输层协议(例如 TCP 或 UDP)。同样,没有所有这些信息, NAT 将无法唯一标识流,因此,不知道它应该将数据包转发到哪个内部地址/端口。
瑞奇和罗恩都是正确的。IP 数据包有源和目的地。目的地的设备使用源地址来确定将回复发送到哪里,如果途中出现错误,路由器将使用数据包的源地址将错误消息发送到。