一个端口只能由一个程序使用,那为什么tcp中多个client可以连接上一个server的同一个端口?

发布于 2022-09-07 16:36:29 字数 24 浏览 125 评论 0

如题,是我哪里理解不对么?求指点。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

耳钉梦 2022-09-14 16:36:29

抛砖引玉

  • 一台服务器上已经安装了Nginx并启动监听80端口,但此时你又下载一个Apache想启动也去监听80端口,这时服务器就不让了,会提示端口被占用,这就是一个端口对应一个应用程序
  • 当你访问一个网址时,默认会访问80端口,假设服务器使用Nginx,当Nginx监听到有客户请求自己监听的80端口时,会根据请求做出相应的相应,至于为什么可以同时链接多个用户,那得看服务器的本身配置了,可以同时允许多少个用户同时访问,若是仅允许一个,那么第一个进来了,接下来的就顺次排队,服务器处理一个之后会接下往下处理
我是有多爱你 2022-09-14 16:36:29

不明白你的点在哪里,你的疑问和前段所描述的原理并不冲突。
服务端都是多进程或者多线程又或者使用了代理等等,一个链接进来,会交由一个子进程/线程/一台web服务器进行处理,并不影响接下来的请求。

因为看清所以看轻 2022-09-14 16:36:29

猜测题主可能是混淆了socket和port这两个概念。

打个(可能不太恰当的)比方,port就是门牌号,你一家住进去了,如果不搬出来,下一家不能进。socket就是快递编号,可以同时给你们家寄好几件快递。port只不过是在网络中标识了一个进程,socket才是数据交换的端点。

节选一下 man accept,翻译成中文是这样的

It extracts the first connection request on the queue of pending connections for the listening socket, sockfd, creates a new connected socket, and returns a new file descriptor referring to that socket. The newly created socket is not in the listening state. The original socket sockfd is unaffected by this call.

它(accept)从监听套接字sockfd的队列中取出第一个请求,创建一个新的连接socket,然后返回一个指向新socket的文件描述符。这个新socket并不在监听状态。原本的socketsockfd不会被这个调用改变。

所以跟“切换的够快”、“子进程/线程”、“Nginx的配置”都无关,它们只是后续用来处理这些新socket的方法,是一个一个处理,还是一起处理,相当于你快递可以一件一件收,也可以请快递员用推车一起送上来。但是能支持多连接,本质上还是因为每个客户端连接都有一个新的socket,互不相干,可以分别处理。

系统区分socket,靠的则是五元组。因为两个IP都是不能变的,只能靠端口号来区分应用程序,所以要求一个端口只能由一个程序使用。

断念 2022-09-14 16:36:29

计算机原理,linux多用户其实还是单用户,但是切换的够快就感觉是在并发使用了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文