上一篇文章,我们顺着计算机网络的发展,一直谈到了为何计算机网络应该有路由和IP地址,接下来我们接着上一篇继续往下讲
路由&&IP
上一篇,我们谈到了交换机没有办法解决广播风暴的问题,所以我们在MAC地址的基础上增加了一个逻辑地址,即IP地址.引入了IP地址之后,所有的通信都要靠IP地址并且,多个广播域之间使用路由器连接,这个网络变成下面的样子.
这样子.一个大的广播域被路由器分割成多个小的广播域.现在两台主机之间的通信根据通信双方是否在同一个网段中分成了两种情况.
主机在同一个网段中
通信主机在同一个网段中,也就意味着通信不经过路由器就可以完成,通信形式跟在交换机中通信差不多,但是由于接收方只知道接收方IP地址.没有MAC地址,发送发没有办法把数据发送给接收方.所以整个通信过程增加了一个步骤.
主机A通过接收方B的IP地址发现接收方跟自己在同一个网段内,但是它只知道接收方的IP地址,不知道MAC地址,所以没有办法发送数据.
于是主机A发起了一个广播询问IP地址为XX的主机的MAC地址是多少
其他主机收到这个广播之后,跟自己的IP地址比对,发现自己的IP地址正是XX,于是就把自己的MAC地址发送给A.
A知道了接收方的MAC地址之后,就可以根据MAC地址向对方主机发送数据.
上面的通信过程,A知道接收方的地址,但是不知道对方的MAC地址,于是发起了一个广播来询问.这种通过目标的IP地址来获得对方的MAC地址的过程称为地址解析协议(ARP).
主机在不同网段中
通信主机在不同的网段中,这就意味着两台主机通信得经过路由器. 如此,通信过程就变成了下面这样:
主机A通过接收方X的ip地址发现,接收方跟自己不在同一个网段中.于是直接把数据报文发送给路由器的端口R1
但是,A只知道路由器接口R1的ip地址,不知道MAC地址(这个时候A跟R1的通信还是在同一个网段中).所以主机A通过ARP协议获取到了R1的MAC地址,然后把数据报文发送给路由器的接口R1
路由器收到数据报文之后,得到接收方的IP地址.判断出接收方IP地址所在的网段,分析出可以通过R2接口可以到达这个网段,于是通过接口R2发送数据
接口R2知道接收方X的IP地址,但是同网段内通信要靠MAC地址,所以R2通过ARP协议获取到了X的MAC地址, 然后把数据发送给X.
根据上面的过程,我们明白IP地址在整个通信中做了两件事:
用来判断通信双方是否在同一个网段中
根据IP地址确定对方的MAC地址,然后才能发送数据.
现在回顾一下上面的通信过程,仍然存在着三个疑点:
路由器中R1跟R2的MAC地址一样么?
路由器怎么知道怎么通过接收方的地址判断出接收方在哪个网段上
为什么主机A判断主机B跟自己不在同一个网段上,就会把数据发送给路由.
主机A为什么通过IP地址就可以确定接收方跟自己是否在同一个网段上
一个一个来回答这些问题:
路由器中R1跟R2的MAC地址一样么?
这个问题的本质是问路由器是否有多个MAC地址.我们这里以家用路由器为例,一般路由器会有两个MAC地址.家里用的无线路由器一般会分有LAN(局域网)和WAN(广域网)两种接口.这两种接口分别各自对应一个MAC地址.
而且,你会发现你家无线路由器会有多个LAN接口,但是WAN接口就一个,其中
WAN接口接的网线是从运行商那里接过来的网线,这个网线通向了整个互联网世界~
多个LAN接口是用于连接你家多台电脑设备的.
所以,你发现,如果WAN口没有接网线,你家多台电脑也可以通过连接LAN互相通信.
路由器怎么知道怎么通过接收方的地址判断出接收方在哪个网段上
跟交换机/网桥类似,路由器内部也维护了一张表,称为路由表,概括的讲,这张表就记录了,这张表记录了哪个网段应该通向哪个接口.所以当路由器得到接收方的地址之后,通过接收方的ip地址比对路由表,就可以确定这些数据包应该发往哪里.
为什么主机A判断主机B跟自己不在同一个网段上,就会把数据发送给路由.
这里要引出一个网关的概念,注意,网关并不是一种网络设备,而是一个概念.但是由于历史原因, 很多时候会把网关称为路由器.除了网关,还有一个默认网关的东西,我们这个问题的答案就是默认网关,当A发现B跟主机不在同一个网络上,所以他没有办法把数据直接发送给B,于是查找一下自己系统里面配置了一个默认网关地址,然后就直接把数据发送给了这个地址.
通过上面的描述可以知道:主机A配置的默认网关地址就是路由器的地址,当发现接收方不在同一个网络里,主机A不知道要把数据发送到哪里,就把数据发送给了路由器.因为主机A里面配置的默认网关地址就是路由器的IP地址.
数据发送给路由器之后,路由器通过路由表查找接收方IP所在的网段,如果正好路由表里面也没有记录这个IP所在 网段的信息,路由器也会查找自己的默认官网,然后把数据发送给这个网关.
上面的描述,我们可以得出一个结论,一台主机的默认网关肯定和这台主机在同一个网段中,因为主机必须要能够发送数据给默认网关.
最后一个问题
主机A为什么通过IP地址就可以确定接收方跟自己是否在同一个网段上
这个问题,需要展开IP地址的讲解,关于IP地址的内容比较多,独立出一个话题来讲.
IP地址
你肯定很熟悉IP地址,但是不一定系统的了解过.你会经常看到类似192.168.1.1
的字样就是IP地址.但是其实这只是简写,每个被.
分割的每个部分其实是一个字节(8bit)的二进制数.为了人类可以比较容易的读懂IP地址,所以一般写的时候都是使用人类友好的十进制.192.168.1.1
的真正面目应该是 : 11000000.10101000.00000001.00000001
所以你明白了IP地址中不可能出现大于255的数值,因为8bit能表示的最大的值就是255.
一个IPv4地址被分为网络地址和本地地址:
网络地址用来表示不同网络的
本地地址用来表示同一个网络中的主机.
那么如何划分一个IP的网络部分和主机部分呢,这就要引入一个新的东西:子网掩码,你可以经常看到的:255.255.255.0
就是一个子网掩码.
把一个IP地址与子网掩码按照二进制的数值进行与运算就可以得出网络地址.
比如:IP地址为:192.168.1.1的主机A,子网掩码为:255.255.255.0,那么11000000.10101000.00000001.00000001 & 11111111 11111111 11111111 00000000 = 192.168.1.0
,即网络地址为192.168.1.0
,那么只要有另一个主机B的IP地址为192.168.1.X(0<X<255)
那么这AB这两台主机就在同一个网络,互相通信不用经过路由器.有时候,你也会看到这样子的写法192.168.1.1/24
像这种写法就是192.168.1.1/255.255.255.0
的简写,后面使用24表示的就是前面24位为网络位,即子网掩码为255.255.255.0
但是啊,IP地址不止这么简单,虽然IPv4地址一共有:2^32个,但是也不是所有地址都可以随随便便用的,你想想你一台主机搞个1.1.1.1的地址,别人也搞个1.1.1.1的地址,那就有问题了,所以有一个机构ICANN专门来管理IP地址的分配使用.这个机构把IP地址进行了分类,也就是你可能听过的A类,B类,C类地址,这里对这种划分做一个详细的分析.
A类地址:
网络位为8位,即A类地址的子网掩码为
255.0.0.0
现在单独对网络位的8位再进行划分,首位为0,后续的7位可以从
0 000 0001 ~ 0 111 1111
变化,即A类地址位于1~127但是以127开头的地址划分为内部回环地址,不能使用,所以A类地址一共有 2^7-1 = 126个.
每个网络可以容乃的主机位 2^24个,但是主机位全0的位网络地址,主机位为1的为广播地址.所以真正可以容乃的主机为2^24-2
通俗的解释一下上面的意思 :
主机A的地址为:58.1.2.3/8,前面58位于1~127之间,所以这是一个A类地址.
跟主机A位于同一个网络中的IP地址有 : 58.0.0.1 ~ 58.255.255.254,一共有 2^24-2个
上面的范围不包括:58.0.0.0跟58.255.255.255两个地址,因为58.0.0.0是网络地址,58.255.255.255是广播地址.
A地址如果向58.255.255.255发送数据,那么IP地址介于 : 58.0.0.1 ~ 58.255.255.254的主机都可以收到这个数据
B类地址
B类地址的划分方式跟A类地址一样,只是在数据上有差异 :
网络位为16位,即默认子网掩码为255.255.0.0
对网络位的前8位再进行划分,规定前面的2位必须为10,即
10 00 0000 ~ 10 11 1111
,即B类地址位于128~191之间每个网络可以容乃的主机数位 2^16-2个
C类地址
网络位为24位,即默认子网掩码为255.255.255.0
对网络位的前8位再进行划分,规定前面的2位必须为10,即
110 0 0000 ~ 100 1 1111
,即B类地址位于192~223之间每个网络可以容乃的主机数位 2^8-2个
来一道计算机网络考试中必考的题目 : 主机IP为192.168.1.1/24,请问该网络的网络地址是多少,可以容纳多少主机?如果你清楚了上面的过程,可以很容易的得出网络地址为192.168.1.0,可以容纳的主机数位:2^8-2.
子网划分
我们发现A类网,一个网络中就有2^24-2个网络,这些网络地址处于同一个广播域中,显然这是不合理的,而且,很少有机构能够有那么多主机来充分使用这些IP地址,所以.通常情况下,我们需要对这个大的网络进行子网划分.
所谓子网划分就是把一个大的网络划分成多个小的网络,每个网络之间使用路由器来分割.我们使用一个例子来说明.
有一个C类地址:200.1.2.0/24.当前情况下,这个网络有 2^8-2 = 62个IP地址.现在希望把这个网络划分成两个网络.
划分子网的主要做法是:从200.1.2.0中的主机位拿出来若干位当做网络位.具体拿几位根据主机数而定.这里假设拿出2位充当网络位
那么就有00,01,10,11四种可能,但是尽量不去使用00,11的地址,所以现在我们还可以划分成2个子网.
第1个子网IP地址的最后8位:0100 0001 ~ 1011 1110
第2个子网IP地址的最后8位 :1000 0001 ~ 0111 1110
这样子:
第一个子网的IP地址为:200.1.2.65/26 ~ 200.1.2.126/26
第二个子网的IP地址为:200.1.2.129/26 ~ 200.1.0.190/26.
私有IP
考虑一下对于一个公司而言,很多时候需要自己内部进行通信,但是又不想连接到互联网,因为可能造成机密泄露.所以ICANN在分配地址的时候就划分出了一些私有地址,其中规定:
A类地址中 10.0.0.0/8~10.255.255.255/8的地址为私有地址
B类地址中 172.16.0.0/16 ~ 172.31.0.0/16为私有地址
C类地址中 192.168.0.0/24 ~ 192.168.255.0/24位私有地址
什么是私有地址?就是任何人都可以自己组建一个局域网使用这些IP地址,但是不能够 把这些IP拿到公网(即互联网)中使用.而且,路由器碰到这些IP也不会转发.所以你会很经常看到192.168.X.X的IP地址,就是因为当前你是处于某一个局域网中.但是你可能就疑惑了虽然你的电脑的IP地址为192.168.X.X,但是你仍然可以上网.这是因为有一个协议:地址转换协议(NAT).
这个协议大概的作用就是,把私有地址映射到共有网络,典型例子为多台私有地址主机连接到一台具有公有IP的路由器(这个路由器应当具有NAT功能), 所有需要跟外网通信的主机都通过这台路由器,这台路由器会把私有地址转换成公有地址,这样子局域网的主机就可以访问互联网.
但是,这个协议很尴尬 ,因为他的出现破坏了现在互联网环境, 但是由于现在IPv4地址短缺,这个方法又可以有效的缓解Ipv4地址短缺的现状.所以预计在IPv6时代,这个协议就会被时代淘汰掉.
尾巴
到这里,按理我们应该开始讲七层模型,但是后续的章节不会继续写了,因为计算机网络是一门很深的学科,不是在网上找几篇文章就能领悟的,计算机网络作为计算机必修的学科,理应值得花一些时间买上一本好书认真看看.
然而,我为什么写这两篇博客,因为我发现书中的内容很多事时候没有跟生活联系起来,或多或少我们在用电脑的时候都了解过一点路由器,IP地址,网关之类的,但是我在生活中碰到的问题,总是没有办法通过书中的知识来解决,总有一种知识跟真实情况连接不上的无奈感.这两篇就是希望你看完这些之后,懂得了你家网络出现问题到底是哪里出现问题?你家电脑网络配置的每一项是用来干嘛的?当你了解了上面的那些之后,你再去翻阅计算机网络的书籍,就会感觉熟悉很多.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。