我了解到,在连接中,当数据包到达服务器时,服务器将需要来自 5 元组的所有信息来确定哪个应用程序将获取数据包,即
源 ip、源端口、目标 ip、目标端口、协议(UDP 或 TCP)。
根据我的理解,源 ip、源端口以及目标端口足以确定“源应用程序”(因为如果我是对的,在特定时间可能只有一个应用程序可以监听特定端口) 并且目标端口还应该告诉我们来自服务器的哪个服务。那么我认为这三个信息足以确定我们应该将包发送到服务器上的哪个应用程序,那么为什么协议和目标ip?
多谢你们!
我了解到,在连接中,当数据包到达服务器时,服务器将需要来自 5 元组的所有信息来确定哪个应用程序将获取数据包,即
源 ip、源端口、目标 ip、目标端口、协议(UDP 或 TCP)。
根据我的理解,源 ip、源端口以及目标端口足以确定“源应用程序”(因为如果我是对的,在特定时间可能只有一个应用程序可以监听特定端口) 并且目标端口还应该告诉我们来自服务器的哪个服务。那么我认为这三个信息足以确定我们应该将包发送到服务器上的哪个应用程序,那么为什么协议和目标ip?
多谢你们!
许多传输层协议(最显着的 TCP 和 UDP)使用端口号,并且一次只对一种协议有效。你可以说有一个五元组,包括协议号,但我更愿意说每个传输协议都有自己的四元组(或其他方案)。
实际上,相同编号的 TCP 端口和 UDP 端口之间绝对没有联系。正如 Ricky 已经指出的那样,应用程序可能在两种协议中使用相同编号的端口,但这并不常见。
从技术上讲,操作系统的 IP 实现将数据包的有效负载传递给适当的协议处理程序以进行进一步处理 - TCP或UDP(或任何使用的) - 完全忽略传输层标头中的端口号。因此,发往 UDP:80 的 UDP 数据报永远无法到达 TCP:80 上的侦听器,TCP 处理程序也无法理解它。
除了其他人已经指出的:一台主机可能在一个接口上配置了多个IP地址,不同的应用程序可以在同一接口上侦听同一端口,但在不同的IP地址上。所以你需要这个元组中的所有五项来区分流量,特别是当流量不是由主机发起并且还没有状态时。