我是一个路由器

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看82 回复回复1 收藏收藏 分享淘帖 转播转播 分享分享 微信
查看: 82|回复: 1
收起左侧

我是一个路由器

[复制链接]
大秘小蜜 发表于 2016-8-1 23:46:29 | 显示全部楼层 |阅读模式
快来登录
获取优质的苹果资讯内容
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码
订阅梳理好了的知识点专辑

我就是网卡TP-Link 7954经常和大家提起的网关路由器,  我在网络中的位置是这样的:

我是一个路由器 1

我是一个路由器 - 敏捷大拇指 - 我是一个路由器 1


为啥叫网关呢? 因为大家想上网,一定得经过我这一关~~~~ :-)

这不是开玩笑,确实是这样, 所有的对局域网之外的访问非得经过我不可。

其实我直接和ISP(就是联通)的网络相连,  我从联通那里搞了一个外网的地址: 61.52.247.112 。

可是只有这么一个地址, 我们局域网内这么多电脑, 如果轮流着让每个电脑去用, 那大家可就抱怨死了。

于是我巧妙的构思了一个网络世界,成功的欺骗了TP-Link 7954这些网卡们。




1、NAT (网络地址转换)

还记得上次TP-Link 7954向我要地址的事儿吗?

因为我不仅仅是个路由器, 还是一个DHCP服务器, 掌握着这个局域网的IP生杀大权。

我给TP-Link 7954 分配的IP是 192.168.1.2 , 但是他拿这个地址是无法直接上网的, 因为这是属于我管辖的内网地址, 别的网站像www.baidu.com 什么的根本都不知道!

即使知道了也没用, 因为在这个世界上可能有无数的路由器都会分配192.168.xxx.xxx 这样的地址, 你到底要找哪一个?

所以TP-Link 7954 想上网必须得通过我, 我需要施展一点点小魔法, 比如说它想访问百度, 通过交换机给我发来这么一个数据帧:

我是一个路由器 2

我是一个路由器 - 敏捷大拇指 - 我是一个路由器 2


我把数据链路层的外衣去掉, 发现IP数据包中的目标地址是 115.239.211.112, 我就知道这是要向外网发出请求了。

于是我就把IP数据包中的源地址192.168.1.2 替换成我从联通那里搞到的外网地址  61.52.247.112。

这还不够, 我会创建一个新的端口号2001, 把TCP数据包中的源端口也替换掉, 数据包就变成了这个样子:

我是一个路由器 3

我是一个路由器 - 敏捷大拇指 - 我是一个路由器 3


不知道你看出来其中的奥妙没有,我把源地址和源端口都替换了, 其实我的目的就是让外部的网络认为这是我(路由器)发出的, 他们根本不知道什么TP-Link 7954 这个网卡 !

然后我需要查一下我的路由表,确定到底转发到哪个输出端口去,再给这个IP数据报穿上数据链路层的外衣,把数据包发给了联通的网络, 剩下的事我就不管了。

我是一个路由器 4

我是一个路由器 - 敏捷大拇指 - 我是一个路由器 4


注意看以太网帧的MAC地址, 源地址已经是我了,而不是TP-Link 7954了, 因为这是我和联通网络之间的数据链路。

这个替换源地址和源端口的小把戏就叫做网络地址转换 , 人类简称为NAT

当然不只是TP-Link7954通过我上网, 还有很多别的电脑呢, 我得把我的小把戏记下来 ,形成这么一张表:

我是一个路由器 5

我是一个路由器 - 敏捷大拇指 - 我是一个路由器 5


过了不久, baidu 网站的回复就会通过别的路由器转到我这里,正如你所想的, 我需要反过来处理一遍:

首先去掉数据链路层的外衣,发现TCP和IP数据报中包含这样的信息:
目的地IP : 61.52.247.112 ,端口 2001 。

这时候我就去查表,找到了 192.168.1.2:3345,我就明白这是给TP-Link 7954的信了。

那就再次把数据报中的IP地址和端口号改了吧, 让TP-Link 7954 认为这个数据包就是我给他的。

就这样, 我成功的用区区一个外网的IP就支持了局域网内多个电脑的上网需求, 并且他们根本就不知道是怎么回事!




2、NAT 穿越

欺骗终究是不能长久的, 我的麻烦很快就来了。

TP-Link 7954 所在的机器为了下载一个大电影, 安装了一个P2P软件: 电驴。

