我了解远程机器(例如 Web 服务器)与用户家庭计算机/设备之间的通信只有在用户计算机启动通信时才会发生(假设您的防火墙/网络配置正确)。
然后
- 典型的家庭网络由许多具有唯一 IP 地址的设备组成
192.168.1.1
,例如192.168.1.2
等 - 同一网络通过单个“公共” IP 地址连接到互联网
我很好奇的是,当远程服务器向家用计算机的请求发送响应时,响应数据包如何能够唯一地识别用户计算机 -我在这里做出的假设可能是错误的- 远程服务器只能“看到”整个网络的公共 IP 地址?
答案1
IP 地址并不是远程服务器唯一能看到的东西。它还可以看到港口. 端口是一个16位整数。
把计算机想象成一栋公寓楼。IP 就像街道地址。端口标识哪个公寓。因此,浏览器、邮件客户端等都在属于计算机的一个 IP 上运行,但操作系统会为每个 IP 分配一个或多个唯一端口供使用。
当本地计算机向远程服务器发送数据包时,数据包会从本地计算机的端口发送到远程服务器的端口。防火墙接收该数据包并将其发送到远程服务器,但只有在更改从IP 地址更改为本地网络的公共 IP,也可能改变从端口到防火墙选择的其他端口。
当公共服务器响应时,它会将数据包发送回公共 IP 和它所指定的端口号。防火墙接收该数据包并将其发送到在该端口上发起连接的计算机。
如果防火墙收到一个发往本地计算机未使用端口的数据包,防火墙的任务就是阻止该数据包进入本地网络。它可以默默地丢弃该数据包,也可以大声地向源头发回一条拒绝消息。
一些常见的端口号
当您的浏览器向某个远程服务器发送请求时,该请求很可能会转到远程服务器的端口 80。
- 22 = ssh
- 25 = smtp(邮件)
- 53 = DNS(域名服务器)
- 80 = http
- 194 = IRC
- 220 = IMAP
- 993 = POP(邮件)
通常,低编号端口(最多 1024 个)是保留给操作系统使用的。高编号端口(可能是 32000 到 65535)由用户应用程序(如浏览器)使用。