一、以太网数据帧(数据链路层)
以太网横跨了数据链路层和物理层,这里只做简单介绍,因为普通程序员用不到这一块,除非是做交换机开发的;下图是数据帧的格式。
目的地址和源地址:和IP协议上表达意思差不多,但这里是mac地址。
数据:以太网数据帧的载荷;最小46字节,最大1500字节;这里的大小限制是因为受到了物理设备的特性;46字节是因为ARP,1500字节是因为硬件的限制(和以太网的网口 / 网线这些物理设备有关系),称为“MTU”;在IP数据报拆包组包的过程中,原因往往不是因为自身大小超过64KB了,而是因为MTU的原因。(数据链路层不仅仅只有以太网这种协议,还有许多其他的协议,不同的协议,MTU也会有所差异)。
类型:标识了载荷数据的含义。有以下三种(上图的三种):
IP数据报:如果载荷类型是这个,此时以太网数据帧大概率是能够携带业务数据的报文(大概率携带的是业务数据,也可能携带的是syn这种)。
ARP和RARP可以认为这两个横跨了 网络层 和 数据链路层 的协议。
ARP:效果是让路由器 / 交换机 建立一个内部的结构,可以通过映射,找到mac的地址,映射关系:IP -> mac(类似哈希表这种)。
RARP:效果也是让路由器 / 交换机 建立一个内部的结构,也是映射,不过找到的是IP地址,映射关系:mac -> IP。
前面通过路由表,可以拿着IP查询下一步走哪个网络接口(通常指路由器的 WAN / LAN口);但也还需要根据当前环境,获取当前对应要转发的mac地址(需要知道通向的设备具体的mac地址)。
数据链路层这里,引用的地址协议和IP协议不一样,它有它自己的独立的一套地址体系:mac地址(或物理地址),mac地址 和 IP地址是独立的两条地址体系。
其实这两个地址协议是可以合并在一起的,但是因为历史的原因,这两个地址协议是两伙人搞出来的,而且既然搞出来了,就拿出来用了。
之前说的IP协议 侧重于 全局的转发,从起点到终点,这整个转发过程,是通过IP协议完成的;而mac协议 侧重于 局部的转发,两个相邻的设备之间的转发(一个电脑连着路由器,电脑和路由器就是相邻的关系)。
因为mac地址是6个字节的地址,所以可以表示的地址的个数比IP地址多很多,大概是:42亿9000万 * 65535,所以mac地址还是很充足够用的,这里用的就是静态地址。硬件设备网卡,在出厂的时候就已经把mac地址给写死,所以每个电脑设备上的mac地址都是唯一的,网卡和mac地址也是一对一绑定的;基于mac地址,有些程序,可以通过mac地址来作为你机器的身份表示,例如外挂,只有在你电脑上插u盘才能用,其他电脑插上就不能用,原因就是制作外挂者这里的服务器,用户这边的客户端,服务器利用mac地址就知道哪些人是从自己这买的外挂,然后允许他用外挂(声明:制作外挂、售卖外挂均为违法行为,请遵纪守法,做好合法公民)。
mac地址是用16进制方式表示的,字节之间则是用 “-” 或 “:” 来分隔的,如图是我电脑上的mac地址(Windows系统的物理地址就是mac地址):
这里的mac地址和IP地址也有其他方面的不同,如图是以太网数据帧:
源 / 目的mac地址类似一个小阶段的目标,而源 / 目的IP是类似终极目标这种。举个例子:
我要去陕西,途中我要经过:广东 -> 湖南 -> 湖北 -> 陕西。
这里有不同的阶段,对应不同的mac地址,但IP地址一直都是相同的,如下:
广东 -> 湖南 源IP:广东,目的IP:陕西 源mac:广东,目的mac:湖南
湖南 -> 湖北 源IP:广东,目的IP:陕西 源mac:湖南,目的mac:湖北
湖北 -> 陕西 源IP:广东,目的IP:陕西 源mac:湖北,目的mac:陕西
mac地址和IP地址的不同如上(还有其他的不同),mac地址这里侧重的是局部(相邻)的转发(两个相邻的设备),IP地址这里侧重的是全局的转发,从起到到终点,这转发的整一个过程。
二、DNS协议(域名解析系统,应用层协议)
如果使用IP地址来描述设备的地址,又长又难记,如果访问某个服务器,需要记住它的IP地址的话,就很难记住,也可能记混的现象;所以,有更好的方法:使用域名(word),通过域名,把域名转换成对应的IP地址,就好记很多,也不容易错。
DNS协议就是域名解析的一个协议,在上古时期,那时候是通过host文件,把域名和IP一一对应起来,每一行都有域名和IP,每次访问某个域名,就会通过这个域名,在host文件中查找对应的IP,从而找到这个访问设备在网络中位置。
但是随着互联网发展的越来越快,域名和服务器都越来越多,此时维护的成本就很大,所以大佬们就干脆 搭建一个服务器,提供域名解析的功能(之前的host内容也放到服务器上了),你的设备想要访问某个域名,就会先到域名解析服务器(DNS服务器)上查一下,找到对应的IP,拿着这个IP访问即可。
但是,全世界那么多人,如果都访问这个DNS服务器,那不会很容易挂了,它能抗住这么多请求吗?显然是不能的,其实DNS服务器并非只有一份,而是有很多份。如下解释:
最开始的DNS服务器称为根域名服务器,这里的内容最全,然后各个国家的运营商,就根据这个根域名服务器的内容,搭建出镜像服务器,网民上网时,一般就是访问你附近的运营商搭建的镜像DNS服务器,而镜像服务器也会定期从根DNS服务器中同步数据。
域名还分为一级,二级,三级.....,这样就可以控制每个服务器管理的数据都差不多,如图:
上图的com是一级域名,sogou是二级域名,www是三级域名;其中根域名服务器里的内容非常重要,如果把其中一部分内容删除掉,就可能会导致一个地区 / 一整个国家网络瘫痪,无法上网。而根域名服务器一共有13个,大部分都是美国人维护的,所以,这也是我国迫切要升级IPv6的原因。
有时候会出现一种情况,QQ、微信能等的上去,但是网页却打不开,可能就是你附近的运营商的DNS服务器挂了,这时候我们可以换个DNS服务器地址,如:8.8.8.8,这是谷歌搞得一套DNS镜像服务器,换完后,可能就可以打开网页了。