我认为这是一个非常经典的问题,但是,由于我有一定的背景知识,我的词汇量不足以在网络中正确搜索和理解。
我说有一个使用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
,计算机接收到了这些数据包,并知道了请求的网页。这些端口组合通常这样写:
2345
和1.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.1
和192.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
评论
一对多应回答您的问题。此外,家庭联网和入门级教育问题也不是该网站的最佳选择。