查看原文
其他

世界上最牛的网络设备,价格低廉,其貌不扬......

码农翻身刘欣 码农翻身 2021-04-27

夜深人静,电视和电脑都已经关机休息,但是我还在默默工作,我安静地趴在你家中的某个地方,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转换, 怎么样?最牛的网络设备名副其实吧。有人评价我,十八般武艺样样稀松,功能虽多,但都是基本够用。这是自然,对于一个家庭设备来说,能轻松上网就够了,要啥自行车? 


对于程序员来说,你把我的功能和相关协议研究透了,也就掌握了一大半网络知识了,机不可失,欢迎来撩。


相关阅读: 

我是一个网卡

我是一个交换机,集线器你一边儿呆着去

我是一个路由器

一次成功的黑客欺骗攻击,没想到结局如此悲催


往期精彩回顾我是一个线程

我是一个Java Class

面向对象圣经

函数式编程圣经

TCP/IP之大明邮差

CPU阿甘

我是一个网卡

我是一个路由器

一个故事讲完HTTPs

编程语言的巅峰

Java:一个帝国的诞生

JavaScript:一个屌丝的逆袭

负载均衡的原理

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存