来自远程服务器的 IP 数据包如何“找到” NAT 防火墙后面的家用计算机?

来自远程服务器的 IP 数据包如何“找到” NAT 防火墙后面的家用计算机?

我了解远程机器(例如 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)由用户应用程序(如浏览器)使用。

相关内容