如果我理解正确,应用程序有时会使用HTTP来发送消息,因为使用其他端口可能会导致防火墙问题.但是,如果不与其他应用程序(如Web浏览器)冲突,它如何工作?事实上,多个浏览器一次运行怎么不冲突?他们都监控端口并得到通知......你能以这种方式共享端口吗?
我有一种感觉,这是一个愚蠢的问题,但不是我以前想过的东西,而在其他情况下,当2个应用程序配置为使用相同的端口时,我看到了问题.
有2个端口:源端口(浏览器)和目标端口(服务器).浏览器要求操作系统提供可用的源端口(假设它接收33123)然后建立到目标端口的套接字连接(通常是80/HTTP,443/HTTPS).
当Web服务器收到答案时,它会发送一个响应,其中80作为源端口,33123作为目标端口.
因此,如果你有两个浏览器同时访问stackoverflow.com,你会有这样的事情:
Firefox (localhost:33123) <-----------> stackoverflow.com (69.59.196.211:80) Chrome (localhost:33124) <-----------> stackoverflow.com (69.59.196.211:80)
端口80上不会发生传出的HTTP请求.当应用程序请求套接字时,它通常会随机接收一个套接字.这是源端口.
端口80用于提供HTTP内容(由服务器而不是客户端).这是目标端口.
每个浏览器使用不同的Source来生成请求.这样,数据包使其返回正确的应用程序.
它是标识连接的5元组(IP协议,本地IP地址,本地端口,远程IP地址,远程端口).多个浏览器(或实际上是同时加载多个页面的单个浏览器)将各自使用目标端口80,但是本地端口(由O/S分配)在每种情况下都是不同的.因此没有冲突.
客户端通常选择1024到65535之间的端口.这取决于操作系统如何处理这个.我认为Windows客户端增加了每个新连接的值,Unix客户端选择一个随机端口号.
有些服务依赖于静态客户端端口,如NTP(123 UDP)