Linux学习记录——삼십구 数据链路层协议

文章目录

  • 1、了解数据链路层
  • 2、认识以太网
  • 3、认识MAC地址
  • 4、以太网报文
  • 5、局域网通信原理
    • 1、基本原理
    • 2、数据碰撞
    • 3、交换机
    • 4、ARP协议
    • 5、RARP协议
    • 6、局域网中间人
  • 6、DNS(简单介绍)
  • 7、ICMP协议
    • 1、报文
    • 2、traceroute命令
  • 7、NAT技术
    • 1、基本过程
    • 2、NAPT
    • 3、缺陷
  • 8、代理服务器


应用层(HTTP,HTTPS) → 传输层(TCP,UDP) → 网络层(IP) → 数据链路层

1、了解数据链路层

实际上IP协议提供的路由功能,路径选择,比如从主机D到路由器F,从路由器F到路由器G。链路层解决的就是如何将数据从D送到F。D和F属于同一个子网,F和G属于同一子网,所以链路层解决了在同一子网内发送数据的问题。同一子网内,两台设备可以直接连接,直接通信,跨网络就是在不同的子网之间不断发送,通过这些同子网的设备跨多个子网,而走哪些路线就是网络层IP协议决定的,怎样走是由链路层的MAC帧来决定的,这两层共同决定了如何将数据从一个主机跨网络送到B主机的能力,如果这两层有问题就让TCP来解决。

链路层属于驱动层,底层的网络有很多不一样的网络,网络的差异就体现在网卡、设备、软件驱动上,所以这个东西无法做到操作系统里。

2、认识以太网

以太网是一个局域网(子网)的技术标准,既包含链路层的内容,也包含了一些物理层的内容,是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网、无线LAN等,以太网的网线必须使用双绞线。

3、认识MAC地址

局域网中,当来到消息时,每个主机都去检查是否是自己的信息,不是就丢掉,是就匹配上了。虽然两个主机都会认为在和对方通信,但其它主机也都知道一个主机发信息了。每个主机都有网卡,网卡有MAC地址,标准长度6个字节。

Linux学习记录——삼십구 数据链路层协议_第1张图片

ether后面的一串就是mac地址。

4、以太网报文

Linux学习记录——삼십구 数据链路层协议_第2张图片

MAC帧的报头是目的地址 + 源地址 + 类型 + CRC,有效载荷就是中间的数据,大小范围是46 ~ 1500字节,所以上层给的报文最多不超过1500字节,要超过46个字节,如果不够就填充PAD字段,实际上就填充一些垃圾数据。

报头部分,目的地址是MAC地址,源地址是发送方地址,都占6个字节,类型占2个,CRC校验码占4个字节。MAC帧的报头是定长报头,总共18个字节,有效载荷也有长度范围。类型是帧类型,表示数据类型,填的是0800,就是IP数据报,0806就是ARP请求/应答,8035则是RARP请求/应答。后两种原理相似,本篇只写ARP。

5、局域网通信原理

1、基本原理

假设主机ABCD,主机的mac地址假设为macABCD,路由器R,路由器也是局域网主机。主机A要给主机D发信息。

A的网络层发现A和D在同一子网内,在MAC帧的报文中,目的地址是macD,源地址是macA,类型是0800,数据是IP报文,以及CRC校验码。链路层将这个MAC帧报文发送到局域网中,BCDR各自的链路层都收到了这个MAC帧报文,比如主机C,C将MAC帧的报头和有效载荷分离,拿到报头这个结构体中的目的地址macD,发现不是macC,那么在链路层C就丢弃了这个报文,BR也是这样的操作,D也一样,不过D发现目的地址就是它自己的MAC地址,然后就交付给网络层,传输层,应用层,而其它几个,只有链路层知道这个报文,网络层及之上的都不知情。网卡中也可以设置一个混杂模式,不对报文的目标MAC地址进行认证。直接向上层交付,这也就是大部分局域网抓包软件的原理。要想不被抓包,在应用层对数据加密,因为其它层都是公开的代码。

D给A响应的时候,目的地址就是macA,源地址是macD,类型是0800,数据是IP报文,以及CRC校验码,然后发送到局域网,一样的过程,最终A得到了响应。

2、数据碰撞

局域网是共享的资源,有可能出现多个主机给多台主机通信,这时候会出现数据碰撞,网络都是光电信号,如果碰撞的话光波就会互相干扰,数据就不对了,所以局域网也叫碰撞域。任何时刻,只能有一台主机在给另一台主机发送数据帧。

