学习是一个循序渐进的过程,因为任何不以循序渐进的方式进行的学习,都将出现盲目探索和不成系统的情况,最终学习到的也大都是相对零散的知识,并不能建立起一个系统的知识结构。非循序渐进的学习,也达不到循序渐进学习所能达到的深度,因为后者是步步深入的,每一步都以前一步为基础。
在学习计算机网络的过程中,有很多基础概念并不了解,比如以太网是如何发展为因特网的,这中间出现了什么问题有什么样的解决方案......。因此,本文主要目的是为读者快速扫盲在学习计算机网络中的基础概念,并尽可能的阐述清楚这些概念发展背后的问题背景及原因,在简单易懂的前提下尽量保证概念的深入理解。
同时计算机网络的发展太过于悠久,因此在之后的文章中会介绍无线网,移动蜂窝的概念。
LAN & WAN
lan叫做局域网,wan叫做广域网。
lan可以理解为是一块区域内的计算机通过网线进行连接的网络,也可以理解为是一个企业里面的计算机网络
公司里的计算机通过网线连接到一个集线器上(通过 冲突检测实现多路复用 ,多个设备交换数据通过一个线进行 就是多路复用,因此 同一时间只能有一个设备交换电信号,其他要发送的设备会等待一段时间后在发送 如果 还是等不到,等待的时间会慢慢变大 )集线器链接路由器 ,路由器 会连接到其他设备厂商的路由器(其他路由器下面也是一个lan)上
wan就是通过一个个的lan链接起来的网络
mac地址:以太网协议
首先 每块网卡都有一个mac地址且在物理世界中是唯一的(mac地址通过-分割多个十六进制数,前面的数字代表了这块网卡是那个厂商做的 **)
计算机如果想要介入互联网进行数据传输就需要有网卡,网卡是最终发送数据的设备也是 最开始接触数据的设备**
以太网原型:网线
以太网最初是通过一根网线连接的,还有一个收发器设备是用来连接不同网线之间信号的。这时的以太网发送的网络包都会被这条网线上的设备接受到,通过携带mac头部也就是地址,计算机会判断是不是属于自己的网络包(判断max头部发送方mac是不是自己的发送方发送的数据)如果不是就丢弃这个包,否则进行处理。
以太网的基本性质
包发送到MAC头部的接收方MAC地址代表的目的地,用发送方MAC地址识别发送方,用以太类型识别包的内容。因此,可以认为具备这3个性质的网络就是以太网
ip地址:因特网协议
由于设备的 mac地址 没有规律 ,所以企业 无法对这些 计算机进行有效统一的分组管理 (因为数据很乱,需要像邮政编码那样的数字可以进行分类就很好管理),在这个情况下 出现了ip地址 :
ip地址通过四个8位的二进制数 来表示 (由于是四个所以也叫ipv4):IP地址是一个32比特的整数,每8比特为一组,组间用“.”分隔,分成4段表示。8比特所表示的整数换算成十进制后范围是0~255,因此可用作IP地址的整数是0.0.0.0~255.255.255.255,共计4294967296个。
其中 前三个二进制数代表着网络号 (也就是 lan 这个局域网络的标识 )最后一位代表着 主机号 (也就是 在这个网络里面的具体哪个设备 )。
一个企业里面的计算机ip地址的前三位是一样的,标识的用的同一个网络 在一个网络下,最后一位是代表这个网络下面的计算机唯一标识),这样 通过IP地址就可以轻松地对计算机进行分组管理了。
比如用IP地址中第1段到第3段的数值代表公司,用第4段的数值代表公司内部的计算机。例如,在AAA.BBB.CCC这个公司内,如果有一台计算机的编号是×××,那么它的IP地址就是AAA.BBB.CCC.XXX。而看到了AAA.BBB.CCC.YYY这样一个IP地址,就能知道它是这个公司内的另一台计算机。通常把IP地址中表示分组(即LAN)的部分称作“网络地址”、表示各台计算机(即主机)的部分称为“主机地址”。在本例中,AAA.BBB.CCC这一部分是网络地址,而XXX或YYY的部分是主机地址
子网掩码
从上面可以看到:
- 一个局域网Lan里面的主机数 是有限的(主机数是4个八位的二进制数) **,而且还需要除去头尾和路由器(路由器也是一个计算机,只不过他接受到ip地址以后是做转发其他路由器和分发该网络下的计算机的)**
- 而且出于安全的考虑 直接暴露ip地址中的网络号和主机号有风险 ,同一网络中的计算机可以互相通信 没有进行隔离 。
因此出现了子网掩码,通过掩码可以把一个LAN划分成多个Lan,并且可以对多个Lan进行隔离实现更精细对主机的控制。原理是通过 把掩码转换为二进制,和ip地址对照,其中值都为1的部分代表网络号,否则就是主机号。
所以子网掩码的作用是 标识出在32比特的IP地址中,从哪一位到哪一位是网络地址,从哪一位到哪一位是主机地址 。
把255.255.255.240用二进制表示的话,结果如下所示:11111111.11111111.11111111.11110000,因此255.255.255.240这个子网掩码就表示,其所对应的IP地址前28比特是网络地址,后4比特是主机地址。
dhcp服务器动态分配ip地址:
DHCP的全称是Dynamic Host Configuration Protocol(动态主机设置协议),DHCP服务器上记录着可以被分配到LAN内计算机的IP地址范围和子网掩码的值。
ip地址并 不是固定不变的。 当新的计算机连接到服务器上的时候,会向 DHCP客户端计算机申请一个 ip地址(dhcp内部管理着所有可以用 也就是未分配的网络号和主机号 也就是ip地址 和 子网掩码)。
在网络设置里面可以进行手动设置ip地址和子网掩码,不过大多数情况下选择的还是“自动获得IP地址”这个选项。这个选项使得 *计算机在启动时会去从DHCP服务器获取IP地址和子网掩码,并自动地配置它们,这也是为什么每次启动路由器和计算机 ip地址都不一样(如果你不用就别占着这个地址和掩码)
arp机制和协议:建立ip地址和mac地址的映射
当路由器收到的 ip地址 如果 不是该Lan下面的就会继续转发给上层的路由器 ;如果 是该lan下面的 (通过判断里面的网络号和路由器的网络号是否一致),就 不会通知其他路由器,而是通过广播arp的机制 向该网络号下的(也就是该路由器下面连接的计算机)发送广播。
****
链接的计算机会判断这个ip地址是不是自己,如果 不是自己就忽略 ;如果 是自己就会进行响应,把自己的mac地址告诉给路由器,路由器内部有一个arp缓存表,记录的就是ip地址和mac地址的对应关系 。
这样下次如果还是这个计算机,就不需要广播了,直接去arp表里面找到对应的mac地址发送给他。
路由表 :发送给其他路由器直到找到最终的计算机
路由器 内部除了arp表还有一个路由表,要知道路由器 的概念, 路由路由 就是说可以记录 传输数据经过的路由器 ,在 路由器出厂的时候 会内置一些固定路由器的地址用来接入互联网 。
路由表的组成:destnation表示服务器地址gateway代表要发送的下一个路由器的ip地址也叫网关interface代表使用哪个网卡发送方哪个ip地址 发送包到gateway如果gateway和interface一样,则代表是最终目的地
- 首先通过目的地ip地址找到路由表中的network destination 找到对应的条目(如目的地ip为195.6.32那么找到的destination可能就是195.6,再然后发送到 对应记录的gateway网关ip地址
- 如果gateway和interface一样,那么路由器直接发送到destnation接收方的ip地址即可
通过interface选择要使用的网卡ip地址发送包到gateway(下一个路由器)如果两个相同代表当前路由器就可以直接发送给接收方ip了不需要再接住下一个路由器转发了(也就是说处于同一个子网中)
对于同一个目的地地址 来说在路由表里面有多条记录 (经过不同的路由器,对应路由器的ip地址和掩码)代表着 不同路径,通过权重来用短的路径 发送给适应的 网关ip地址。
路由器也是一个计算机
路由器本质上也是一个计算机,也是通过ip地址和mac地址进行传输数据和通信的;且 路由器也是通过网线连接到一个更大的路由器上面,不断汇总形成一个巨大的广域网络。
每个路由器只会记录自己相邻路由器的信息 ,当路由器在自己的路由表里面找不到对应的路由信息时,就会转发给其他路由器寻找,直到找到。
也就是说 一个网络数据会经历多个不同的路由器才能到达目的地,这中间会 不断更换(ip数据包里面的ip地址和mac地址)
下一个路由器的ip地址和mac地址 到达最后一个路由器的时候 去arp里面找到对应ip的计算机,把ip地址替换成对应计算机对ip地址。
也就是说 通过ip地址的不断变更,数据不断发往其他路由器,最终给到目标计算机。
假如在互联网中只能使用MAC地址,那么会发生什么呢?
在接入互联网的数量众多的计算机中,仅仅是寻找信息的发送目的地就要花费大量的时间。
DNS:中和IP和域名各自优缺点
IP:TCP/IP协议是通过IP地址通信的,但是人们很难记住IP地址,相反使用域名人们只要知道这个服务器网站的名字就可以,很方便也很好记忆。
域名:域名虽然相对好记,但是如果使用域名代替IP地址的话也是可以的(Windows网络原型PC-Networks就是使用域名代替的ip通信的);那么为什么这种方式不用了呢? 这是因为域名的长度不固定需要处理大量的字符,但是IP地址的话就是固定的4个字节的数据,路由器在中转传输的时候压力就会小很多。
结合各自优势来看的话,各有各的好处,但是也有缺点。域名相对于人来说更好记忆,相对路由器来说IP地址处理的效率会更高。那么就需要一个转换的机制来做映射,通过域名查找IP给路由器使用,这个转换器就是DNS服务器。
dns请求格式
先看下dns解析器生成的请求信息格式:
- 域名
服务器名称
- class
识别网络信息,目前只有互联网,该值永远为N
- 记录类型
域名对应的查询类型,当该值为A代表对应的是通过域名查询ip地址,当为MX时代表查询的是邮件服务器名称
查询流程
dns服务器会从资源记录表中查找到请求信息对应的ip地址或邮件服务器名称
如何存储资源记录表
一个dns服务器所存储的资源是有限的,如何能够映射所有的资源?通过层级关系划分,将域名按照.进行分割,每个部分即是一个层次一个域, 最右边的域层次最高依次往左层次下降。
每个域只可以存在于一个dns服务器中,不能存储在多个服务器中;但是一个dns服务器可以存放多个域;可以在域下创建下级域
www.glass.com 其中 com是最大的域结构,接下来下一层去找glass域,那么如何知道存储glass域 ,com域的dns服务器ip地址呢?答案就是域的存储结构
域存储结构
下一层的域要注册到上层域中,这样上层域就可以找到存放下层域的dns服务器ip
从右至左查找,右边的服务器域名最大保管的是下一级的解析这个域名的dns服务器的ip地址,每个计算机dns客户端都会保存一些映射表,互联网里面所有的dns服务器里面就会保存最上层域的dns服务器ip
如果当前有对应的域名映射表就直接返回,如果没有就需要一层一层从上往下查找各个不同层级的dns的ip地址从而找到存储这个域名对应的ip地址dns服务器
还有一个跟域最容易被忽略,在com,cn等服务器的后面还可以在家一个点.代表跟域;跟域保存着com,cn等解析这些域名的dns服务器地址
大致流程:
DNS缓存
每次都从根域进行查找太浪费时间了,因此DNS有缓存功能,缓存最近访问过的域名IP映射信息;但是缓存的信息可能会更改比如域名更换了,因此缓存会设置一个有效期,到期之后会进行清除
客户端在收到对应IP的时候也会有相应的表示此次结果是缓存命中还是所属DNS服务器返回的。
我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!