【超好懂】计算机网络 - 01 网络与子网

基本名词概念

首先介绍一下一些基础的名称

计算机网络:计算机网络由节点(node)和链接的链路(link)组成。

节点:可以是计算机、集线器、交换机或路由器。

链路:网线、光纤、Wi-Fi等。

报文:datagram,指一个完整的消息数据。很广泛,在网络层,IP数据报是一种报文;在传输层,UDP的数据单位也是一种报文。

网络

网络的诞生

两台电脑想要互相连接,只要拿一根网线把两台电脑连在一起

有三台电脑要互相连接,那就是每台伸出去两根网线.....以此类推,有n台电脑,就需要每台电脑伸出去n-1条网线分别连接除自己之外的每一台电脑

那每个电脑都需要开出去好多个网口。因此,我们需要找一个方法。

集线器与交换机

我们可以这样,使用一个集线器。它只是简单的分线器的作用,把一个接口分成好多个分别连到其他的各个电脑上(直接电气复制,类似直接电线一分二这样,但是一般还会有放大电路来防止信号太弱)。这样就会把内容复制好几份发给其他的每台电脑。

这就叫广播。

但是这样会导致每个数据包都会被发送给所有的电脑,导致每台电脑都收到大量的不是给自己的无用数据包。如何实现类似分好多个网口的那样可以单对单传输呢?

这里就涉及到网络中计算机的识别了。

我们可以给每个设备一个硬件地址,也就是mac地址,用来唯一标识一台电脑。

然后在发送的信息前面加上一个信息头,标识源mac和目标mac。这个就叫做mac头。这个就是五层结构中第二层,也是第一个软件层——数据链路层。

这样,虽然还是每一台电脑都收到发给所有人的数据包,但是电脑看到目标计算机不是自己的数据包就会丢弃。

但是这样依然不是特别好,因为这样依然是会每个电脑都会收到所有数据包,也就是信息轰炸,大量的流量对这台电脑其实是无用的。

这就需要用到交换机。

交换机是带有一点点智能的集线器,刚开机的时候和普通的集线器一样也是全部发送,但是会通过“偷听”数据交流学习,

比如像图中这个交换机它有6个端口,分别连接了不同的电脑。

比如说A给B发数据包,就会从1号端口给交换机一个标明是从aa-aa-aa-aa-aa-aa到bb-bb-bb-bb-bb-bb的数据包,交换机就知道aa-aa-aa-aa-aa-aa是在1号端口了,记录到一张表里面;

然后等一下B又发数据包给A,那就是从5号端口给交换机一个从bb-bb-bb-bb-bb-bb到aa-aa-aa-aa-aa-aa的数据包。这个时候路由器查表发现刚刚已经记录了A(aa-aa-aa-aa-aa-aa)在1号端口,那么这个时候就发给1号端口就行了,并且也会知道B是在5号端口,又把这个记录到表里面。

然后就这样维护这张表,并且进行有选择性的转发,就可以避免。

当然,也可能会有查询不到的情况,这个时候交换机就只能给除了发来的这个端口之外的所有端口都发送一个这个数据包,这就叫做泛洪,这样两种情况来确保如果目标mac计算机在这个网络中,那么它一定能够收到这个信息。

同时,为了避免我们把网线拔了换到别的接口上去了,但是还是发往旧的端口的问题,路由表的记录有一个老化时间,一般是5~10分钟,超过这个时间就会被丢弃。

但是后面,要连接的电脑越来越多。这个时候可以直接使用一根线把两台交换机的两个端口连起来。

这个很好理解,这个时候在路由器中这个蓝色的线的端口在表中对应的就不是一条记录了,另外一台交换机上的所有设备都会对应到这个端口。

交换机只关心mac地址,不关心更高层级的东西比如IP地址等,所以在网络中它叫做二层设备。(属于数据链路层,也可以说是四层模型里的网络链路层)

IP的诞生与网络层、路由器

但是,随着主机的数量越来越多,网络设备就越来越多了,单独靠MAC地址就会比较吃力了。

一来,MAC地址是扁平的,并没有从属关系、记录网络结构等,这也是因为整个二层网络都是一个整体大网络,没有子网什么的,这意味着每个交换机得记录一遍全世界所有网络设备的MAC地址对应的端口号、它在哪里等,这个表将会大到不可能存放。

二来,MAC地址是标识设备的,也会带来坏处,意味着如果设备一旦发生移动,换到别的网络去,或者更换了网络运营商,上面说的全世界的路由表都要跟着去改变。

