当咱们谈网络时,咱们谈些什么(1)--咱们如何接入因特网

博客新址,这里更有趣算法

以前对于黑砖头书,一直有种抵触感,看着看着就不想看了,总感受TM这么厚,何时能看完,看着就愁,暑假,硬着头皮啃了《Thinking in Java》,还有《Head First设计模式》,边作笔记,边读,这样仍是蛮有成就感的,要不单纯的读,读到后面,忘了前面,这样反而对本身作这件事情产生了怀疑,和身边的几个大牛交流,给予的反馈是,看编程方面这些书,若是不是马上去实践,忘记很正常的事情,想起了知乎上一个关于读书有什么用的回答?咱们忘掉的每每是那些细节,而潜移默化的改变了咱们的思考方式。我的认为对于编程的方面的学习就是创建一个知识框架,而后大脑中有了个框架,去实践,根据实践中遇到的问题,去具体的章节进行反馈,若是是要搞Android,要学Java上来就看《Thinking in Java》,势必是一很痛苦的,若是先找一本基础的书籍把体系创建起来,而后去实践开发,遇到具体的问题去书中反馈,效果就会很好。回到正题。装逼采用了春上春树的命题方式,想着来将最近读的《计算机网络--自顶向下方法》结合现实中咱们网络请求的整个过程作一个梳理。编程

上面都是废话。设计模式

接下来咱们从咱们在浏览器中输入一个URL,到咱们获得一个页面开始讨论,内容中若有错误,欢迎各位指正。以百度为例。从如何接入网络到数据返回给咱们这个过程。浏览器

主机如何上网

首先咱们要考虑的一个问题就是,咱们的主机如何连入到网络之中,也就是为何当咱们将电脑链接网线以后,咱们就能够上网了,这个过程发生了什么?服务器

网络请求

首先根据上图,咱们来一个总览,当咱们的电脑经过网线接入的时候,是如何获取到IP的来上网的,当咱们用手机链接wifi又是如何获取IP来上网的。网络

拨号链接

对于拨号链接,当咱们电脑链接网线,而后开始进行拨号链接的时候,咱们的电脑此时在拨号未成功前已经进入了一个网段,可是不能上网的缘由就是咱们没有IP,即便咱们的请求能够出去,它也回不来,没有源IP地址,返回的数据是没法找到咱们的,而后这个时候,若是要上网,获取IP是迫在眉睫的事情了。当咱们在咱们家中上网的时候是如何获取的呢?架构

先看下咱们小区网络设施的架构是如何?框架

咱们的每个小区中有一个路由器,路由器是具备IP和Mac地址的,而后咱们的小区中还有一个交换机,交换机是没有IP和MAC地址的,其做用是根据咱们来的数据包进行一个针对mac地址的转发,其中存放的是MAC地址和对应的转发接口,这个时候可能会存在的一个疑问是为何不直接用路由器进行转发而还要用交换机呢?学习

路由器和交换器的不一样spa

  1. 路由器是能够替代交换机的,可是交换机是不能够替代路由器的,路由器至关因而网桥,而交换机则至关于一个增强的集线器。

  2. 路由器是根据网络IP地址进行转发,属于网络层。而交换机是根据MAC地址进转发,属于链路层。

  3. 路由器能够自行拨号,而交换机则不能够。经过路由器,咱们将路由器的wan口链接到网络,lan口链接咱们的电脑,进入咱们的路由器配置界面,此时,路由器会自动的检测咱们的上网方式,而后根据咱们输入的相应的参数进行一个链接,这个时候,咱们上网就不须要本身配置了,直接就能够上网了。

  4. 路由还能够提供防火墙的功能。而交换机不能够。

  5. 交换器具备自学习功能,而路由不具有,从交换器流过的数据报,其mac地址会被记录下来。

为何要用交换机

交换器经常使用来组建一个局域网,而后经过路由器将其链接到Internet上去,说了其不一样,可是为何要用交换机呢?它能干的事情,路由器都能干,并且路由器还有其不少没法实现的功能。缘由就是其处理快速,价格便宜,其根据帧中的MAC地址识别转发接口的算法简单,而若是将这些所有让路由器来承担,这样就要精确的保存,该小区中全部用户的IP地址,而且每个IP地址,咱们都须要进行一个比对,肯定从哪一个接口中出来,由于不在是第一个区域的ip表示,没法经过前缀辨别了,因此须要对每个ip都预留一个惟一的端口,这样当咱们的小区中新添加了用户,那么就须要单独有一根线从路由器中出来链接向它,这样一个小区就须要不少台路由器来作这个操做,可是当咱们使用交换机就可有效的解决这个问题,咱们将每全部的用户经过交换机进行链接,交换机的另外一端和路由器进行链接,这样路由器就能够经过前缀匹配将数据报发给一个交换器,而后交换器负责分发,这样即便用户增长,其只须要链接到交换器,而不须要到路由器拉根线过来。这样能够减小了路由器数量上消耗,下降了成本,提高了速度。

