路由器如何知道将数据包转发到哪里


67

如果将几台具有本地地址(192.168.0。#)的计算机连接到路由器,并且每台计算机都打开Web浏览器并通过HTTP请求页面,则当发送这些TCP:80数据包时,路由器将使用路由器的静态IP(即提供商指定的IP),因此服务器可以回复适当的地址。

但是,由于TCP标头不包含本地IP地址(是吗?),并且所有计算机都使用端口80,路由器如何知道将HTTP答复转发到哪台计算机?

这与MAC地址有关吗?

这是如何工作的?

Answers:


78

大多数家用路由器都使用一种称为PAT的NAT特例。

您还将看到它被称为NAPT或IP伪装。后三个术语在一般情况下表示同一事物。(首字母缩写-网络地址转换/端口地址转换/网络地址端口转换)

当数据包从您的内部计算机发出时,如您所知,源地址将被重写。源端口通常也会更改为一个较大的数字,并且路由器会保留一个地址转换表。

例如,假设您有一台访问www.google.com的客户端计算机。您的计算机(例如192.168.1.100)查找该地址,并使用随机源端口从您的内部IP地址到端口80上的72.14.204.147建立TCP连接。

对于您的计算机,连接如下所示:

192.168.1.100:37641   <-->  72.14.204.147:80

您的计算机将数据包发送到路由器,路由器会选择一个新的随机高端口并重写数据包。每个出站连接在路由器上都有其自己的端口。然后,路由器将数据包添加到其连接表后,将其转发到您的ISP:

PrivateIP        PrivatePort   PublicIP      PublicPort    Remote          RemotePort
-------------    ----------    -----------   -----------   ----------      -----------
192.168.1.100    37641         *10.6.23.5    59273         72.14.204.147   80

*出于示例目的,我使用了一个以10开头的地址,但是这些地址不能公开路由。该表也有些简化。

对于Google,连接如下所示:

10.6.23.5:59273   <-->  72.14.204.147:80

Google会将其响应发送到端口59273上的10.6.23.5。您的路由器然后在表中查找该信息,并将数据包转发到192.168.1.100:37641。


3
综上所述,路由器使用端口号记住从本地网络外部到内部网络的内容。但是,这并不能解释www.google.com如果我不发送初始请求便如何找到我。换句话说,只有当我最初通过路由器发送请求时,消息才能通过路由器到达我
CodyBugstein 2014年

2
如果您的计算机未启动请求,则@Imray google.com(或Internet上的其他任何文件)都找不到您的计算机。这就是为什么拥有路由器会增加很多安全性的原因。
杰森

6
@Jason这是一个危险的神话。拥有防火墙可以提高安全性。典型的SoHo路由器的工作只是使事情工作,而不是阻止事情工作。请点击此处了解更多信息。
David Schwartz

1
@Jason最好不要删除您的评论,这会使原本值得阅读的讨论变得无法阅读。
barlop 2014年

2
很好的例子,但这是否意味着所有高数量端口始终在我们的路由器上打开?
jiggunjer 2015年

1

局域网与Internet其余部分之间的路由器使用一种称为NAT的技术。

仅摘自有关NAPT的TCP / IP插图集1的摘录,并简要介绍了其简单表亲Basic NAT的缺点:

基本NAT仅执行IP地址的重写。本质上,通常是从ISP提供的公共地址池或范围中,将私有地址重写为公共地址。这种类型的NAT并不是最流行的,因为它无助于大大减少IP地址的需求-全局可路由地址的数量必须等于或超过希望同时访问Internet的内部主机的数量。NAPT是一种更为流行的方法,它涉及使用传输层标识符(即TCP和UDP的端口,ICMP的查询标识符)来区分NAT专用侧上的哪个主机与特定数据包相关联(请参见图7- 4)。这允许大量内部主机(即,数以千计)使用有限数量的公共地址(通常只有一个)同时访问Internet。除非区别在特定情况下很重要,否则我们通常使用术语NAT来包括传统NAT和NAPT。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.