因此,必须要引入一种带有层次的、灵活的网络协议,其包含一个不与硬件绑定的地址。这就是第三层网络层以及IP地址。IP网络高效地把网络设备高效且有层次地组织起来。灵活主要体现在它的数据头有可变长度的可选部分,具体看后面讲网络协议结构的地方。

IP这个词通常不是特指IP协议本身,而是泛指一切与之关联的内容。

IP有两个作用,一是在网络层为设备提供了一个逻辑地址,二是负责数据包的寻址和转发。

IP头会有一个SIP(Souce IP)和一个DIP(Destinate IP),分别是源IP和目标IP,这是每个数据包的一个内容。

IP地址与子网、子网掩码

IP地址

IP地址和子网掩码一般都写成类似123.123.123.123这样的形式。

这个是为了方便看的十进制形式,实际上是一个32位(4字节)的数(IPv4),

子网掩码

子网掩码(Mask)就是标识它的IP地址哪些内容是变化的,哪些是不变的。通常常用的就是255.255.255.0,展开来就是11111111111111111111111100000000,前24位都是1,那么一定是前面24位(3字节,也就是前面三个数)不变,后面一个变为0.

比如说我们是192.168.2.5,要知道自己所属的网段,那么就192.168.2.5 & 255.255.255.0,得到的是192.168.2.0,这个就是我们所属的网段。用0称呼一个网段,不会分配给某一台设备。

然后如果我们需要发送东西给别人,就会分别和子网掩码按位与,如果它们相同就会视作是在同一个子网,不同则称为不在同一个子网。

然后还可以用1的数量来表示子网掩码,比如24来表示255.255.255.0。然后可以用192.168.1.0/24表示拥有192.168.1.1~192.168.1.255这255个IP地址的这个网段。

如果想要增加子网中IP地址的数量,只需要把子网掩码小;如果想要减少子网中IP地址的数量,只需要把子网掩码调大。

一个IP地址有网络位和主机位。

网络位就是一个网段,就是比如说192.168.1.0~192.168.1.255,前面3段是不变的,它就可以包括一个范围。这也就是一个子网。

主机位就是变的那个部分,列出来用来给各个主机编号。

网络号就是指这个网段的名称,比如说我们说192.168.1.0/24这个网段,它的网络位就是前面的这24位,网络号就是这24位的内容即192.168.1.x。

需要注意,IP地址是IP地址,但是任何设备在使用IP的时候必须有一个子网掩码,用来实现前面说的判断目标IP是否在同一子网来判断交给谁发送。192.168.1.2/24这样的写法通常是用来配置比较方便,比如说

ip addr add 192.168.1.2/24 dev eth0

网关

子网的概念很重要。TCP/IP协议规定,不同子网之间是不可以直接通信的,需要通过网关来转发。

网关会有两个接口,分别有一个属于两个子网的IP地址,比如它同时接入10.0.1.0/24和10.0.2.0/24这两个网络(这两个IP表示一个网络),它的两个网口的IP地址分别是10.0.1.1/24和10.0.2.1/24,这样就可以在两个网络之间转发数据包。

网关的作用就好像是小区门口,它连接了多个小区(网络),我们要去到别的小区里,首先要去到自己所在小区的门口比如去到10.0.1.1这里,然后走出去,再走到另外一个小区的门口,走进去。

这就叫做跨越三层网络(网络层)去寻址的。

因此发送数据的时候,计算机会先根据目标IP地址判断是否和自己是同一个子网,如果是那就直接从网卡发出,否则就会发送给网关,修改了目标mac为网关的mac地址,但是保留目标IP。这样做是为了让这个数据包物理上到达网关。

网关再通过路由表查询到这一包数据属于子网2,然后再把目标mac改为目标计算机的mac地址、源mac改为网关自己的mac,然后从连接到子网2的接口发出。

这种通过IP来判断如何发送的行为,称为路由。

以上是IPv4的写法,如果是IPv6的话,

单播、广播、主播

除此之外还有两种分类:

网络地址:网络位不变,主机位为全0,表示一个网络,比如192.168.1.23/24所在的网络需要使用192.168.1.0/24来表示,它是称呼一个网络,代表192.168.1.0~192.168.1.255这一个范围。

广播地址:网络位不变,主机位全为1,表示广播给网络内的所有设备。

剩下的普通的地址称为可分配地址,可以被分配给各个设备。

“播”(cast)是数据链路层的概念。

单播是发送给一个特定主机,目标地址是一个特定的MAC或IP

广播则是发送给网络中的所有主机,目标地址是主机位为全1也就是255这个特殊的IP地址,来表示发给全部设备。比如说192.168.1.255/24表示发给192.168.1.0这整个网络中的所有主机。

