LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1722|回复: 5

关于局域网的机器访问外网网站的问题

[复制链接]
发表于 2008-5-12 14:35:49 | 显示全部楼层 |阅读模式
比如局域网里的机器C访问外网网站S,C的IP为192.168.0.100,外网网站的IP为64.233.189.104(google);
那么当C把它的包发送给S首先要经过路由器网关,但是C发送的包里的ip包的源地址是它局域网里的IP
(192.168.0.100),路由器网关会不修改这个192.168.0.100这个只能在局域网内使用的IP就发送包到外面吗?

如果路由器网关不修改感觉不对,这样外网网站可以接收到数据包,但是当它回复的时候目的地址不能是只能在局域网内使用的IP(192.168.0.100)吧
但是假设路由器网关会修改源地址为它自己的公网IP地址,那么当网关接收到外网网站返回的数据包后它就不知道该转发给局域网内的哪台机器了

谁能帮忙解决我的这个疑惑...
发表于 2008-5-12 19:30:55 | 显示全部楼层
不知道这样的解释对不对~
192.168.0.100:8080 ---->192.168.0.1~202.219.245.44:6666---->64.233.189.104:80
网关根据目标主机发回的数据的端口来判断是给lan内哪台主机
比如说lan内有两台主机,192.168.0.100、192.168.0.101同时访问google,则路由器转换后数据可能是这样的:202.219.245.44:6666,202.219.245.44:6667;google服务器就会回应202.219.245.44:6666的连接,返回的数据到网关时网关就把202.219.245.44:6666转换为192.168.0.100
同理202.219.245.44:6667会被路由转换为192.168.0.101
解释的不好还请见谅~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-12 22:36:59 | 显示全部楼层
Post by maxleaf_ye;1848747
不知道这样的解释对不对~
192.168.0.100:8080 ---->192.168.0.1~202.219.245.44:6666---->64.233.189.104:80
网关根据目标主机发回的数据的端口来判断是给lan内哪台主机
比如说lan内有两台主机,192.168.0.100、192.168.0.101同时访问google,则路由器转换后数据可能是这样的:202.219.245.44:6666,202.219.245.44:6667;google服务器就会回应202.219.245.44:6666的连接,返回的数据到网关时网关就把202.219.245.44:6666转换为192.168.0.100
同理202.219.245.44:6667会被路由转换为192.168.0.101
解释的不好还请见谅~~


你的意思是说网关的一个端口对应于局域网内一个客户端咯,是不是呀?
回复 支持 反对

使用道具 举报

发表于 2008-5-12 23:02:40 | 显示全部楼层
2楼的解释的是NAT类型的一种,建议楼主看一看NAT的文档,你的问题就迎刃而解了。
回复 支持 反对

使用道具 举报

发表于 2008-5-12 23:19:03 | 显示全部楼层
恩,如果你的主机是通过路由器上网的话就应该是那样的,当然也可能会有其他的实现方式~~
我猜你想知道的应该就是那个模型了~呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-13 09:45:22 | 显示全部楼层
Post by maxleaf_ye;1848852
恩,如果你的主机是通过路由器上网的话就应该是那样的,当然也可能会有其他的实现方式~~
我猜你想知道的应该就是那个模型了~呵呵


NAT的原理我是知道的,我也知道路由器里的Route和NAT不一样,Route是不修改包里的源地址或者目的地址的,而NAT修改;照这么说的话,我猜工作在网络层的Route只能用在公网IP机器和Internet的之间,就是说IP地址不可以为192.168.0.0/255.255.0.0和172.16.0.0/255.255.0.0;而工作同样在网络层的NAT可以用在局域网和Internet的之间,他会把局域网客户端的192.168.0.0/255.255.0.0和172.16.0.0/255.255.0.0转换成自己网关公网IP,把端口改为映射局域网内的这个客户端的端口号,并且用哈希表以目的地址:目的端口号为键,客户端源端口号(就是包里未修改前的源端口号)为值保存这次的连接关系;当接收到网站发来的数据后NAT在网络层查看TCP里的端口号先确认局域网内的客户端,然后再根据包中的源地址:源端口号从哈希表中找到客户端的源端口号,然后修改TCP里的目的端口号为该端口号,然后再发送给该客户端,NAT在网络层既要修改IP包里的地址也要修改TCP里的端口,并且要用到哈希表结构来临时存储一些连接关系信息,局域网里的客户端和NAT网关的通信只在网络层,NAT网关和目的网站的通信也只在网络层,而局域网里的客户端和目的网站是在传输层使用TCP或UDP协议通信

嗯嗯,差不多实现原理就是我说的这样吧,这次应该算是真正理清了,3Q
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表