通常,web服务器通过端口80侦听任何传入的连接。所以,我的问题是,它不应该是,在一般的概念套接字编程是端口80是为了侦听传入的连接。但是,在服务器接受连接后,它将使用另一个端口(例如端口12345 )与客户端进行通信。但是,当我查看wireshark时,服务器在通信过程中总是使用端口80。我在这里很困惑。
那么,如果https://www.facebook.com:443在一秒钟内有数十万次与it的连接,那该怎么办呢?单港口能否处理这么大的交通流量?
发布于 2014-11-16 06:55:28
一个特定的套接字是由一个5元组(即一个包含5个特定属性的列表)唯一标识的。这些财产是:
对于同时打开的套接字,这些参数必须是唯一的。您可能会感到困惑的地方是客户端发生的事情与TCP中服务器端发生的情况。无论所讨论的应用程序协议(HTTP、FTP、SMTP等),TCP的行为方式都是相同的。
当您在客户端打开套接字时,它将为新的传出连接选择一个随机的高数字端口。这是必需的,否则您将无法在同一台计算机上向同一台服务器打开两个单独的套接字。因为这样做是完全合理的(而且在web服务器中非常常见,比如在两个单独的选项卡中打开stackoverflow.com ),而且每个套接字的5元组必须是唯一的,所以使用一个随机的高数字端口作为源端口。但是,每个套接字都将连接到stackoverflow.com. port的will服务器上的端口80。
在服务器端,stackoverflow.com已经可以将这两个不同的套接字与客户端区分开来,因为它们已经有不同的客户端端口号。当它看到来自您的浏览器的传入请求包时,它会知道由于不同的源端口号,它与您一起打开了哪些套接字。类似地,当它想向您发送响应数据包时,它可以通过将目标端口号设置为它收到请求的客户端端口号,将其发送到您端的正确端点。
底线是,每个客户端连接都没有必要在服务器端有一个单独的端口号,因为服务器已经可以通过客户端IP地址和客户端端口号来唯一地标识每个客户端连接。无论应用层协议如何,TCP (和UDP)套接字都是这样工作的。
发布于 2014-11-16 06:31:11
应该是,套接字编程的一般概念是端口80用于侦听传入连接。但是,在服务器接受连接后,它将使用另一个端口(例如端口12345 )与客户端进行通信。
不是的。
但是,当我查看wireshark时,服务器在通信过程中总是使用端口80。
是。
我在这里很困惑。
只是因为你的“一般概念”不正确。接受的套接字使用与侦听套接字相同的本地端口。
那么,如果https://www.facebook.com:443在一秒钟内有数十万次与it的连接,那该怎么办呢?单港口能否处理这么大的交通流量?
端口只是一个数字。这不是身体上的东西。它没有处理任何事情。TCP基于元组{源IP、源端口、目标IP、目标端口}标识连接。只要整个元组是唯一的,就没有问题。
发布于 2014-11-16 06:06:56
端口是一个虚拟概念,而不是硬件资源,在一个端口上处理10000个连接并不比在10000个端口上每个连接更困难(可能要快得多)
https://stackoverflow.com/questions/26954348
复制相似问题