组播则是介于单播和广播之间的一种一对多的发送,但是不是对全部所有的设备。

(在IPv6则分为单播、组播、任播)

IP地址的有类编址

通常来讲,我们用得比较多的就是前面这三类可以分配给我们用的。

A类:

(计算范围很简单,最小值就是可以变的都为0嘛,最大就是可以变的都为1嘛。然后最大的那个,我们知道它最大是第一个是01111111,第8位位权是7,27 = 128,所以最大值255-128=127,就可以一下子算出7个1是多少)

观察这个就可以发现,A类它一个网段主机数量是最多的,不是说因为它的IP地址范围最大。而是说,它的子网掩码只有8位,它后面三段都是分配给主机的主机位,不作为区分网络的,所以1.0.1.234和1.22.32.66也在同一个网段里面。

也可以反过来说,在ABC三个类中A也是网段数量最少的,因为它只有8位的网络位,而且首位固定为0,实际只有7位的网段

B类则是有16位主机位,也就是有216个值,减去2个特殊地址,即65534个主机。

C类是ABC中主机数量最少的,因为它只有8位的主机位,256个值,还得减去主机位全0和主机位全1这两个特殊地址(网络地址和广播地址),一个网段一共254个主机。

列:172.16.10.1/16这个B类地址的网络地址、广播地址以及可用地址数分别是?

那么很明显,就是先给他主机位分别置为全0和全1,得到网络地址172.16.0.0、广播地址172.16.255.255.

然后具体网络的划分的话,是美国分走一个范围、中国分走一个范围,等等。一开始是这样随便分的。

后面的话发现似乎要不够用了之后,就分了私有地址,比如常见的192.168.x.x网段和10.x.x.x网段。有很多是这样保留用途的,这样可以不用给每一个都分配一个公网IP

另外,有几个特殊的IP地址

有限广播地址:这个网络位、主机位都是全1,也可以表示广播地址。

环回地址需要注意,上面图中写的是127.0.0.0/8,主机位全为0,代表是一个网络范围,我们一般用里面第一个地址127.0.0.1。

本地链路地址是DHCP自动获取地址失败之后的临时地址,比如说发现给我们分配了一个169.254.0.1为什么还是上不了网,就是这个原因。

子网

为什么要划分子网?就比如说通信公司给用户网络(这里还是最早的情况,每台电脑都能分到一个公网IP)

然后一个大公司有2000人,而好多个小公司每个有20多人。

那么我们知道如果给小公司A类地址或者B类地址,那么可以有几万个主机,显然是太浪费了,我们就给它分一个主机数量最少的C类地址比如说221.5.12.0/24网络,里面有254个可用地址。

而2000人的大公司,C类地址就不够用了,那么我们就给它分一个B类公网地址,比如159.2.0.0/16这个网络,里面有65534个可用地址。

但是我们可以发现,两种情况都会有很多浪费,我们给一个20人的公司分了一整个网段254个地址,给2000人的公司分了一整个网段65534个地址。

这就是依靠有类编址机制来分配的缺点:在实际应用中很难准确匹配可用地址数量, 造成IP地址浪费。

前面提到过,一个有类编址中的可用地址数量是2n-2个,n为主机位数。

也就是说,我们可以把主机位中的一部分借到网络位中,把网络号扩大,

比如说一个B类网络159.2.x.x/16,我们可以多分一点,变成159.2.1.x/24、159.2.2.x/24、159.2.3.x/24等256个子网

比如说一个C类网络221.5.12.x/24网络,我们可以多分3个bit给网络位,变成221.5.12.x/27,也就是说最后这一段这8位有3位是分给了网络位,主机位只有5位了。然后就可以变成221.5.12.000xxxxx/27、221.5.12.001xxxxx/27、221.5.12.010xxxxx/27、221.5.12.011xxxxx/27等23共8个子网了。

图中这样的话,借1位,那么就会分成两半,到主机位128开始就是第二个子网了。

借出去n位,那么:

子网数:2n

子网中的主机数:2k-2,其中k为当前的主机位数。

这样划分子网之后的好处是显著的,不仅可以带来这些好处,而且可以随意调整广播域大小,切分出很多个小的网络号,把不同用途的设备放到不同的主机去,防止广播域过大造成的广播风暴。关键在于,广播域大的话,设备多,谁广播一下喊一嗓子影响到的设备也多,而且设备多的话网络内有设备需要广播的情况也更频繁,两个方面导致加剧了内网中无用广播流量,增加网络负担。

