我们可以使用IP地址和进程ID组合代替IP地址和端口号吗?为什么不呢?

时间:2015-05-20 10:05:29

标签: sockets ip port pid

正如我们在任何Web应用程序中所知,浏览器中的选项卡有一个进程,因此我们需要一个ip地址和一个端口号来标识进程。正如我们所知,每个选项卡都有唯一的端口号。因此,对于每个流程都有唯一的进程ID。也可以在套接字编程中使用ip和进程id组合而不是使用ip和端口号组合。如果是这样,那怎么样?如果不是为什么?请帮助我..对不起的英语

抱歉

2 个答案:

答案 0 :(得分:3)

  

我们可以使用IP地址和进程ID组合代替IP地址和端口号吗?

没有

  

为什么不为什么?

因为他们没有这样定义TCP / IP。它没有意义。远程计算机没有办法在另一台主机上发现进程ID。它需要的是一个固定的数字,即一个端口号,两个主机都可以实现。

  

正如我们所知,每个标签都有唯一的端口号。

这绝对是绝对错误的。 '我们'不要知道'任何这样的事情。

答案 1 :(得分:2)

  

正如我们在任何Web应用程序中所知,浏览器中的选项卡都有一个进程

这不能保证。这是浏览器的实现细节。它可能会也可能不会为每个标签使用单独的过程。

  

所以我们需要一个ip地址和一个端口号来识别这个过程。

不,您需要一个IP地址和端口来标识给定的套接字端点。一个进程可以有多个套接字活动。

  

正如我们所知,每个标签都有唯一的端口号。

这也不能保证。 HTTP是无状态的,并且不保证或要求连接在请求之间保持连接,尤其是在很长一段时间内。假设您打开一个选项卡并请求给定的网站,将该选项卡保持打开一段时间,然后打开一个新选项卡到另一个网站。当标签处于空闲状态时,之前的连接可能已关闭,并且这些端口可在新标签中重复使用。

  

因此,对于每个流程都有唯一的流程ID。

在这种情况下,这是唯一可以保证的事情。但请记住,一旦流程结束,其流程ID就可以并将在后续的新流程中重复使用。

  

也可以在套接字编程中使用ip和进程id组合而不是使用ip和端口号组合。

没有。但是在某些平台上,例如Windows,至少可以使用API​​来发现拥有给定套接字的进程ID。

  

如果不是为什么?

因为这不是套接字的设计方式。套接字端点由其协议/ IP /端口元组标识,套接字连接由彼此连接的两个对等体的协议/ IP /端口元组标识。请记住,套接字连接可以跨越机器边界,但进程ID只对其运行的机器是本地的。