多个应用程序进程可能通过同一个TCP端口传输数据吗?

下边的这段话.

clipboard.png

依照我的理解, 每个进程都是一个端口, 比如FTP的21, TELNET的23等, 都是独用的.

但是这段话中说, 多个应用程序可能通过同一个TCP端口传输数据. 让我不解.

Socket协议, 到底是因为什么问题而存在的.

阅读 6.7k
5 个回答

注意断句!“多个”是修饰“应用程序”还是修饰“进程”的。

一般来说同一个电脑上多个“应用程序”是不能同时使用一个端口的。

但是,多个“进程”确是可以复用同一个端口的 -- 很多操作系统允许子进程复用父进程使用的端口。 具体怎么协调由应用程序自身来控制,而为了区分进程自然得有个东西,这就是socket.

举个例子吧,随手找了个服务器,看看里面的apache服务的进程:

# ps -elf | grep httpd | grep -v grep
clipboard.png

再看看哪些进程使用了80端口:

# lsof -i tcp:80

clipboard.png

可以看到里面有很多httpd的进程都监听了80端口

所以呢... LZ你应该明白了吧。诸位也都散了吧。

有兴趣的话,可以参考下这个模拟Apache的小程序: https://gist.github.com/Clare...

我认为楼上的说的端口端口转发 例子是完全错误的,多个应用程序应该指的是客户端连接服务端 共用服务端的端口, 你socket bind已占用端口怎么可能不报错, 应用层根据端口对信息进行发送给各个应用程序,一个应用程序一个端口 怎么可能多个程序占用一个端口 因此 个人感觉楼主提到的应该是多个客户端

端口说白了就是

进程使用网卡的编号(0到65535(2^16)的整数)

tcp能分辨出是哪个进程(程序)之间的通信啊,socket(这里指的是http socket)就是为了实现两个网卡上两个进程的通信而存在的啊

  1. FTP的21,并不是绑死的,可以用别的端口做 FTP ,也可以用 21 端口做别的。

  2. 每个进程可以向操作系统申请多个端口,一个端口操作系统只会分配给一个进程。

  3. 多个程序需要使用相同端口的情况是存在的,比如 web 服务都想用 80 端口,可以使用代理程序做端口转发。

这种资料看起来就是误导人,21也叫端口,物理端口也叫端口,此端口非彼端口。意思就是物理端口只有一个,但是根据编号又虚拟出许多端口。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题