如果将几台具有本地地址(192.168.0。#)的计算机连接到路由器,并且每台计算机都打开Web浏览器并通过HTTP请求页面,则当发送这些TCP:80数据包时,路由器将使用路由器的静态IP(即提供商指定的IP),因此服务器可以回复适当的地址。
但是,由于TCP标头不包含本地IP地址(是吗?),并且所有计算机都使用端口80,路由器如何知道将HTTP答复转发到哪台计算机?
这与MAC地址有关吗?
这是如何工作的?
如果将几台具有本地地址(192.168.0。#)的计算机连接到路由器,并且每台计算机都打开Web浏览器并通过HTTP请求页面,则当发送这些TCP:80数据包时,路由器将使用路由器的静态IP(即提供商指定的IP),因此服务器可以回复适当的地址。
但是,由于TCP标头不包含本地IP地址(是吗?),并且所有计算机都使用端口80,路由器如何知道将HTTP答复转发到哪台计算机?
这与MAC地址有关吗?
这是如何工作的?
Answers:
大多数家用路由器都使用一种称为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。
局域网与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。
www.google.com
如果我不发送初始请求便如何找到我。换句话说,只有当我最初通过路由器发送请求时,消息才能通过路由器到达我