web服务器只开启了一个端口,他是如何为多用户服务的?

web服务器只开启了一个端口,他是如何为多用户服务的?

一、问题描述

不同主机之间通讯,必须依赖套接字,而端口号是套接字的标识(开始是这样认为的),那么假设web服务器进程,开启了80端口号(即监听80端口号),接着客户端浏览器,打开任意端口,发起TCP连接请求,服务器80端口监听到请求,建立TCP连接,最后通过客户端套接字和服务器套接字进行通信,那么其他用户怎么办? 80端口也被占用,改如何建立TCP连接?现实中大家发送http请求好像都可以使用一样的端口,如80。

二、问题解决

首先,明确几点: 1、TCP套接字的唯一标识是一个四元组(源IP地址,源端口号,目的IP地址,目的端口号) 2、TCP创建连接,会进行“三次握手”, 我们这里暂且把TCP建立连接的报文段称为:称为TCP连接 把TCP承载请求数据的报文段称为:TCP请求

客户端浏览器和web服务器的通信过程是这样的:

在建立连接阶段: 浏览器进程打开任意端口,所有的浏览器都是将TCP连接报文,发送给服务器进程监听的端口(如:80),服务器接受到请求,为每个请求创建新的套接字(依据请求报文的源ip,源端口号和自己的ip、端口号) 在发送http请求阶段: 此时连接已经建立,承载了 HTTP请求信息的TCP请求报文会发送到对应的套接字

因此: 多个不同的套接字可以拥有相同的目的端口号80,由于源ip或端口号不同,TCP套接字就可以唯一标识,通信就可以进行。 同时,一个端口号只能被一个进程所监听

举一反三:其实所有使用TCP的应用程序对的通信都是一样的,分为建立连接和发送数据阶段。 在建立连接时,对于 客户端TCP套接字还没有形成,服务器端进程也是如此,它只是监听80端口而已,把所有目的端口号为80的TCP报文段统统接收,然后去处理,即建立套接字,为套接字分配处理进程。当连接建立时,对应着服务器、客户端套接字的形成,之后的通信,不会将TCP报文段在发送给监听80端口的服务器进程,而是发给与连接对应的套接字


相关推荐

欧足联官方:马竞远征球迷行纳粹礼,罚款3万欧并空场一次
改变世界的十大发明 历史上改变世界的发明有哪些
去韩国免税店必买的东西~韩国免税店十大必买产品!免税店买什么便宜?
快手平台上热门轿车价格揭秘
李复:北宋关学大师的生平与思想
2018世界杯十大后腰与中前卫:丁丁榜首 布斯克茨列第二