计算机网络杂谈

两台电脑,它们如何才能访问到对方?一个数据包在网络中是怎样转发的?
先来看一张图:

计算机网络杂谈_第1张图片
网络流转图

注:
1.图右边访问的虽然是服务器,但其实可以把它换成任何拥有公网IP的个人电脑。
2.图中的交换机可以省略,现在很多电脑都是直连路由器,原因是路由器集成了交换机的功能。

上图是一个常规的网络架构图,当我们要访问一个网站或者一台其他人的电脑时,网络包从我们的电脑出发,经过交换机到达路由器,然后路由器会把数据发送给我们的网络运营商,例如网通,电信。再后面数据就进入了互联网,经过各个路由器的转发以后到达了目的地,此时往往会经过目标服务器设置的防火墙,过滤掉一些存在潜在危险数据包,最后到达要访问的服务器。

整个过程中,数据包从起点到终点是通过IP进行转发到达,但在中间的每个节点之间是通过MAC地址进行转发。

因此很自然的,我们需要一种根据IP查找下一个发送目标的MAC地址的方法,这就是ARP协议,它是专门负责IP跟MAC地址转换的,如下表:

ARP协议:

IP地址 MAC地址 其他信息
10.10.0.1 00-60-97-A5-43-3C ...
192.168.0.1 00-00-C0-16-AE-FD ...

这张表会保存在我们的电脑中,这里如果我们要访问IP地址10.10.0.1,那么我们的电脑就会把数据发送给00-60-97-A5-43-3C机器。但如果在表中找不到要发送IP对应的MAC地址,那么就会进行一次广播,询问目标IP对应的MAC地址。

此外在交换机中也会维护一张MAC表,它在转发数据包的时候会按照这张表从对应的端口把数据发出去(表中的数据可以手动设置,另外交换机也会根据来往的包进行自学习),如下表:

MAC地址 端口 控制信息
00-60-97-A5-43-3C 2 ...
00-00-C0-16-AE-FD 7 ...
00-02-B3-1C-9C-F9 8 ...

当交换机收到数据包是要发送给00-00-C0-16-AE-FD地址时,它会直接把数据从端口7发出。

交换机跟路由器的区别:
交换机:工作在数据链路层,使用MAC地址进行转发。
路由器:工作在IP层,针对网络包中的IP地址进行转发。

路由器中也会维护一张根据IP进行转发的路由表:

目标地址 子网掩码 网关 接口 跃点数
10.10.1.0 255.255.255.0 ---- e2 1
10.10.1.101 255.255.255.255 ---- e2 1
192.168.1.0 255.255.255.0 ---- e3 1
192.168.1.10 255.255.255.255 ---- e3 1
0.0.0.0 0.0.0.0 192.0.2.1 e1 1

从上表可以看出路由表中交换机中的MAC地址表差别很大。

公网IP:其他计算机可以直接访问。
私有IP:在同一个子网里的计算机可以互相访问,但外界无法访问。

一般来说,除了服务器,个人电脑使用的IP都是都是私有IP,外网是访问不到的,私有IP范围如下:
A类地址范围:10.0.0.0 - 10.255.255.255
B类地址范围:172.16.0.0 - 172.31.255.555
C类地址范围:192.168.0.0 - 192.168.255.255
可以查看下自己电脑的IP,看看是不是确实在这个范围内。

私有IP公有IP转换逻辑:
当数据包进入互联网之前,入口的路由器会把私有IP转换成公有IP后再进行转发,这是通过在路由器内部维护一张表,记录端口与私有IP的映射关系来实现的。如下表:

公有地址 端口 私有地址 端口号
198.18.8.31 5436 10.10.1.1 1025
198.18.8.31 5437 10.10.1.2 1025
198.18.8.31 5438 10.10.1.3 2538

如上表,当收到响应数据时,如果是由端口5436接收的,那么就把数据转发给10.10.1.1主机。
这样带来的问题就是必须要先有数据出去,才能有数据进来,因为只有出去的时候才会在这张表里保存映射关系。同时这也说明了一个问题,如果人工在该表中进行配置,那么有机会实现直接让数据进来(之所以说有机会是因为还有防火墙的作用),也就是说访问你的私有IP。

公有IP私有IP的转换逻辑有效的解决的IP不够用的问题。

子网跟子网掩码:
IP是由网络号跟主机号组成的。
IP本身分为A,B,C,D,E五类地址,如下图:


计算机网络杂谈_第2张图片
IP地址类型

其中D类地址和E类地址这两类地址用途比较特殊,D类地址称为广播地址,供特殊协议向选定的节点发送信息时用,E类地址保留给将来使用。这里不做详细讨论。

由上图可以看出,我们常用的IP中,主机ID的范围是由A,B,C三种类型规定死的,这其实在实际使用过程中会很不方便,不能灵活的设置网络ID与主机ID各自分配的位数,因此为解决自由分配主机数量的问题引入了子网掩码。子网掩码是由高位N个1跟低位M个0组成的32位数。计算时只需要把IP地址跟子网掩码取与运算,得出的值就是网络ID,剩下的就是主机ID,这里的M和N是可以按需求自由设置的。

最后再来说说浏览器访问网站时的DNS解析过程,如下图:

计算机网络杂谈_第3张图片
域名解析

注:
1.上图是在没有缓存的情况下,不然就直接返回了。
2.DNS使用UDP协议。

上图中我们访问 www . b . a . com 网址是从左到右写的,但域名的解析过程却是从右到左,而且当我们请求域名服务器的时候,如果找不到,它会返回一个新的域名服务,然后我们再去请求新的域名服务器进行域名解析,以此类推(注意这里是我们再重新去请求,而不是正在访问的域名服务器帮我们去请求)。

鉴于解析过程比较复杂,因此一般来说域名服务器都会有缓存,优先使用缓存中的数据,它会维护一张域名查询表,如下图:

域名 Class 记录类型 响应数据
www . lab . glasscom . com IN A 192.0.2.226
glasscom.com IN MX 10 mail.glasscom.com
mail.glasscom.com IN A 192.0.2.227

其中CLASS列中IN表示互联网类型,记录类型中A表示IP地址,MX表示邮件服务器。

你可能感兴趣的:(计算机网络杂谈)