我认为这是一个非常经典的问题,但是,由于我有一定的背景知识,我的词汇量不足以在网络中正确搜索和理解。

我说有一个使用192.168.0.1(IP.1)和192.168.0.2(IP.2)的家庭网络,我们都在玩Counter Strike完全相同的外部服务器。

我的家庭路由器如何知道该数据包将到达IP.1?我经常阅读有关NAT和xxx.xxx/y地址的内容。 ** TCP / IP堆栈中的/ y部分写在什么地方?

我们是否需要绝对NAT?我从Wikipedia文章了解到,当某些计算机关闭时,NAT可以优化IP地址。是否还允许仅使用1个公共IP来连接5台设备?

评论

一对多应回答您的问题。此外,家庭联网和入门级教育问题也不是该网站的最佳选择。

#1 楼

(下面,我将忽略任何DNS查找或第二层操作,因为这与NAT故事无关。)

任何TCP连接都是由四个部分组成的元组:

<source IP> <source port> <destination IP> <destination port>


简而言之:目标IP用于将数据包发送到正确的机器,目标端口用于将数据包在该机器上发送到正确的程序/会话br />源IP用于了解将答复发送到哪里。源端口也是如此。发送答复后,只需交换源和目的地。

让我们从两台没有任何NAT的计算机开始: />
Web服务器具有IP 1.1.1.1

HTTP的标准端口是3.3.3.3


当计算机请求网页时,它将首先选择随机范围(1024-65535)中的随机未使用端口号。让我们选择80。然后,将发生以下顺序:
计算机将其数据包发送至:源IP 2345,源端口1.1.1.1,目标IP 2345,目标端口3.3.3.3。数据包到达Web服务器,它看到它自己的IP和端口80,因此它知道这是对网页的请求。
然后,Web服务器以带有源IP 80,源端口80,目标IP 3.3.3.3,目标端口1.1.1.1的数据包的形式发送回网页。由于端口号2345,计算机接收到了这些数据包,并知道了请求的网页。

这些端口组合通常这样写:23451.1.1.1:2345。 ,互联网上的计算机数量远远超过可用的IPv4地址数量。为了保留地址空间,引入了一组专用地址范围,这些地址范围可自由用于地址共享。这些范围被称为RFC1918,它们是以下内容: 10.255.255.255

这些地址在Internet路由表中不存在,因此,如果您发送的目标地址在Internet骨干网的这些范围内的数据包将被丢弃。这是因为数百万人使用相同的地址。这些地址需要翻译成对互联网有用的东西。这是网络地址转换的来源:

我们有两台计算机:


A:3.3.3.3:80和B:192.168.0.1

网关的公共IP为192.168.0.2
两台计算机都希望来自同一服务器的同一网页。

首先两台计算机选择一个随机端口:例如:1.1.1.1192.168.0.1:2345。计算机A发送它的数据包,其中包含源192.168.0.2:5432和目标192.168.0.1:2345。网关将此数据包转换为源3.3.3.3:80目的地1.1.1.1:2345,并记住对此组合的所有答复都将传递给3.3.3.3:80。因此,当它收到带有源192.168.0.1和目的地3.3.3.3:80的答复时,它将把它转换为源1.1.1.1:2345和目的地3.3.3.3:80并发送数据包。计算机B发送带有源192.168.0.1:2345和目的地192.168.0.2:5432的数据包。网关将此数据包转换为源3.3.3.3:80目的地1.1.1.1:5432,并记住对此组合的所有答复都将传递给3.3.3.3:80。因此,当收到源192.168.0.2和目标3.3.3.3:80的回复时,它将转换为源1.1.1.1:5432和目标3.3.3.3:80并发送数据包。

如果两台计算机碰巧选择了相同的源端口号,网关将简单地选择另一个免费的随机源端口号,并记住还要转换该端口号。有时将其称为PAT(端口地址转换)。这基本上是NAT的子集。

这一切有几种实现。网关可能只记住“计算机X使用了源端口Y”并将带有端口Y的任何内容转发到计算机X。它可能记住了计算机X使用了源端口Y和目标Z”并且仅将任何内容从端口Z转发到端口Y到计算机X。或者,它可以记住整个元组,仅将匹配整个源/目标IP和端口的流量发送到计算机X。

评论


谢谢。我认为任何客户端都会将其端口80发送到另一个端口80。我认为很多非专家都这么认为。

–尼古拉斯·佐佐(Nicolas Zozol)
2014年6月2日在20:09