开始获取IP

当咱们接入到了网络中以后,咱们的操做系统生成一个DHCP(Dynamic Host Configuration)报文,发向DHCP的服务器的67端口,可是咱们怎么知道DHCP服务器地址呢?咱们是不知道的,所以采用方式是在咱们本地的68端口,生成一个UDP包,其目的IP字段填写的IP地址是255.255.255.255,而后向全子网进行广播经过发送以太网帧,该帧的目的MAC地址是FF:FF:FF:FF:FF:FF,此时局域网中的主机收到后,是不会进行处理的,而后传到路由器,路由器接收到以后,检测其包含DHCP请求,而后交给上层处理,此时发送给DHCP服务器,这个时候,服务器接收到DHCP报文,会返回一个回应报文,其中包含分配给它的IP地址,DNS服务器地址,默认网关路由器IP地址,也就是第一跳路由器的IP地址,这个时候,开始返回报文,报文如何找到是那一台主机发出了这个报文呢?没有IP地址,可是它有默认网段路由器地址,也就是第一跳路由的地址,获得这个地址后,填充发送过来的源的MAC地址,而后返回,这个时候,到达路由器以后,发送到交换器,由于交换器具备自学习功能,也就是谁从它走过,它都是会记录下来的,并且会记录下从哪一个接口进入,什么mac地址从哪个接口进入,而后什么时间进入的,经过这个表,咱们就能够将信息转发给咱们的目的广播主机。此时咱们就拿到IP和DNS服务器的地址,和咱们默认网关的地址。

有了IP地址,咱们接下来就能够访问网络了。可是还有一个问题是当咱们拿到了网关的IP,可是殊不知道网关的mac地址,而咱们和网关处于同一个局域网下,所以咱们须要获取到其mac地址,才能够在链路层级上和其进行通讯,所以,这个时候出现了ARP,咱们将要找的IP地址广播出去,这个时候局域网上的各个主机将会根据其中的IP地址进行一个回应,若是是本身的将会返回一个mac地址回去,咱们会将其存放在一个ARP缓冲区中,而后下次若是须要就不须要再去寻找,直接经过mac地址就能够找到。

无线链接

WIFI

咱们经过咱们的wifi进行链接上网的时候,和该过程不一样,咱们的发送wifi信号的AP自己是具备IP地址的,在其下面的链接的便携设备的IP是采用NAT协议(Network Address Translation)来给咱们本地的便携设备生成一个ip,而后经过这个ip进行标记每一个接入设备。讲到NAT,可能会想到一个问题,为何有mac地址,而要用IP地址呢?缘由是MAC地址的分配是不规则的,没法根据一个mac地址来肯定其存在的位置,因此找起来是很是费力的。可是若是在一个wifi下的话,在查询上这应该不是一个问题了,为何还用用ip,经过mac地址,再去广播,确认接收,不也是能够的吗,可是当咱们最初没有分配IP的时候,怎么经过IP找呢?只能经过MAC地址去找。

如何接入?

首先,每一个AP设备会会周期性的发送一些信表帧(SSID,MAC地址),而后咱们的便携设备会扫描全部的信道获取该区域内的全部信标,也就是咱们手机开机wifi的时候,咱们看到的名字是ssid,mac地址,咱们看不到的,而后咱们与之创建关联,便可发送数据。咱们请求的数据报,会被路由进行伪造,而后经过路由器的IP发送出去,回来的时候进行解包,分到每个设备上。

WLAN

咱们使用的移动的WLAN虽然都是经过咱们的wifi能够搜索的到,可是其实现是不一样的,对于WLAN,其被咱们找到的过程和咱们链接wifi是同样的,可是其并不经过NAT协议,而是咱们借助于它做为一跳路由,向DHCP服务器获取一个IP,这个过程和咱们经过拨号接入大体相同,惟独不一样之处在于咱们和第一跳路由的链接方式,一个是有线,一个是无线的,无线的如何维持这个链接和避免信道冲突的,将在后面具体细说。

下一篇文章写如何根据URL从DNS获取IP地址

相关文章
相关标签/搜索