为了预防这个问题发生,主机的网卡通过校验码来做碰撞检测,如果会发生碰撞就sleep上几秒,再重新发,避免碰撞。局域网内的所有主机都有这个机制,不过每个主机休息的时间不一样,所以就能错开发送;以及都在休息,没在休息的主机就可以发送了。所以局域网内主机越少越好,碰撞概率越低。现实中,很多人聚集在一起,或者像下班期间这样的网络使用高峰期,网络会变得卡,就是因为碰撞概率大了,很多设备都在丢包等待重发中。

如果要黑掉局域网,就发送大量垃圾数据,就有可能和所有主机碰撞,不过发送垃圾数据的主机得绕开以太网的驱动程序,让自己没有碰撞测试,通过某种方式直接去干扰局域网。

链路层也有重传,这是为了保证把数据发送到另一台主机。在OS角度,局域网是临界资源,因为一次只能让一个主机发送消息,其它都得等,碰撞检测和碰撞避免就是在保护临界资源的安全。而令牌环网有一些数据当作令牌,只有拿着令牌的主机才可以发送数据,发完后交给另一台主机,这台主机才能发数据,这个令牌就相当于互斥锁。

3、交换机

交换机工作在数据链路层,周围的设备也都在一个局域网内。假设局域网分为左右两部分,中间有交换机,左部分发生碰撞,交换机就不会把碰撞产生的垃圾数据传到右部分,不影响右部分的主机,这里交换机的作用就是划分碰撞域。

左部分正常交互,但数据有可能扩散到右部分,交换机也会收到这些数据就会丢掉,不会转发到右部分,减少右部分的碰撞概率。

一个区域内使用网络的设备很多时就得使用交换机。

4、ARP协议

在整个传输过程中,IP地址和目标MAC地址一直不变,源MAC地址一直在变。对方的IP地址是可以知道的,那么对方的MAC地址如何知道?

因为IP地址,目的MAC地址不变,底层网络的差异就会缩小。

ARP协议的主要功能是建立了IP地址和MAC地址的映射,工作在链路层,可以控制MAC帧报文的发送。MAC帧正常通信时直接将报文交给网络层,除非不知道对方的MAC地址才用ARP协议来获得。链路层有MAC帧和ARP层。

APR的工作流程是将IP地址发送到局域网内,对应的主机收到后返回带有自己的MAC地址的响应。

ARP报头

Linux学习记录——삼십구 数据链路层协议_第3张图片

图中以太网首部就是MAC帧的报头,ARP总共28字节,存在于MAC帧的有效载荷里。以太网地址是MAC地址,如果不知道,就写成全F,这时候就是在局域网内的广播地址,帧类型是0806。硬件类型表明是网络类别,比如以太网,令牌环网,设为1就是以太网;协议类型是要转换的地址类型,也就是IP地址,写为0x0800…,硬件地址长度这里固定为6字节,因为是以太网的MAC地址,协议地址长度这里就固定为IPv4地址,所以是4字节,op为1表示ARP请求,为2是ARP应答,目的以太网地址为全F,表示不知道。

一个局域网内,任何一台主机都可能向别的主机发送ARP请求,收到其它主机发送的ARP请求,也都可以发送ARP应答。因此,一个主机可能既收到ARP应答,又收到APR请求。

还是之前的例子,好几台主机ABCDEF,MAC地址就是macB这样的形式。主机A是一台入口路由器,收到了一个IP报文,里面有目的IP:ipF。此时入口路由器要获取F的MAC地址,就构建一个ARP报文,除去以太网首部,填充剩下的部分,1,0800,6,4,1,macA,ipA,全F,ipF。将填充好的部分,也就是不包括上图的以太网首部的部分,拿着这个,去封装进MAC帧报文,先不管CRC校验和,MAC帧报头填充全F,macA,0806,有效载荷就是刚才构建的ARP报文,整个就构成一个MAC帧报文,发送到局域网中。

所有的主机都收到了这个MAC帧报文,都去分离报头和数据,看到目的MAC地址是全F,就交给ARP层,ARP层拿到除去报头的MAC帧的有效载荷,也就是之前构建的ARP报文,先看到op是1,就知道是请求,再看到目的IP地址是ipF,不是对应主机,那就在ARP层丢弃。当F收到并做同样的步骤后,发现是要询问的是自己的,F就知道A主机在广播询问我的MAC地址,于是构建ARP应答,1,0806,6,4,2,macF,ipF,macA,ipA,然后封装进MAC帧报文,报头是macA,macF,0806,然后F将ARP应答发送到局域网中,其它主机都能收到,但在链路层中的MAC帧层,没有去到链路层的ARP层,就能看到目的MAC地址是macA,不是自己就在MAC帧层丢弃。A也收到,在MAC帧层知道只发给自己的,又看到0806,于是交给ARP层,看到ARP报文,先看op,是2应答,所以就提取发送端以太网地址macF。

