首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >套接字编程-为什么web服务器在接受连接后仍然使用侦听端口80与客户端通信?

问套接字编程-为什么web服务器在接受连接后仍然使用侦听端口80与客户端通信?
EN

Stack Overflow用户
提问于 2014-11-16 06:04:27
回答 5查看 2.1K关注 0票数 3

通常,web服务器通过端口80侦听任何传入的连接。所以,我的问题是,它不应该是,在一般的概念套接字编程是端口80是为了侦听传入的连接。但是,在服务器接受连接后,它将使用另一个端口(例如端口12345 )与客户端进行通信。但是,当我查看wireshark时,服务器在通信过程中总是使用端口80。我在这里很困惑。

那么,如果https://www.facebook.com:443在一秒钟内有数十万次与it的连接,那该怎么办呢?单港口能否处理这么大的交通流量?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-11-16 06:55:28

一个特定的套接字是由一个5元组(即一个包含5个特定属性的列表)唯一标识的。这些财产是:

  1. 源IP地址
  2. 目的IP地址
  3. 源端口号
  4. 目的地端口号
  5. 传输协议(通常是TCP或UDP)

对于同时打开的套接字,这些参数必须是唯一的。您可能会感到困惑的地方是客户端发生的事情与TCP中服务器端发生的情况。无论所讨论的应用程序协议(HTTP、FTP、SMTP等),TCP的行为方式都是相同的。

当您在客户端打开套接字时,它将为新的传出连接选择一个随机的高数字端口。这是必需的,否则您将无法在同一台计算机上向同一台服务器打开两个单独的套接字。因为这样做是完全合理的(而且在web服务器中非常常见,比如在两个单独的选项卡中打开stackoverflow.com ),而且每个套接字的5元组必须是唯一的,所以使用一个随机的高数字端口作为源端口。但是,每个套接字都将连接到stackoverflow.com. port的will服务器上的端口80。

在服务器端,stackoverflow.com已经可以将这两个不同的套接字与客户端区分开来,因为它们已经有不同的客户端端口号。当它看到来自您的浏览器的传入请求包时,它会知道由于不同的源端口号,它与您一起打开了哪些套接字。类似地,当它想向您发送响应数据包时,它可以通过将目标端口号设置为它收到请求的客户端端口号,将其发送到您端的正确端点。

底线是,每个客户端连接都没有必要在服务器端有一个单独的端口号,因为服务器已经可以通过客户端IP地址和客户端端口号来唯一地标识每个客户端连接。无论应用层协议如何,TCP (和UDP)套接字都是这样工作的。

票数 8
EN

Stack Overflow用户

发布于 2014-11-16 06:31:11

应该是,套接字编程的一般概念是端口80用于侦听传入连接。但是,在服务器接受连接后,它将使用另一个端口(例如端口12345 )与客户端进行通信。

不是的。

但是,当我查看wireshark时,服务器在通信过程中总是使用端口80。

是。

我在这里很困惑。

只是因为你的“一般概念”不正确。接受的套接字使用与侦听套接字相同的本地端口。

那么,如果https://www.facebook.com:443在一秒钟内有数十万次与it的连接,那该怎么办呢?单港口能否处理这么大的交通流量?

端口只是一个数字。这不是身体上的东西。它没有处理任何事情。TCP基于元组{源IP、源端口、目标IP、目标端口}标识连接。只要整个元组是唯一的,就没有问题。

票数 3
EN

Stack Overflow用户

发布于 2014-11-16 06:06:56

端口是一个虚拟概念,而不是硬件资源,在一个端口上处理10000个连接并不比在10000个端口上每个连接更困难(可能要快得多)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26954348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档