Networking 数据包如何知道它属于哪个进程?

Networking 数据包如何知道它属于哪个进程?,networking,Networking,假设我正在使用tcp协议,我收到一个数据包。我的疑问是,这个数据包将如何定向到其相应的进程。我听说tcp使用端口号,因此使用当前端口号的进程将获得数据包。但是,如果多个进程使用同一端口号,该怎么办?我听说这是不可能的,即不同的进程使用相同的端口号,但是如果我从chrome和edge的不同窗口使用youtube呢?所有的进程都必须使用相同的ip和相同的端口号。传入的数据包如何区分它进入哪个进程 假设我使用tcp协议,收到一个数据包,我的疑问是 如何将此数据包定向到其相应的进程 数据包通过协议(IP

假设我正在使用tcp协议,我收到一个数据包。我的疑问是,这个数据包将如何定向到其相应的进程。我听说tcp使用端口号,因此使用当前端口号的进程将获得数据包。但是,如果多个进程使用同一端口号,该怎么办?我听说这是不可能的,即不同的进程使用相同的端口号,但是如果我从chrome和edge的不同窗口使用youtube呢?所有的进程都必须使用相同的ip和相同的端口号。传入的数据包如何区分它进入哪个进程

假设我使用tcp协议,收到一个数据包,我的疑问是 如何将此数据包定向到其相应的进程

数据包通过协议(IPv4)或下一个报头(IPv6)字段定向到正确的进程。例如,TCP是协议6,因此协议号为6的数据包的数据包有效负载将发送到TCP进程。如果协议号为17,则数据包的有效负载被发送到UDP进程等。IANA维护页面

我听说tcp使用端口号,所以正在使用 当前端口号由数据包提供

我认为你混淆了网络层。数据包是IP数据报。TCP数据报是段,因为TCP段是数据流。应用程序将向TCP注册以获取端口号,并且该应用程序在释放该端口号之前独占使用该端口号

但是如果多个进程使用相同的端口号呢 听说这是不可能的,即不同的进程使用相同的端口 但如果我从不同的chrome窗口使用youtube呢 和边缘。所有都必须转到相同的ip和相同的端口号。如何 传入的数据包可以区分它要去哪个进程

TCP端口号分配给单个进程。您的示例可能不正确,因为浏览器将使用临时端口号,它允许TCP从其运行的操作系统的临时范围中分配随机端口号。事实上,浏览器将打开到web服务器的多个连接,每个连接使用不同的源端口号。服务器端必须侦听已知的端口号


请记住,端口号是根据协议确定的;TCP端口12345不是UDP端口12345。此外,并非所有传输协议都使用端口号。有些使用其他东西,有些则不使用任何东西,因为它们绑定到单个应用程序。

因此,我正在使用berkeley sockets编写一个客户机-服务器程序。因此,客户机使用brekeley socket api生成的一些端口号,服务器可以区分同一台机器上的两个不同客户端。您的服务器需要侦听特定的TCP端口号,以便客户端知道如何访问它。客户端将使用保留的端口
0
,然后TCP将从其临时范围中随机分配源端口号。服务器将从TCP段获取客户端端口号,并回复该端口号。TCP连接由源和目标IP地址以及TCP端口号标识。