所谓的P2P 就是Peer to Peer, 即网络中的机器是对等的。

所有使用电驴的机器不仅仅是一个发起请求下载数据的客户端,他们同时也是一个能够接受请求、向外发送数据的服务器。

这样一来, 当下载大文件的时候, 你就可以从很多安装了电驴的机器上分块下载, 而不是仅仅从一个服务器上下载, 速度快了很多。

人人为我, 我为人人啊。

可是TP-Link7954 很快就发现, 当它试图做服务器的时候, 其他电驴根本就连不上它, 为什么?

因为IP地址是我分配的啊, 是个内网地址 192.168.1.2, 外网的人根本就不知道, 怎么连?

TP-Link 7954 给我发了一封措辞严厉的信件,质问我为什么他没法作为一个服务器接受外边的连接, 这强烈的阻碍了他们下载各种电影的需求。

我估摸着是瞒不住了, 只好把所有的网卡都召集起来,开个会大家商量一下。

我解释说: “现在IP地址很稀缺, 我用这种NAT的方法也是不得已而为之,要不然大家怎么上网啊, 你们之前不是过的也挺好吗? 我听说电驴会占用很大的流量, 我们公司很快就会禁止的。”

D-Link 3925 说 : "公司的政策根本不是你应该考虑的事, 你考虑的是怎么才能让外网的电驴连上我们!"

可是我实在是没有办法, 就这一个外网的IP地址啊。

TP-Link 7954倒是很聪明,他立刻就意识到了问题所在,想出了解决办法:

“这样吧,路由器,你不是擅长搞玩小把戏吗,可以继续玩下去,但是得允许我们这些网卡参与进来玩, 比如说我(ip地址192.168.1.2)会主动的要求你建立一个NAT映射 (192.168.1.2 : 4096) <-> (61.52.247.112: 3001)。

“你还可以保存在你的NAT表中,然后我就会对外通告了,我是一个电驴服务器,谁要是想连接我的话,请到这里来:61.52.247.112: 3001,当外网的连接来的时候, 你必须把连接请求转发到我这里来”

大家一致认为这个方法很简单, 很实用, 就这么决定了。

注:这其实就是UPnP , 你打开你的无线路由器,就能看到 :

我是一个路由器 6

我是一个路由器 - 敏捷大拇指 - 我是一个路由器 6


事情就这么解决了,生活又恢复了平静,当然,我作为一个路由器,这些NAT, UPnP都是我的附加功能, 我最重要的事情还是建立路由表, 做路由选择,转发IP数据包,下次再说吧。




相关内容

我是一个网卡

我是一个路由器

都看到这里了,就把这篇资料推荐给您的好朋友吧,让他们也感受一下。

回帖是一种美德,也是对楼主发帖的尊重和支持。

*声明:敏捷大拇指是全球最大的Swift开发者社区、苹果粉丝家园、智能移动门户,所载内容仅限于传递更多最新信息,并不意味赞同其观点或证实其描述;内容仅供参考,并非绝对正确的建议。本站不对上述信息的真实性、合法性、完整性做出保证;转载请注明来源并加上本站链接,敏捷大拇指将保留所有法律权益。如有疑问或建议,邮件至marketing@swifthumb.com

*联系:微信公众平台:“swifthumb” / 腾讯微博:@swifthumb / 新浪微博:@swifthumb / 官方QQ一群:343549891(满) / 官方QQ二群:245285613 ,需要报上用户名才会被同意进群,请先注册敏捷大拇指

嗯,不错!期待更多好内容,支持一把:
支持敏捷大拇指,用支付宝支付10.24元 支持敏捷大拇指,用微信支付10.24元

评分

参与人数 1金钱 +10 收起 理由
Anewczs + 10 大赞原创!牛!

查看全部评分

美人虞 发表于 2016-8-2 12:37:56 | 显示全部楼层
我是一个交换机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

做任务,领红包。
我要发帖

分享扩散

都看到这里了,就把这资料推荐给您的好朋友吧,让他们也感受一下。
您的每一位朋友访问此永久链接后,您都将获得相应的金钱积分奖励
关闭

站长推荐 上一条 /3 下一条

热门推荐

合作伙伴

Swift小苹果

  • 北京治世天下科技有限公司
  • ©2014-2016 敏捷大拇指
  • 京ICP备14029482号
  • Powered by Discuz! X3.1 Licensed
  • swifthumb Wechat Code
  •   
快速回复 返回顶部 返回列表