所以顺序就是,收到ARP报文后,先看op,因为主机在发送ARP请求后就忘记这码事,所以得先看看来者何人。所以ARP请求和ARP响应是相互独立的。为了防止碰撞,主机内会在得知结果后就把这个关系维护起来。ARP大量存在于各个子网之间的路由器之间,比如传输过程中有什么路由器换了,那就得ARP一下。局域网内要想知道各个主机的IP地址,比如在192.168.1.0子网内。0
位置最多变为255,所以192.168.1.1主机就全都发一遍请求,有应答的就说明对应IP地址有主机,也就拿到了这个主机的IP地址,然后在本主机中保存起来。

Windows下命令arp -a可以看到主机保存的MAC地址,也就是物理地址。想得到对端主机的MAC地址,要发送ARP请求,只需要发送IP协议往上层的任何一个报文即可;或者用ping命令,ping后面加上网址,可以测试网络连通性,会发送IP报文,并且必须给应答,在发ping之前,主机就会发送ARP报文。

主机之间在局域网内发送的单个数据帧体积越小越好。如果碰撞的话,数据帧更长,重发成本就更高。

5、RARP协议

ARP是地址信息协议,RARP是逆地址信息协议。RARP在知道MAC地址时找到IP地址,这个很简单,直接封装MAC帧报文,发送过去询问就可。

6、局域网中间人

在一个局域网内,ABCDE主机和路由器R,E可以和C发消息,E可以发消息到R,由R发到别的子网中。主机的IP地址是公开的,在应用层就知道了。IP地址知道了,就可以ARP找到MAC地址。ARP有缓存,用来维护最新的IP地址和MAC地址。

现在有中间人接入这个局域网,有ipM和macM。主机构建ARP请求时,可以作假,所以中间人可以构建一个ARP请求,表明IP地址是ipR,MAC地址是macM。中间人将ARP请求发给主机A,A的ARP缓存就以为主机R的MAC地址变了,ipR应当对应着macM,而不是之前的macR。之后A每次要发消息给路由器R,都会发给M而不是R。

中间人M给路由器R发送ARP请求,写明IP地址ipA,MAC地址macM。R会发送大量应答冲刷,防止应答丢失,保证应答发送成功。R收到假报文后,就改变了映射关系,将ipA和macM对应起来,这样每次R以为发送给A,其实发送给了M。

像这样的做法叫做ARP欺骗。

6、DNS(简单介绍)

域名解析系统。能把域名转为IP地址,在应用层工作,使用UDP协议来进行DNS请求。IP地址不利于互联网推广宣传,因为全是数字,所以出现域名。域名和IP地址都可以访问同一个网页。浏览器收到输入的域名后,向内置的域名解析服务器发送DNS请求,得到IP地址,再开始和厂商服务器交互。浏览器还会保存一些常见的域名和IP地址的映射关系。当上不了网时,有可能是域名解析服务器挂掉了。

但域名其实并不是大众使用的点,而是搜索引擎,所以需要搜索引擎去做域名。大众打开电脑,打开浏览器,在搜索框内输入内容就可以访问网页,浏览器就通过域名服务来找到相应的网页。

命令cat /etc/hosts,域名解析时会优先查看hosts文件的内容。

一级域名是.后的,比如com,edu,cn等。二级域名是中间的那部分,比如www.baidu.com,baidu就是二级域名。不同的一级域名对应的域名解析也会有所不同。

7、ICMP协议

ICMP在应用层,它可以让应用层协议绕过传输层,直接使用ICMP协议。网络传输中,IP协议只负责传输报文,IP协议不提供传输可靠性,并不知道是否丢包等问题。ICMP协议用来解决IP协议产生的问题,双方ICMP进行交流,如果有丢包对方就得发送报文告知。

确认IP包是否成功到达目标地址
通知在发送过程中IP包被丢弃的原因
ICMP基于IP协议工作
ICMP只能搭配IPv4使用,IPV6得用ICMPv6。

假如对方主机挂掉,发送方多次重发后,对端主机就会发送一个ICMP报文告知发送方出现的问题原因。ICMP既可以通知出错原因,也可以用于诊断查询。

1、报文

Linux学习记录——삼십구 数据链路层协议_第4张图片

ICMP报文在IP报文的有效载荷中,就像ARP报文在MAC帧的有效载荷中。

Linux学习记录——삼십구 数据链路层协议_第5张图片

