下边的这段话.
依照我的理解, 每个进程都是一个端口, 比如FTP的21, TELNET的23等, 都是独用的.
但是这段话中说, 多个应用程序可能通过同一个TCP端口传输数据. 让我不解.
Socket协议, 到底是因为什么问题而存在的.
下边的这段话.
依照我的理解, 每个进程都是一个端口, 比如FTP的21, TELNET的23等, 都是独用的.
但是这段话中说, 多个应用程序可能通过同一个TCP端口传输数据. 让我不解.
Socket协议, 到底是因为什么问题而存在的.
我认为楼上的说的端口端口转发 例子是完全错误的,多个应用程序应该指的是客户端连接服务端 共用服务端的端口, 你socket bind已占用端口怎么可能不报错, 应用层根据端口对信息进行发送给各个应用程序,一个应用程序一个端口 怎么可能多个程序占用一个端口 因此 个人感觉楼主提到的应该是多个客户端
端口说白了就是
进程使用网卡的编号(0到65535(2^16)的整数)
tcp能分辨出是哪个进程(程序)之间的通信啊,socket(这里指的是http socket)就是为了实现两个网卡上两个进程的通信而存在的啊
FTP的21,并不是绑死的,可以用别的端口做 FTP ,也可以用 21 端口做别的。
每个进程可以向操作系统申请多个端口,一个端口操作系统只会分配给一个进程。
多个程序需要使用相同端口的情况是存在的,比如 web 服务都想用 80 端口,可以使用代理程序做端口转发。
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
4 回答4.5k 阅读✓ 已解决
1 回答3.3k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
注意断句!“多个”是修饰“应用程序”还是修饰“进程”的。
一般来说同一个电脑上多个“应用程序”是不能同时使用一个端口的。
但是,多个“进程”确是可以复用同一个端口的 -- 很多操作系统允许子进程复用父进程使用的端口。 具体怎么协调由应用程序自身来控制,而为了区分进程自然得有个东西,这就是socket.
举个例子吧,随手找了个服务器,看看里面的apache服务的进程:
# ps -elf | grep httpd | grep -v grep
再看看哪些进程使用了80端口:
# lsof -i tcp:80
可以看到里面有很多
httpd
的进程都监听了80端口所以呢... LZ你应该明白了吧。诸位也都散了吧。
有兴趣的话,可以参考下这个模拟Apache的小程序: https://gist.github.com/Clare...