夜深人静,电视和电脑都已经关机休息,但是我还在默默工作,我安静地趴在你家中的某个地方,7*24小时不眠不休,任劳任怨,目的只有一个,能让你舒服地躺在床上,畅快地刷手机!
没错,这就是我,大家司空见惯的家用“路由器” !
我这么一个价格低廉,其貌不扬,让人想不起来的网络设备,为什么是最牛的呢?且听我慢慢道来。
我的主业是路由器,同时兼任DHCP服务器,交换机,无线AP, PPPoE客户端,防火墙等重要部门的职务。
为了把工作做好,我还必须得实现几个重要得协议如DHCP, ARP, NAT等, 十八般武艺集于一身,是不是很厉害?
对于普通人来说,只需要设置一下宽带账号和密码,WIFI名称和密码,就可以联网了, 岂不知在背后我干了很多的脏活和累活。
比如,你设置了无线名称(SSID),密码等信息,开启了无线广播以后,我的无线AP部门就得开始干活了。
它需要不停地向周围广播信标帧(Beacon Frame),其中包含SSID和MAC地址,还有其它基本信息。然后各种设备才可能发现我,输入用户名和密码,连接上我。
其次,我一般还有通过PPPoE拨号上网的功能,要不然你怎么连接外网?
但是只有这两个功能还远远不够,我还是个DHCP服务器,这个局域网内的IP都由我来发放。
你看这个新连上WIFI的ThinkPad电脑,只有MAC地址,没有IP地址,它需要按照我们网络世界的约定,用DHCP协议获得一个IP地址。
同时这个ThinkPad电脑还可以从我这里获得默认网关的地址,默认网关也是我 192.168.1.1,当它真正上外网的时候,就可以用到了。
电脑有了IP地址,就能上网吗?
不能,因为我给他们发的都是内网地址192.168.1.xx,在互联网上,并不是唯一的。
例如隔壁老王家的Mac电脑的IP地址也是192.168.1.2,和我家的ThinkPad的IP是一样的,怎么区分?如何上外网?
还好,我这个路由器,通过拨号连入运营商网络的时候,获得了一个唯一的外网地址:61.52.247.112。
那我就把这个外网IP地址给大家共享, 共享的办法非常简单,就是通过不同的端口号,把我和各个电脑之间形成对应关系,把大家区分开。
当然我需要耍点儿小手段:
这种方式就是著名的NAT了,网络地址转换。
现在这个Thinkpad正式访问外网,它要把数据发到我的默认网关(192.168.1.1),但是网络世界必须得知道MAC地址,形成数据链路层的数据包才能发送。
ThinkPad没办法,只好动用ARP协议,在局域网中大声呼喊:192.168.1.1,你的MAC地址是啥?
然后我就直接告诉它:192.168.1.1的MAC地址是B4:2E:A4:59:83:A3,记住吧,以后别乱叫了。
ARP是个让人胆战心惊的协议,因为很容易形成ARP欺骗,不信你看看这个文章《一次成功的黑客欺骗攻击,没想到结局如此悲催》
ThinkPad知道了我的MAC地址,把数据包发到我这里,我拆开一看,哦?目标IP地址是外网,于是,我就使用我简单的路由功能,转发到WAN口的外网去,当然在这个过程中,我得用得NAT。
如果你关掉我的路由功能(各个路由器具体做法不同),我就可以变成一个交换机,在数据链路层来转发同一子网内的数据包。我本身还有简易的防火墙,具体细节就不说了,你自己可以登录到路由器的管理端去看看。
无线AP+路由器+交换机+防火墙+PPPoE客户端+DHCP服务器+NAT转换, 怎么样?最牛的网络设备名副其实吧。有人评价我,十八般武艺样样稀松,功能虽多,但都是基本够用。这是自然,对于一个家庭设备来说,能轻松上网就够了,要啥自行车?
对于程序员来说,你把我的功能和相关协议研究透了,也就掌握了一大半网络知识了,机不可失,欢迎来撩。