ping命令是C/C++写的工作在应用层的软件,用的就是ICMP协议。发送路径上任何一个主机出问题,都需要给应答,就会被ICMP收到。发送出去的IP报文,报文中有一个TTL字段,一开始设为1,如果中间被丢弃,那么不能直接丢弃,要给应答,这样TTL逐渐增加,就知道一个主机到一个主机时需要多少个中间主机,也就是跳数。

ICMP没有端口号,因为端口号是传输层的内容。

2、traceroute命令

基于ICMP协议实现,能够打印出可执行程序主机,一直到目标主机之前经历多少路由器。

7、NAT技术

解决IPv4地址不足的问题。从运营商内网到公网,通过不断地LAN口和WAN口转换,就是NAT技术。之前已经写过,从内网一个设备发送出去,要能够转换到公网;从公网再回到内网时也要能转换回来。NAT路由器就是做转换工作。

1、基本过程

当内网一个设备发送请求时,有源IP地址和目的IP地址,NAT路由器对内网有LAN口,对公网有WAN口,请求到达NAT路由器时,源IP地址换成NAT路由器在公网的IP地址,目的地址不变,这就是从内网到公网的过程。

NAT路由器有一个映射表NAPT。从内网到公网会经过一次映射得到公网IP地址,回来的时候也会通过这个映射表来得到内网的源IP地址。

2、NAPT

内网内会有多个设备要访问一个公网的服务器,NAT在转化回来的时候要分清楚是哪个主机,主机的哪个进程。所以IP地址,端口号都得知道,NAT路由器其实甚至能工作到应用层。

图中可以看出,每个主机的源IP地址通过NAT路由器发送到公网时都会变成WAN口的IP地址,但端口号也会不同,所以就出现了上图灰框类似的映射表。IP地址和端口号都换就是因为有多个主机的多个程序在发送消息,需要给所有程序都返回应答。在NAT角度下,内网里就可以没有主机这个概念,而是看作一个个网络客户端进程,而公网里就是一个个网络服务器进程,无论是公网还是内网,ip + port就是它们唯一的进程ID。在一个内网和一个公网的交互过程中,两个网内的ID都是唯一的,放在一起,就是这组网络的唯一,所以NAT路由器就是将唯一做到了现实。

不过映射表中还维护了目的IP。这是因为防止有别的服务器发错信息,映射关系中有目的IP,就能保证接收的是目的服务器的信息,而不是哪个服务器都收。

家里设备上网时,经过的家用路由器,运营商路由器都使用NAPT。

3、缺陷

无法从NAT外部向内部服务器建立连接,转换表的生成和销毁都需要额外开销,通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。

从外网访问到内网,外网可以发消息到和这个内网NAT路由器相连的网,通过这个网去访问内网。

8、代理服务器

正向代理:在客户端与服务器之间再加一个代理服务器,客户端发给这个代理服务器,代理服务器发给服务器,发送后,传回来的资源也经过代理服务器,代理服务器再发送给客户端,资源也会存在代理服务器,如果有客户端需要曾经某个客户端请求的资源,那么代理服务器就直接把这个资源给客户端,不需要再去访问服务器。正向代理服务器和厂商服务器之间还有路由器。正向代理可以起到缓存资源、提高访问效率的作用。正向代理需要认证,不能让所有人都可以访问,它只是一个区域的方案。正向代理也会过滤非法请求。

反向代理:一个代理服务器不可能面对太多客户端,所有就建立多个代理服务器,提供一样的服务,这些代理服务器就是集群。但这需要客户端发送时要挑选代理服务器吗?这个任务再叫一个代理服务器去做,它通常都是高并发服务器,用来接收所有客户端的请求,然后再分发给集群里的各个代理服务器,要让这些服务器的负载达到均衡。只接受请求并发送出去,所以它的负担不算重,但也需要高并发。这样的高并发的代理服务器就是反向代理服务器。每个集群都有反代理。当有多个集群时,不需要再用一个服务器来接收所有请求,然后分发给所有集群。当客户端要访问某个资源时,每个集群的反代理都有自己的IP地址,所以就通过平衡各集群压力,让这个请求去合适的反代理服务器,再发送到集群中,通过代理服务器去访问资源。

NAT和代理服务器的区别:
NAT解决IPv4地址不足的问题,代理服务器贴近具体应用,比如通过代理来,迅游加速器也是利用了代理服务器
NAT工作在应用层,直接对IP地址进行替换,代理服务器工作在应用层1
NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网,也可以跨网
NAT一般集成在防火墙、路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上

代理服务器广泛用于(广域网中的代理)和负载均衡(局域网中的代理)中。

结束。

你可能感兴趣的:(Linux学习,linux,学习,网络,网络协议)