例题:192.168.100.0/24,现在主机位借位两位,请写出划分后子网个数、以及前两个子网的网络地址和广播地址,以及每个子网的可用地址数。

借用了2位,也就是可能性多了22也就是4种。

前两个网段分别是00 000000、01 000000,也就是192.168.100.0/26、192.168.100.64/26.计算过程位

广播地址分别是00 111111、01 111111,也就是192.168.100.63/26、192.168.100.127/26。(计算过程是反过来,减去前面开头的两个为0的位,255-27- 26 = 255-128-64 = 63;255-27 = 255-128=127。或者直接是根据前面网络地址可以看出一个网段64个主机也行。)

那么可用地址数就是6位主机位减去两个特殊地址,也就是26 -2= 64-2 =62

例题:192.168.100.3/26和192.168.100.67/26是在同一个网段里吗?

不是。一定要注意它的这个掩码,它的网络号是从后8位借了两位的。

例题:在现有一个C类网络地址段192.168.1.0/24,请使用可变长子网掩码给三个子网分别分配IP地址。

这个就不是直接像前面这样是直接使用借位的方式来划分来,因为借位只能划分2n个子网,它说是分3个。

我们最简单的方法是就借2位来00、01、10、11分4个嘛,然后舍弃掉一个即可分3个子网。

然后最多也就是10台,肯定是够用的。

例题:在现有一个C类网络地址段192.168.1.0/24,要分给3个部门,其中A部门人数最多有100人,请你确定如何划分子网。

这个的结构就得看人数来了,因为人数超了直接分4个子网的

交换机与路由器的区别

交换机的作用是把数据准确地送到目标设备上,而不是像集线器那样让局域网里的所有设备都收到。

而路由器主要的作用是连接两个网络,在不同网络之间作为通道,比如说让家里的网和外面的网连在一起,也就是作为网关,起到这个网络的出入口的作用。但是注意,路由器不负责同一局域网内数据包的转发!

而为什么我们平时家用的“路由器”就可以转发数据组建局域网呢?因为实际上,我们平时的家用路由器,所谓“路由器”,其实它不单是路由器,也已经包含了交换机的功能,以及无线AP的功能。 它的LAN口之间其实就相当于交换机。 包括一些企业级产品也是这样的。 路由器常常也会承担DHCP服务器的作用,但这不是必须的。

因此,为什么要有MAC也很明显了,因为承担局域网内数据转发的是交换机,而交换机是二层设备,它是基于MAC地址来进行操作的。

更重要的是,MAC地址只在局域网内有效,在传到外网的时候,就需要去路由,这就是依靠IP地址的路由器了,所以IP地址也是必要的。

所以,IP地址和MAC地址缺一不可。

举个简单的例子,我们在局域网内互相发送东西,当然是带IP头的,但是使用的是二层的MAC直接交换机传送,压根就没有解封装到网络层(IP地址)这一层,IP地址在这个过程中压根没用。结合前面IP的诞生部分的描述,应该很容易就理解了。

关键在于IP和MAC分别代表了不和设备绑定、和设备绑定两个角度,分别起到层次与归属寻址、在快要送到时在一个小范围内唯一定位目标

也就是,跨网段传输的时候使用IP地址来路由,但是到了末端的局域网内,则需要MAC地址来完成最后的转发。

路由器的工作包括维护IP路由表、ARP表,如果是前面说的包含交换机功能的路由器还维护MAC表,这几个叫做控制平面,包括这些表的维护:

  • 路由器会接入两个甚至更多个网络,哪个网络对应自己的哪个端口,这就是IP路由表;

  • 任何一个网络设备给别人发东西,一开始只知道IP地址,得通过ARP知道对方的MAC地址然后填到目标MAC上面去。ARP获得的信息也会一条条缓存起来免得每次都要重新请求,这就是ARP表。路由器也是发给别人,也不例外,也得维护这个表。

  • MAC表就是之前说到的交换机维护的实现一收一发的那个,纯路由器当然不维护这个,但是包含交换机功能的路由器里也需要维护这个表。

转发平面

然后把数据高效地转发出去,这叫转发平面。

路由器把数据转发给下一个网络,这叫做“一跳”(one hop)。在一个局域网内的主机之间不是一跳,因为交换机不算hop。

参考文献:

[1] 飞天闪客 - 你管这破玩意儿叫网络 https://www.bilibili.com/video/BV17x6hYZEzJ

在此特别感谢飞天闪客老师的视频,以通俗易懂的动画演示了完整的工作流程

更多游戏资讯请关注:电玩帮游戏资讯专区

电玩帮图文攻略 www.vgover.com