IP 和路由
IP 地址和路由如何在互联网络之间传递数据包,以到达互联网上的正确目的地。
什么是 IP 地址?
- IP 地址帮助路由器判断数据应当在网络之间发送到哪里。
- 它由网络分配,并且当你切换到不同网络时可能会发生变化。
- 它的结构帮助 Internet 高效扩展到数十亿设备。
详情
当你访问一个网站时,DNS 会把域名转换为 IP 地址。这个 IP 地址告诉 Internet 目标设备位于哪里。
路由器不理解域名——它们根据 IP 地址转发数据包。每个在 Internet 上传输的数据包都包含源 IP 和目标 IP。
IP 地址具有结构。一个部分标识更大的网络,另一部分标识该网络中的具体设备。这种结构使路由器能够做出高效的转发决策,而不必为世界上的每一台设备都存储一条路由。
与 MAC 地址(绑定到硬件)不同,IP 地址是逻辑地址。它由你的网络分配,并且当你连接到其他地方时可能会改变——例如,从家里的 Wi-Fi 切换到咖啡店网络。
正是这种结构与灵活性的结合,使 Internet 能够在全球范围内扩展,同时仍然易于管理。
公网 IP 与私网 IP
私有 IP 流量进入路由器后,NAT 会重写它,并以公网 IP 形式离开。
- 私有 IP 用于家庭、学校和公司内部,不能在公共 Internet 上路由。
- 公网 IP 在全球范围内唯一,允许从任何地方访问设备或服务。
- 路由器使用 NAT 将私有地址转换为公网地址,用于出站流量。
详情
10.x.x.x、172.16.x.x–172.31.x.x 和 192.168.x.x 等私有 IP 段保留用于内部网络。由于它们在全球 Internet 上不可见,数百万个独立网络可以重复使用这些相同的地址段。
相比之下,公网 IP 地址必须在全球范围内唯一。它们由 Internet 管理机构分配,是直接进行 Internet 通信所必需的。
在典型的家庭网络中,你的设备在内部使用私有 IP 地址。当向 Internet 发送流量时,家庭路由器会执行网络地址转换(NAT),将私有源 IP 替换为路由器的公网 IP。
这种转换使多个内部设备可以共享一个公网地址,同时仍然保持正确的返回路由。
什么是路由?
网络 A
路由器 1
路由器 2
目标
每个路由器都会独立地只检查目的 IP,并将数据包转发到下一跳网络。
- 路由器连接不同的网络,并在它们之间传递数据包。
- 转发决策使用目标 IP 地址来做出。
- 路由器工作在网络层,并忽略像 HTTP 这样的应用层数据。
详情
路由器的职责范围很窄,但非常关键:它会检查传入数据包的目标 IP 地址,并决定下一步把它发送到哪里。
路由器把不同的网络连接在一起,使流量能够超出单个本地网段。没有路由器,通信就只能局限在一个孤立的网络中。
重要的是,路由器不会解析应用数据。它们不会读取 HTTP 头,也不会理解数据包里包含的是网页请求、视频流还是文件传输。
在第 3 层,只有 IP 目标地址才重要。路由器会一步一跳地把数据包转发到目标网络。
路由表
可能有多条路由匹配。路由器会选择最具体的网络——最长前缀。
- 路由表将目标网络映射到下一跳路由器。
- 当数据包到达时,路由器会搜索最佳匹配的网络条目。
- 路由器会使用最长前缀逻辑,优先选择最具体的匹配。
详情
路由表本质上是一张决策表。每一条记录都表示:如果目标属于这个网络,就把它转发到这个下一跳。
当数据包到达时,路由器会将目标 IP 地址与表中的所有已知网络条目进行比较。
如果有多个条目匹配,路由器会选择最具体的那个。这称为 最长前缀匹配。从概念上讲,这意味着描述更小、更精确网络的路由会优先于更宽泛的路由。
例如,如果一条路由覆盖整个组织,而另一条路由覆盖某个部门的子网,路由器就会选择更精确的路径。这样可以让路由更准确、更高效。
数据包如何穿越互联网
- 数据包会经过多个路由器,而不是直接从发送方到接收方。
- 每个路由器都会把它转发到更接近目标网络的一步。
- 完整路径是由许多独立的路由决策共同形成的。
详情
想象一下,纽约的一台客户端向加利福尼亚的一台服务器发送请求。
数据包首先离开客户端设备,到达本地路由器(通常是你的家庭或办公室网关)。然后,它进入你的 Internet Service Provider 的网络。
在 ISP 内部,数据包会经过更大的骨干路由器,这些路由器专门用于处理海量流量。它可能会穿过区域和国家级网络,经过多个中间路由器。
最终,数据包到达拥有服务器 IP 地址的目标网络。最后一个路由器会把它转发到服务器本身。
没有任何一个路由器知道完整的旅程。每个路由器只知道下一步最优的转发方向。
什么是 TTL(生存时间)?
- TTL 是 IP 头部中的一个字段,初始时会设置一个数值。
- 每经过一个路由器,TTL 都会在每一跳减 1。
- 当 TTL 变为 0 时,数据包会被丢弃。
详情
TTL(Time To Live)是每个 IP 数据包内置的一种安全机制。
当数据包创建时,会被分配一个初始 TTL 值(通常根据操作系统不同,可能是 64 或 128)。每当数据包经过一个路由器时,该路由器都会将 TTL 减 1。
如果数据包在到达目的地之前 TTL 变为 0,路由器就会丢弃它,并且通常会返回一条错误消息。
这种机制可以防止无限路由循环。如果路由器配置错误,或者暂时形成了循环,数据包也不可能永远在网络中转,因为 TTL 会保证它们最终过期。
如果没有 TTL,路由错误可能会无限消耗带宽,并使网络的大部分区域变得不稳定。
常见网络层故障
- 错误的目标 IP 可能会导致“no route to host”。
- 路由表配置错误可能会把流量发送到错误的下一跳。
- 如果 TTL 在到达目标之前过期,数据包可能会被丢弃。
详情
如果数据包被发送到了错误的 IP 或不存在的网络,路由器就根本无法找到有效路由。结果是在应用层介入之前就已经失败了。
路由表配置错误也是另一个常见原因。如果路由器把流量指向了错误的下一跳,数据包可能会被错误转发,或者完全丢失。
TTL 过期也会导致数据包丢弃。如果数据包经过的跳数太多——通常是由于路由效率低下或出现环路——它会在到达之前被丢弃。
更严重的故障是网络分区,即由于中断或物理链路故障,网络的两个部分彼此断开。在这种情况下,根本不存在可用路径。
在网络层,故障的含义很简单:数据包无法被转发到目标地址。
IP 与 TCP 的职责
TCP 监控传输并重新发送丢失的分段。
IP 采用尽力而为方式转发数据包。丢失的数据包不会在这里恢复。
- IP 提供尽力而为的传递,不保证到达,也不保证顺序。
- IP 不会重传丢失的数据包,也不会管理拥塞。
- TCP 通过确认和重传,在 IP 之上构建可靠性。
详情
IP 运行在网络层,只关注将数据包从源端移动到目标端。它不保证数据包一定到达、只到达一次,或者按正确顺序到达。
如果某个数据包因为拥塞或路由问题而丢失,IP 不会做任何恢复处理。它只是尽力尝试传递。
TCP 运行在 IP 之上的传输层。它会建立连接,为数据段分配序列号,等待确认,并在必要时重传数据。
TCP 还会确保按顺序交付,并管理流量控制和拥塞控制。简而言之,IP 负责传递数据包,TCP 负责把这些数据包变成可靠的通信。
IP 是无状态的
- IP 不会在数据包之间维护会话或连接状态。
- 即使属于同一个应用请求,每个数据包也会被独立路由。
- 在网络层,数据包的顺序不会被保留。
详情
IP 本质上是无状态的。路由器不会跟踪对话、会话或应用上下文。
当一个数据包到达路由器时,路由器只查看目标 IP 地址,并根据路由表进行转发。它不会记住之前的数据包去了哪里,也不会记住更早的数据包是否成功。
因此,属于同一个请求的数据包可能会在互联网上走不同的路径。它们可能乱序到达,或者有些会完全丢失。
这种无状态设计让路由器保持快速和可扩展。如果每个路由器都要维护每条连接的内存,整个互联网会变得慢得多,也复杂得多。
代价是,可靠性和顺序必须由更高层来处理,而不是由 IP 本身来处理。
问题部分
1 / 5