一个端口只能由一个程序使用,那为什么tcp中多个client可以连接上一个server的同一个端口?
如题,是我哪里理解不对么?求指点。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如题,是我哪里理解不对么?求指点。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
抛砖引玉
Nginx
并启动监听80
端口,但此时你又下载一个Apache
想启动也去监听80端口,这时服务器就不让了,会提示端口被占用,这就是一个端口对应一个应用程序
。80
端口,假设服务器使用Nginx
,当Nginx
监听到有客户请求自己监听的80
端口时,会根据请求做出相应的相应,至于为什么可以同时链接多个用户,那得看服务器的本身配置了,可以同时允许多少个用户同时访问,若是仅允许一个,那么第一个进来了,接下来的就顺次排队,服务器处理一个之后会接下往下处理不明白你的点在哪里,你的疑问和前段所描述的原理并不冲突。
服务端都是多进程或者多线程又或者使用了代理等等,一个链接进来,会交由一个子进程/线程/一台web服务器进行处理,并不影响接下来的请求。
猜测题主可能是混淆了socket和port这两个概念。
打个(可能不太恰当的)比方,port就是门牌号,你一家住进去了,如果不搬出来,下一家不能进。socket就是快递编号,可以同时给你们家寄好几件快递。port只不过是在网络中标识了一个进程,socket才是数据交换的端点。
节选一下 man accept,翻译成中文是这样的
所以跟“切换的够快”、“子进程/线程”、“Nginx的配置”都无关,它们只是后续用来处理这些新socket的方法,是一个一个处理,还是一起处理,相当于你快递可以一件一件收,也可以请快递员用推车一起送上来。但是能支持多连接,本质上还是因为每个客户端连接都有一个新的socket,互不相干,可以分别处理。
系统区分socket,靠的则是五元组。因为两个IP都是不能变的,只能靠端口号来区分应用程序,所以要求一个端口只能由一个程序使用。
计算机原理,linux多用户其实还是单用户,但是切换的够快就感觉是在并发使用了