路由器是如何实现内外网转换的?

当客户端位于一个局域网(LAN)内并使用私有 IP 地址(例如 192.168.1.10)时,通常需要通过一个连接到公共网络的路由器进行外部通信。由于私有 IP 地址不能直接与互联网通信,路由器通常会通过 端口地址转换 (PAT)网络地址转换 (NAT) 来处理流量,使得局域网内部的多个设备共享一个公共 IP 地址访问外部网络。

场景设置:

  • 客户端(LAN 内部设备):

    • IP 地址:192.168.1.10
    • 端口号:50000(客户端的随机端口)
  • 路由器(网关设备):

    • 公共 IP 地址:203.0.113.1(此为路由器与外部网络(如互联网)连接的 IP 地址)
  • 目标服务器(互联网服务器):

    • 公共 IP 地址:198.51.100.10
    • 端口号:80(例如 HTTP 服务)

过程描述:端口地址转换(PAT)

  1. 客户端发送请求(发起连接)

    • 客户端(192.168.1.10)希望访问位于互联网上的服务器(198.51.100.10)的 HTTP 服务(端口 80)。
    • 客户端在本地应用程序中发起连接,向服务器的 IP 地址 198.51.100.10 发送一个 HTTP 请求,源端口号是客户端随机选择的 50000

    客户端发送的原始数据包:

    • 源 IP 地址:192.168.1.10
    • 源端口号:50000
    • 目标 IP 地址:198.51.100.10
    • 目标端口号:80

    路由器接收到这个数据包后,由于客户端的 IP 地址是私有地址(192.168.1.10),路由器需要执行 NAT 操作。

  2. 路由器进行 NAT/PAT 转换

    • 路由器对数据包进行 源地址转换 (Source NAT),将私有 IP 地址 192.168.1.10 替换为路由器的公共 IP 地址 203.0.113.1
    • 同时,路由器还会为每个不同的内部客户端连接选择一个唯一的 外部端口号 ,以便将来能够区分多个来自不同客户端的连接。在这个例子中,路由器可能将 50000 端口号映射到 10000 端口,作为该连接的公共端口号。

    路由器转换后的数据包:

    • 源 IP 地址:203.0.113.1(路由器的公共 IP)
    • 源端口号:10000(路由器映射的外部端口号)
    • 目标 IP 地址:198.51.100.10(服务器的 IP)
    • 目标端口号:80

    路由器将转换后的数据包发送到目标服务器 198.51.100.10 的 HTTP 服务端口 80

  3. 服务器响应请求

    服务器 198.51.100.10 收到客户端请求后,返回相应的 HTTP 响应包。由于数据包的目标端口号是 80,服务器知道这个请求是一个 HTTP 请求,便处理该请求并发送回响应。

    服务器发送的响应数据包:

    • 源 IP 地址:198.51.100.10(服务器的 IP)
    • 源端口号:80(HTTP 服务端口)
    • 目标 IP 地址:203.0.113.1(路由器的公共 IP)
    • 目标端口号:10000(映射的端口)

    服务器的数据包将通过路由器发送回客户端。

  4. 路由器进行逆向 NAT 转换

    路由器收到来自服务器的数据包时,会进行 目标地址转换 (Destination NAT),将目标 IP 地址 203.0.113.1 和端口号 10000 替换回正确的内部地址和端口号。

    路由器通过 NAT 表格查找该数据包的源端口号(10000),并将其映射回原始请求的客户端 IP 地址和端口号(192.168.1.10:50000)。

    路由器转换后的数据包:

    • 源 IP 地址:198.51.100.10(服务器的 IP)
    • 源端口号:80(HTTP 服务端口)
    • 目标 IP 地址:192.168.1.10(客户端的私有 IP)
    • 目标端口号:50000(客户端原始端口)

    然后,路由器将数据包发送回客户端 192.168.1.10 的端口 50000

  5. 客户端接收响应

    客户端 192.168.1.10 收到来自服务器的响应数据包,并成功与服务器完成通信。

相关推荐
m0_7482400227 分钟前
Chromium 中chrome.webRequest扩展接口定义c++
网络·c++·chrome
終不似少年遊*34 分钟前
华为云计算HCIE笔记05
网络·华为云·云计算·学习笔记·hcie·认证·hcs
蜜獾云1 小时前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
小林熬夜学编程2 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
Hacker_Fuchen2 小时前
天融信网络架构安全实践
网络·安全·架构
上海运维Q先生2 小时前
面试题整理15----K8s常见的网络插件有哪些
运维·网络·kubernetes
ProtonBase2 小时前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
fantasy_arch12 小时前
CPU性能优化-磁盘空间和解析时间
网络·性能优化
是Dream呀14 小时前
Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络
网络·python·神经网络
kaixin_learn_qt_ing14 小时前
了解RPC
网络·网络协议·rpc