目录
数据链路层
MAC地址与IP地址
数据帧
ARP协议
NAT技术
代理服务器
正向代理
反向代理
上期我们学习了网络层中的相关协议,为IP协议。IP协议通过报头中的目的IP地址告知了数据最终要传送的目的主机的IP地址,从而指引了数据在网络中的一步步传输,而数据链路层作为网络层的下一层,在数据的传输过程中也扮演着重要的角色,具体扮演了什么样的角色,这是我们本期要学习的内容。
数据链路层
通过上图,我们可以知道,主机B将报文沿着每个路由器,最终发送到了主机C。上期在学习IP协议时,我们已经知道当主机B发送数据到路由器F时,路由器会解析出数据中的目的IP地址,然后在自己的路由表中与路由表中子网掩码进行按位与得到目的IP主机对应的网络号再与路由表的目的网络的网络号进行比对,如果比对成功,再去判断路由表的flag字段中是否含有G,如果含有则当前路由器将数据发送给数据的下一跳路由器,如果不含有则证明当前数据要发送的目的IP所对应的主机与当前路由器在同一局域网,所以可以直接由当前路由器进行转发。
所以上节课我们也得出了结论,数据中的目的IP指引数据在网络节点中一步步进行转发,直到将数据发送到目标主机上,上节课我们也提出了数据在网络中由一个节点转发至与之直接相连的下一个节点(数据的下一跳节点)时,数据的转发是通过数据帧进行转发的,接下来我们就要向大家讲述,这个数据帧究竟是什么,以及这个数据帧是如何进行转发的。
MAC地址与IP地址
我们再以上节课的用户手机与抖音服务器的图进行举例。图示如下。
当用户手机上的数据随着网络中的一个个节点传送逐渐的靠近抖音服务器,看似是横跨整个网络的传输,其实也被分成了多个局域网的传输,上述的一个红圈就是一个局域网。为什么这么说呢?
以上图为例,以手机相连的最近的用户路由器会给手机这个主机设备分配一个与自身网络号相同的IP地址,那么手机就与与它最近的用户路由器处于了同一局域网中,后续的用户路由器又被与它最近的运营商路由器分配了与运营商相同网络号的IP,从而用户路由器又与运营商路由器处于同一局域网中,这样依次每两个相邻节点之间都形成了一个局域网,最终与抖音服务器相连的路由器我们称之为入口路由器,入口路由器又为抖音服务器分配了一个与自身网络号相同的IP地址,这样入口路由器又和抖音服务器处于同一局域网中。以上讲述并不是很准确,在后续ARP协议和NAT技术讲解之后,我们会为大家进一步补充数据依次传输的细节。
所以上述图示,就被分成了多个局域网中主机之间的通信(一个圈就是一个局域网)。局域网之间的的主机是可以直接进行通信的。
局域网之间的通信图示如下。
处于同一局域网中的主机之间是可以直接互相通信的,且通信的内容可以被局域网中的其它主机获取到。正如在教室里上课,老师点名了张三,但是教室里的同学都听到了老师点名张三的话一样。
我们规定,在局域网中,主机之间通过mac帧进行数据传输。
好了讲了这么多也妹有说明MAC地址和IP地址是个啥呀,别急,以上只是铺垫。
何为MAC地址?
简单来说MAC地址就是一个物理地址,任何一台主机一生产出来,就会在网卡中标识出唯一的地址,全球唯一,在局域网中通信时,两台主机使用mac帧进行数据传输,而mac帧的报头中需要使用到MAC地址,一个为源主机MAC地址,一个为目的主机MAC地址。
何为IP地址?
IP地址不是主机一生产出来就有的,而是后期相关的厂商进行分配的,IP地址分为私有IP和公网IP,私有IP在一个局域网中一定是唯一的,而在多个局域网中可以重复,公网IP是全网唯一的。在跨网络通信时,一般要使用到IP地址,IP报头中要封装目的主机的公网IP,我们称之为目的IP,目的IP指引了数据在网络中传输的主体方向。
有了以上所有知识的铺垫,我们再来讲讲数据帧的报文。
数据帧
数据帧又称作MAC帧,简单来说就是处于数据链路层的报文,一般情况下mac帧的有效载荷为IP报文,也可能为ARP报文(后续会讲到)。数据帧的报文图示如下。
- 目的地址(6字节):局域网中数据帧要发送的目标主机的MAC地址。
- 源地址(6字节):局域网中发送数据帧的主机的MAC地址。
- 类型(2字节):数据帧的有效载荷一般情况下有三种,一种是IP报文,一种是ARP报文(通过IP地址获取MAC地址),一种是RARP报文(通过MAC地址获取IP地址)。如果是IP报文则2字节类型的值填充为0800,如果是ARP报文,则2字节类型的值填充为0806,如果是RARP报文,则2字节类型填充为8035。
- 数据(有效载荷):46~1500字节,对于IP报文,如果大于1500字节就要进行分片。对于ARP报文和RARP报文,一般情况下为28字节,所以要在报文后加上PAD18字节的填充字段,保证报文的长度为46字节。
- CRC:2字节,用于差错检验,接收端通过CRC检验数据帧的传送是否出现了差错。
ARP协议
主机B发送了一个数据到主机C。其实简单的来说确实是这样,准确的说法就是从主机B开始,一直到数据传送到主机C,是通过了多个局域网,最终才将数据传送到了主机C。更准确的说,其实就是主机B发送了数据帧给路由器F,路由器F先判断数据帧的报头,发送数据帧报头的目的MAC地址是自己所以进行了数据帧的解包,然后通过解包后的IP报文的目的IP地址,将这个IP地址在自己的路由表中进行查询,首先将该IP依次和路由表中的子网进行按位与,得到的主机号与路由表中的目标网络的网路号进行比对,对比成功,然后再去判断flag字段的选项,发现为G,所以当前路由器就对IP报文进一步进行封装成MAC帧,然后发送给下一跳路由器,因为当前路由器和下一条路由器都处于同一局域网(为什么处于同一局域网,在后续讲NAT技术时会讲到),所以可以直接发送MAC帧,后续的转发都依靠上述原则,逐步分析MAC帧报头和IP报文的目的IP,直到数据帧发送到了入口路由器D,路由器D对发送来的数据帧报头进行分析,发现报头中的目的MAC地址就是自己,所以对MAC帧进行了解包,然后对解包之后的IP报文的目的IP进行了分析,与自己的路由表中的子网掩码按位与得到的网络号与自己路由表中的目的网络的网络号进行对比,发现对比成功,然后判断flag标志位,发现标志位为U没有G,所以路由器D就认为目的IP主机与自己在同一局域网内,所以就将IP报文重新封装成了MAC帧,然后将MAC帧直接在局域网内发送给目的IP对应的主机。
好了,那么此时问题来了,封装MAC帧是需要自己的MAC地址与目的主机的MAC地址的,此时路由器D此时只知道目的IP所对应的主机的IP地址,那么如何通过IP地址获取到MAC地址呢?
此时ARP协议就登场了。
ARP报文如下图中的以太网ARP字段所示。
- 硬件类型:硬件类型指的是链路层的网络类型,1为以太网。
- 协议类型:要转换的地址的类型,要转为IP地址,则填充0800。
- 硬件地址长度:对于以太网而言为6字节。
- 协议地址长度:对于要转换的IP地址而言,协议地址长度为4字节。
- op:为1表示ARP请求,为2表示为ARP应答。
- 后面四个就不必多说了,分别为源主机MAC地址,源主机IP地址,目的主机MAC地址,目的主机IP地址。
我们以图示简单的来讲解一下,怎么样通过ARP协议,将目的主机的IP地址转为MAC地址。
ARP协议也是处于数据链路层的协议,在局域网中,刚开始主机A不知道主机B的地址,所以主机A会向主机B发送ARP请求,然后对ARP的请求报文进行封装,封装成了MAC帧,然后在局域网中进行广播,然后局域网的每个主机都会接收这个MAC帧,都以为是发送给自己的,然后对MAC帧进行解包,得到了ARP报文,然后每个主机的ARP协议层首先分析ARP报文的OP字段,发现为1表明是一个请求,然后分析目的IP字段,发现目的IP地址并不是自己主机的IP地址,所以都对该ARP请求报文进行了抛弃,只有主机B发现目的IP与自己的IP地址一致,所以就会接收ARP请求,对主机A做出ARP响应,此时主机B已经通过主机A发送给自己的ARP请求获知了,主机A的MAC地址和IP地址,响应ARP报文中,会将OP字段设置为2,表示这是一个ARP响应报文,同时填充相应的字段,然后封装成MAC帧传递给同一局域网中的主机A,此时局域网中的其它主机也会接收到这个MAC帧,但是当前的MAC帧并不是以广播的形式进行传送的,它有明确的源MAC地址和目的MAC地址,所以当每个局域网中的主机分析到MAC帧的报头的目的MAC地址并不是自己时,就会直接在接收到MAC帧时进行抛弃,而不是解包成ARP报文发送到ARP协议层进行分析之后再抛弃,只有主机A发现MAC帧的目的地址是自己的主机MAC地址,所以会对MAC帧进行解包,解包之后的ARP相应报文会被发送至主机A的ARP协议层,然后会分析ARP协议,发现OP字段为2,表明这是一个响应报文,然后分析得到了源MAC地址,这个源MAC地址就是主机B的地址,所以此时主机A就通过主机B的IP地址得到了主机B的MAC地址。
所以此时也就解释了为什么上图中的路由器D可以通过主机C的IP地址获知主机C的MAC地址从而向主机C发送MAC帧。与此同时,在上图由主机B到主机C,主机B可以通过路由器F给自己分配IP地址,因为DHCP协议,主机B也会获知路由器F的IP地址,所以也会通过类似的方法获知路由器的MAC地址,从而实现局域网MAC帧的传输。往后的路由器F和路由器G,也是会通过类似的方法实现MAC帧的传送,需要注意的是,一般情况下,与主机相连的我们称之为NAT路由器,不与主机相连的我们称之为ISP路由器。NAT路由器的LAN口用于给局域网中的主机分配私有IP,而WAN口会被ISP路由器分配公网IP,而ISP路由器的LAN口和WAN口一般情况下都为公网IP,所以NAT路由器的WAN口公网IP和ISP的LAN口的公网IP一般都是ISP分配的公网IP,切这两个公网IP处于同一局域网,可以发送MAC帧传送数据,WAN口的IP又会被下一个ISP路由器分配处于同一局域网的公网IP,直到到达了最后一个入口路由器,入口路由器一般情况下也为NAT路由器,NAT路由器的WAN口公网IP是上一跳ISP路由器分配的公网IP地址,LAN口是一个私有IP地址,用于为局域网主机分配IP地址。
NAT技术
在学习网络层的IP协议时,我们知道了IP协议的地址是有限的,所以为了解决IP地址不足的问题,我们引入了一个NAT技术,何为NAT技术呢?
如上图,主机A要发送数据帧到服务器。如果主机A发送数据时将数据帧中的IP报文的源IP写成了自己的私有IP,那么将来服务器接收到了数据帧对数据帧进行解包之后,得到了IP报文,发现IP报文的源IP是一个私有IP,那么此时服务器就蒙了,因为私有IP是可以重复的,那么此时服务器就不知道是给哪个子网的这个私有IP对应的主机发送响应MAC帧。
基于以上问题,我们产生了NAT技术,因为我们上文已经说到了,NAT路由器的WAN接口是一个由ISP路由器分配的公网IP地址,也就是全网唯一的,所以说,当NAT路由器的LAN口给客户端A主机分配了子网IP之后,客户端主机A先将MAC帧发送至NAT路由器,然后NAT路由器对MAC帧进行解包,然后将解包之后的IP报文的源IP替换成了自己的的WAN口公网IP,因为公网IP是唯一的,所以当服务器发送响应MAC帧时会将响应MAC帧的有效载荷IP报文的目的IP地址填充成NAT路由器的WAN口公网IP。
说的挺好,将源IP替换成了自己的WAN口的公网IP,那么将来服务器将响应MAC帧通过NAT路由器的WAN口公网IP发送至NAT路由器时,NAT路由器怎样将收到的MAC真发送给局域网中的客户端A呢?这就又引申了一个概念,就是在NAT路由器将客户端A的私有IP替换成自己的公有IP时,会生成一个对照表,大致图示如下。
即将来NAT路由器接收到响应MAC帧时,会将响应的MAC帧通过对照表发送给局域网中的私有IP对应的主机。
那么如果上图中的客户端主机A和客户端主机B都向服务器发送了MAC帧,那么经过NAT路由器将私有IP转为公网IP之后,就会有两个对照的记录,那么将来NAT路由器接收到响应MAC帧时,究竟发送给哪一个局域网中的主机呢,此时又诞生了NAPT技术,即就是给私有IP和公有IP都带上了端口号,这样就产生了一一对应的关系,简单图示如下。
代理服务器
正向代理
正如大学里的校园网,一般情况下,当学生在使用互联网时访问的其实并不是访问的软件对应的企业服务器,而是校园内的代理服务器。
为什么要有校园代理服务器呢,主要有两个原因?
- 校园内可能同时有大量相同的请求服务,比如都同时观看爱奇艺体育中的球赛,所以如果没有代理服务器,那么此时就会有大量相同功能的请求发送,需要多次频繁的访问外网。但是有了代理服务器之后,代理服务器进行分析,发现大量的请求都是为了获取相同的一个资源,所以代理服务器就会发送相同的请求,将获取的球赛资源缓存到自己代理服务器中,多个主机请求相同的资源时,直接就可以从代理服务器中获取相应的资源。
- 处于安全性考虑,如果没有代理服务器,那么此时就相当于校园内的主机可以直接与外部的服务器进行数据交换,那么如果有了恶意分子,恶意分子就直接可以攻击校园内的主机,而校园内的主机大部分的拥有者都是学生,并不具备对于恶意攻击的访问能力。所有有了代理服务器之后,与外网服务器之间直接进行交互的就是代理服务器,代理服务器有专业的认识进行管理,可以有效的对不法攻击进行防范。
给发送端,建立的代理服务器,我们称为正向代理。
反向代理
反向代理就类似于给企业端配置了一个企业端代理服务器。
为什么要在企业端配置这样一个代理服务器呢?主要原因还是两个。
1.我们知道主机与服务器之间的通信是要贯穿TCP/IP网络协议栈的,特别是TCP协议为了保证可靠传输要建立连接,那么如果有多个客户主机去访问了同一企业服务器,那么当企业服务器就会获取大量的连接,而维护连接又要创建大量的数据结构,所以如果大量的客户主机访问了同一企业服务器,就会导致这个企业服务器创建大量的维护连接的数据结构,从而增加了服务器的负载。有了企业代理服务器之后,代理服务器会合理的对用户的请求进行分配,从而不会导致某一个企业服务器的负载过大,我们称之为负载均衡。
图示如下。
2.同样在企业端配置企业代理服务器是为了保护企业服务器的安全,因为有了企业代理服务器,客户主机不会与企业服务器直接进行通信,而是会与企业代理服务器进行交互,企业代理服务器会对每个客户请求进行甄别,能够有效的组织非法客户的恶意请求,这样就保证了企业服务器的安全,有人会说难道不能为企业服务器配置一些有效的防护策略吗,当然有,但是加上企业代理服务器之后安全级别会更高。
在接收端我们配置了相应的代理服务器,我们称之为反向代理。
以上便是数据链路层的所有重点内容。
本期内容到此结束^_^