关于 IP 的 11 个问题

一个 IPv4 地址有多少位?

32 位

比如, 127.0.0.1:

1
2
3
4
  127         0    
01111111 00000000
0 1
00000000 00000001

192.168.1.0/24 代表哪些 IP 地址?

192.168.1.0 到 192.168.1.255

192.168.1.0/24 表示所有与 192.168.1.0 前 24 位相同的地址

有 2^(32-24)=256 个这样的 IP 地址

这被称为「CIDR 表示法」

每个 TCP 数据包都有 IP 地址吗?

是的,有两个

下面是 TCP 包的结构:

1
2
3
4
5
6
7
8
9
+-+-+-+-+-+-+-+-+--+-
| Ethernet header |
+-+-+-+-+-+-+-+-+--+-
| IP header |
+-+-+-+-+-+-+-+-+--+-
| TCP header |
+-+-+-+-+-+-+-+-+-+-+
| packet contents |
+-+-+-+-+-+-+-+-+-+-+

IP 头包含一个源和目的 IP 地址,一个 TTL,一个长度字段,以及一些其他东西。

每个 UDP 数据包都有 IP 地址吗?

是的

它的结构与 TCP 数据包相同,只是有一个 UDP 头而非 TCP 头。

每个 IP 数据包都有端口吗?

不是

IP 报头含一个 IP 地址,但没有端口

例如,ICMP 数据包(ping 使用的数据包)有一个IP地址,但没有端口

TCP 和 UDP 数据包有端口

计算机的公网 IP 地址是否允许为10.11.12.13?

不允许

以下 3 个 IP 范围是为私有网络保留的:

  • 10.0.0.0 – 10.255.255.255
  • 172.16.0.0 – 172.31.255.255
  • 192.168.0.0 – 192.168.255.255

127.0.0.0/8 也被保留用于同一台计算机内部的连接。

如果你的计算机在本地网络上的 IP 地址是 192.168.1.123,它向 google.com 发送了一个数据包,当数据包到达 google.com 时,数据包上的源 IP 地址是 192.168.1.123 吗?

不是

192.168.1.123是本地 IP 地址,所以谷歌将无法联系到你的电脑

路由器会改写数据包,将数据包的源 IP 改写为计算机的公网 IP

这被称为「网络地址转换」 或 NAT(network address translation)

是否可以发送一个 2M 的 IPv4 数据包?

不行

IPv4 数据包的长度字段为 16 位,所以最大长度是 65535。

在实践中,数据包往往必须比这个数字更小(常见的限制是1500字节)。

你的 ISP 的路由器使用数据包的哪一部分将数据包发送到正确的服务器?

目的IP地址

它们一般不使用数据包中的任何其他信息。

网站如何知道你所在的国家?

根据你的源 IP 地址

很多服务使用你的源 IP 地址来确定你在哪个国家。这就是为什么很多人使用 VPN:他们通过 VPN 进行代理,从而使数据包的源 IP 地址在一个不同的国家。

将 IP 头中的 TTL 字段被设置为 64 有什么用?

它被允许进行 63 次跳跃

这意味着在它完成了大约 63 跳(到 63 个服务器或路由器)之后,就不会被进一步发送。

TTL(time to live)字段的存在是为了避免数据包在互联网上陷入循环。