现在的位置: 首页 > 综合 > 正文

外网的信息是怎么传到我的电脑上的?(已解决)

2012年12月24日 ⁄ 综合 ⁄ 共 1995字 ⁄ 字号 评论关闭

问题描叙:比如我的电脑,处于两层路由下面,第一层路由本地IP:192.168.1.1,第二层路由对于第一层路由的IP:192.167.1.111,第二层路由对于路由下面的路由IP:192.168.7.1,我的电脑本地IP:192.168.7.101,那么外网的信息是怎么传到我电脑上的呢?比如我访问一个网站,网站怎么将返回的信息准确的返回到我的电脑上呢?(这里讨论的不是底层,具体属于哪一层我也不好说,才疏学浅,不好定位,还请见谅!)

已知:某网站外网IP:220.181.111.148,第一层路由的外网IP:60.177.33.204,当然这内网电脑对于外网都是这个IP。查得,本地电脑上的浏览器访问外网,外网检测到使用的端口号为:43403,使用软件检测到我的电脑使用的端口号为:1939。第一层路由本地IP:192.168.1.1,第二层路由本地IP:192.168.7.1。

求:外网怎么将我电脑请求的网页内容发送到我的电脑上呢?

解:做http网站,一般都使用80端口,那么,我们访问这个网站,则是给这个外网IP发送一个或一系列的特定命令。因网站的IP和端口都很明确,因此给网站发送消息就很简单了,IP+端口号。那么网站又是怎么给我电脑发送信息的呢?

首先,我的电脑有给外网网站发送信息,那么,它就知道了我的电脑访问它是使用的什么IP,什么端口。比如60.177.33.204:43403。

当然,最开始时,我还没有使用软件研究端口号。开始时我只知道,内网本地在外网上的外网IP都是相同的,信息怎么发送给特定的电脑呢?开始我有限的知识,只能想到:广播。但很明显,这种方法是不可行的,虽然能够达到目的,但我们本地这么多电脑,都在上网聊天什么的,这样广播起来还怎么上网?

开始时,在网上查,根本就没查到我想要的,或许我没有找对关键字吧,找到的都是怎么连接二级路由什么的。后来在询问别人这个问题时,别人给我提到一个关键词:NAT。我再上网一查,于是一切明了!

结果就是:网络地址转换(NAT)

答:先拿我的电脑给给外网网站发送一条命令举例,我的电脑本地IP:192.168.7.101,使用的端口号为:1939,目的地:220.181.111.148:80。因为中间有路由,那么,这条命令首先发送给第二级路由:192.168.7.1,二级路由收到这条信息后,打开一个端口A,并将端口A映射到我的电脑的1939端口上,即映射到192.168.7.101:1939上。那这条命令的发送地址就由原来的192.168.7.101:1939变成了:192.168.1.111:A。这条命令再由二级路由传给一级路由,一级路由同样打开一个端口:B(43403),映射到192.168.1.111:A。

这时,第一层路由已处于外网,于是将IP地址转为它所处外网的IP:60.177.33.204:43403(B),那么,网站收到的信息显示的IP地址和端口就是:60.177.33.204:43403(B)。网站服务器将收到的命令处理后,将返回的信息(msg)发送给60.177.33.204:43403(B)。一级路由收到后,查找到这个端口号对应192.168.1.111:A,于是将目的地址改为:192.168.1.111:A并发送出去,于是二级路由收到这条信息,并查得这个端口号对应192.168.7.101:1939,并将目的地址改为192.168.7.101:1939并发送出去,于是,我的电脑就收到信息了!

总结:

注:这里,两个路由开通的端口是有时限性的。比如,开通的端口号1分钟(具体多长时间没细研究)没有数据传输,则销毁这个端口,重新分配,则如果这个时间之后,网站还给这个端口发送信息,则网站所想发送到的电脑几乎不肯能收到。

本博客有TCP/IP和UDP的通信例程,使用时,需要至少知道一方的IP地址,和能固定端口。具体使用方法如下:

假设条件也和我一样,或者有更多层的路由,道理是一样的,上层路由对于下层路由来说,上层路由的IP和端口号是知道的!

例如我的电脑作为下层(具体下到多少层?能用就行,多少层应该没关系)路由上连接的一台电脑,IP地址为:192.168.7.101,我的上层(具体上到多少层?应该都可以)路由上的一台电脑IP地址为:192.168.1.103。那么,是用上层路由上的电脑作为服务器,使用某一端口号D通信,可在程序中设置。下层电脑作为客户端,客户端设置好服务器的IP和端口号,例如:192.168.1.103:D,并设置好客户端本地的IP地址和使用的端口号,例如:192.168.7.101:E。

那么,先打开服务器端,再打开客户端,服务器端接收到小心,并且明确客户端对于服务器端是用的什么IP,什么端口号,并且使用此端口号和客户端通信。

例程代码实测,我的电脑能和我上一层路由的电脑通信!

抱歉!评论已关闭.