Networking 了解接收网络数据包的过程

Networking 了解接收网络数据包的过程,networking,linux-kernel,ip,network-protocols,Networking,Linux Kernel,Ip,Network Protocols,我开始学习Linux网络和数据包过滤。据称: 如果一个数据包的目的地是这个盒子,数据包在图中向下传递到输入链。如果它通过了此操作,等待该数据包的任何进程都将收到它 因此,假设一台主机上有3个服务器应用程序服务器A和B是TCP服务器,C是UDP服务器。 如果我们收到一个UDP数据包,在IP级别这个数据包将为应用程序A、B、C提供,这是真的吗?或者应用程序A和B的套接字根本不会接收此数据包?数据包的传递将取决于其目标端口 让我们假设服务器A、B和C分别在端口1111、2222和3333上侦听,因此当

我开始学习Linux网络和数据包过滤。据称:

  • 如果一个数据包的目的地是这个盒子,数据包在图中向下传递到输入链。如果它通过了此操作,等待该数据包的任何进程都将收到它
  • 因此,假设一台主机上有3个服务器应用程序服务器A和B是TCP服务器,C是UDP服务器。
    如果我们收到一个UDP数据包,在IP级别这个数据包将为应用程序A、B、C提供,这是真的吗?或者应用程序A和B的套接字根本不会接收此数据包?

    数据包的传递将取决于其目标端口


    让我们假设服务器A、B和C分别在端口1111、2222和3333上侦听,因此当具有目标端口2222的数据包到达时,它将被传送到服务器B。

    数据包的传送将取决于其目标端口


    让我们假设服务器A、B和C分别在端口1111、2222和3333上侦听,因此当具有目标端口2222的数据包到达时,它将被传送到服务器B。

    数据包的传送将取决于其目标端口


    让我们假设服务器A、B和C分别在端口1111、2222和3333上侦听,因此当具有目标端口2222的数据包到达时,它将被传送到服务器B。

    数据包的传送将取决于其目标端口


    让我们假设服务器A、B和C分别在端口1111、2222和3333上侦听,因此当到达目标端口2222的数据包时,它将被传送到服务器B。

    TCP服务器和UDP服务器以非常不同的方式运行

    最多一个TCP服务器将在给定的TCP端口上侦听(为了简单起见,忽略了角落情况)。目的地为该端口的连接请求(封装在IP数据包中)被一个进程“接受”(更准确地说,被一个文件描述符对应于一个监听端点的进程接受)。[remote_address,remote_port]和[local_address,local_port]的组合是唯一的。TCP服务器并不真正接收“数据包”,它接收的数据流与承载数据的底层数据包没有任何特定关系(数据包“边界”对接收过程不直接可见)。而一个既不是连接请求也不与任何现有连接关联的TCP数据包将被丢弃

    使用UDP,每个UDP数据报在逻辑上是独立的,可以由多个侦听进程接收。也就是说,多个进程可以绑定到同一UDP端点并接收发送给它的数据报。通常,每个数据报对应于单个IP数据包,尽管一个数据报可能被分成多个数据包进行传输


    因此,在您的示例中:不,正在侦听TCP请求的服务器(“TCP服务器”)永远不会收到UDP数据包。TCP和UDP的端口名称空间是完全独立的。

    TCP服务器和UDP服务器的操作方式截然不同

    最多一个TCP服务器将在给定的TCP端口上侦听(为了简单起见,忽略了角落情况)。目的地为该端口的连接请求(封装在IP数据包中)被一个进程“接受”(更准确地说,被一个文件描述符对应于一个监听端点的进程接受)。[remote_address,remote_port]和[local_address,local_port]的组合是唯一的。TCP服务器并不真正接收“数据包”,它接收的数据流与承载数据的底层数据包没有任何特定关系(数据包“边界”对接收过程不直接可见)。而一个既不是连接请求也不与任何现有连接关联的TCP数据包将被丢弃

    使用UDP,每个UDP数据报在逻辑上是独立的,可以由多个侦听进程接收。也就是说,多个进程可以绑定到同一UDP端点并接收发送给它的数据报。通常,每个数据报对应于单个IP数据包,尽管一个数据报可能被分成多个数据包进行传输


    因此,在您的示例中:不,正在侦听TCP请求的服务器(“TCP服务器”)永远不会收到UDP数据包。TCP和UDP的端口名称空间是完全独立的。

    TCP服务器和UDP服务器的操作方式截然不同

    最多一个TCP服务器将在给定的TCP端口上侦听(为了简单起见,忽略了角落情况)。目的地为该端口的连接请求(封装在IP数据包中)被一个进程“接受”(更准确地说,被一个文件描述符对应于一个监听端点的进程接受)。[remote_address,remote_port]和[local_address,local_port]的组合是唯一的。TCP服务器并不真正接收“数据包”,它接收的数据流与承载数据的底层数据包没有任何特定关系(数据包“边界”对接收过程不直接可见)。而一个既不是连接请求也不与任何现有连接关联的TCP数据包将被丢弃

    使用UDP,每个UDP数据报在逻辑上是独立的,可以由多个侦听进程接收。也就是说,多个进程可以绑定到同一UDP端点并接收发送给它的数据报。通常,每个数据报对应于单个IP数据包,尽管一个数据报可能被分成多个数据包进行传输


    因此,在您的示例中:不,正在侦听TCP请求的服务器(“TCP服务器”)永远不会收到UDP数据包。TCP和UDP的端口名称空间是完全独立的。

    TCP服务器和UDP服务器的运行方式非常不同