【Linux 网络】链路层


 

链路层

IP路径选择的能力是建立在链路层节点之间跳转的功能的基础上。凡是能够进行跳转的节点,一定在同一个网段内是直接相连的节点。

为什么IP地址和MAC地址缺一不可?

首先要充分了解网络分层的作用。网络层使用Ip协议将不同数据链路类型(以太网,3g,LAN)的数据报文统一成相同的形式在网络层中可以互相传播,达到任意具有IP地址的主机。但是数据传输总要经过底层,经过线路传输。这时候就是数据链路层起到了作用,不同链路类型所使用的协议方案都不尽相同,但是在链路层不能使用IP地址了,这时候要找到相对应的主机我就需要MAC地址的作用。

第二若是只使用MAC进行通信,那么一个路由表就要维护差不多2的48次方数据,大约256TB的内存,这样存储和通信效率严重降低。

1 以太网

以太网是一种技术标准。包含链路层和物理层的内容。以太网是应用最广泛的局域网技术,还有令牌环、无线LAN等。

局域网通信的方式就是一个节点将数据放到网络里,所有节点都能拿到并对比MAC地址,是给自己的就接收,不是就抛弃。

1.1 以太网帧格式

在这里插入图片描述

字段解释
目的地址目的MAC地址
源地址源MAC地址
类型有效载荷的类型,0800表示IP数据报,0806表示ARP请求应答,0835表示RARP请求应答
PAD以太网帧数据不能少于46不能大于1500字节,否则就要添加PAD就是随机值

如何进行封装和解包呢?

  1. 类型决定报文的有效载荷要交付给上层那一个协议;
  2. 具体类型报文的报头都是定长的,按其规则封装和解包即可。

1.2 MAC地址

MAC地址用来标识链路层中节点,长度为6字节48位。一般表示形式:08:00:27:03:fb:19。MAC地址随网卡绑定,一般不支持修改。

1.3 MTU

MTU是MAC帧的大小上限,以太网帧中的数据长度规定最小46字节,最大1500字节。ARP数据包的长度不够46字节,要在后面补填充PAD。

不同的数据链路层标准的MTU是不同的,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片。

既然 IP 层会分片,为什么 TCP 层还需要 MSS 呢?

当 IP 层有⼀个超过 MTU大小的数据(TCP 头部 + TCP 数据)要发送,那么 IP 层就要进行分片,保证每⼀个分片都小于 MTU。把⼀份 IP 数据报进行分片以后,由目标主机的 IP 层来进行重新组装后再交给上⼀层 TCP传输层。那么当如果⼀个 IP 分片丢失,整个 IP 报文的所有分片都得重传。这是因为IP层本身没有重传机制,他只是高效的发送数据而已,没有协议来保证完整性。当接收方TCP报文不完整后不会响应ACK的,那么TCP发送方就会触发超时重传,重发整个TCP报文段。这样做就非常没有效率可言。

所以为了提高效率,在建立连接的时候会剔除IPHeader和TCPHeader,剩下的就是协商的MSS值,当TCP发现超过MSS后就会分片,这样形成的IP包长度也就不会大于MTU了,也就不用IP分片了。

 

2. ARP协议

2.1 ARP协议的作用

路由器想将外界数据包转发进局域网,需要先对数据报封装MAC帧。就需要通过目的IP获得目的MAC地址,该工作由ARP协议负责。

在这里插入图片描述

简单地说,ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的。

RARP 协议你知道是什么吗?

ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到。

2.2 ARP数据报格式

在这里插入图片描述

加粗部分是ARP协议报文格式,将ARP协议报文部分替换成有效载荷就是MAC帧协议报文格式。

字段解释
硬件类型1表示以太网
协议类型0x0800为IP地址
硬件地址长度6为以太网MAC地址,不变
协议地址长度4为IP协议地址,不变
op1表示ARP请求,2表示ARP应答
发送端MAC地址,发送端IP地址请求方或者响应方填写自身的MAC地址和IP地址,接收方提取以待后用
接收端MAC地址,接收端IP地址请求方填写接收方的IP地址,接收方MAC地址全F表示未知

2.3 ARP的流程

如果路由器知道IP对应的MAC地址,那就可以直接发送,如果不知道,就要使用ARP协议获取目的MAC。

  • 主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。
  • 当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。

在这里插入图片描述

操作系统通常会把第一次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。

一般主机会缓存子网内其他主机IP和MAC地址。由于IP是动态分配的,缓存的生命周期一般不长。可以使用arp -a查看:

在这里插入图片描述

 

其他协议

3. DNS协议

3.1 域名

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。

性质内容解释
一级域名com表示这是一个企业域名,同级的还有"net"网络提供商),“org”(非盈利组织)等
二级域名baidu域名
前缀www只是一种习惯用法,来表示主机支持的协议

DNS 树状结构

域名解析的工作流程:

浏览器首先看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析文件 hosts,如果还是没有,就会 DNS 服务器进行查询,查询的过程如下:

  1. 客户机向其本地域名服务器发出DNS请求报文。
  2. 本地域名服务器收到请求后,查询本地缓存,若没有该记录,则以DNS客户的身份向根域名服务器发出解析请求。
  3. 根域名服务器收到请求后,判断该域名属于.com域,将对应的顶级域名服务器dns.com的IP地址返回给本地域名服务器。
  4. 本地域名服务器向顶级域名服务器dns.com发出解析请求报文。
  5. 顶级域名服务器dns.com收到请求后,判断该域名属于abc.com域,因此将对应的授权域名服务器dns.abc.com的IP地址返回给本地域名服务器。
  6. 本地域名服务器向授权域名服务器dns.abc.com发起解析请求报文。
  7. 授权域名服务器dns.abc.com收到请求后,将查询结果返回给本地域名服务器。
  8. 本地域名服务器将查询结果保存到本地缓存,同时返回给客户机。

在这里插入图片描述

3.2 输入URL后的事情

这是一个经典的面试题,能牵扯到所有网络知识点,没有固定答案越细越好,可以参考:https://blog.csdn.net/wuhenliushui/article/details/20038819/

  1. 有知识框架,有条理
  2. 组织语言,清晰表达
  3. 掌握细节程度

针对这个问题我想分成如下三步去谈:
第一层:在应用层,将一个URL请求一直到浏览器返回,把这个过程给你详细的表述一下。
第二层:应用层谈完之后,再谈谈细节问题,因为细节太多了,所以我只能以关键字的方式给你呈现。
第三层:当把前面的两个大步骤讲完,然后还会再补充一些细节,那么这个问题呢一个大思路。

  1. 第一个就是应用层,首先输入URL之后点击回车,先域名解析拿到IP地址,紧接着浏览器会发起HTTP请求,服务器会收到HTTP请求,然后读取请求,进而进行分析HTTP请求。分析完之后,根据分析字段得到要求的资源,上传的参数等等。然后构建HTTP响应,如响应行、属性、正文等等,再发送给浏览器,浏览器拿到HTTP响应要对HTTP响应做分析,更重要的是提取相应的正文比如网页,然后浏览器会解释网页的这些标签语言,同步的也要对浏览器界面进行相关的渲染,把我们所需要的网页内容给展示出来。如此就完成一整个HTTP请求和响应,这是我回答问的第一阶段。那么上面实际上是一个整体的过程,也是用户最能感知到的,也是一般程序员最清楚的。
  2. 第二、那么下面要谈的就是细节,当我们实际发起一个HTTP的时候,底层其实使用的是TCP套接字编程。底层实际上将我们的数据以字节流的方式拷贝并发送过去。然后TCP协议经过自己的流量控制、拥塞控制,确认应当、链接管理、超时重传、延迟应答等各种机制来保证自己的数据报被对方可靠高效地获取。
  3. 第三、TCP将数据交给IP层,存在各种路径选择、子网划分、查找路由表等过程,IP数据报分片组装等特殊情况,到链路层会有局域网转发、ARP协议等相关细节。当然过程中也会存在各种异常情况。
  4.  

4. ICMP协议

ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议,它主要用于在IP网络中传递控制消息和错误报告。

ICMP 大致可以分为两大类:

  • 一类是用于诊断的查询消息,也就是「查询报文类型
  • 另一类是通知出错原因的错误消息,也就是「差错报文类型

4.1 ICMP 功能都有啥?

ICMP本质就相当于IP层的“调试接口”,可从应用层直接访问IP层的功能,测试IP层代码的准确性。主要功能包括:

  1. 确认IP包是否成功到达目标主机。
  2. 返回IP包被丢弃的原因。

ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归为网络层。

ICMP只能搭配IPv4使用,IPv6需要用ICMPv6。

IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知

在这里插入图片描述

如上图例子,主机 A 向主机 B 发送了数据包,由于某种原因,途中的路由器 2 未能发现主机 B 的存在,这时,路由器 2 就会向主机 A 发送一个 ICMP 目标不可达数据包,说明发往主机 B 的包未能成功。

ICMP 的这种通知消息会使用 IP 进行发送 。

因此,从路由器 2 返回的 ICMP 包会按照往常的路由控制先经过路由器 1 再转发给主机 A 。收到该 ICMP 包的主机 A 则分解 ICMP 的首部和数据域以后得知具体发生问题的原因。

4.2 基于ICMP的命令

ping命令
$ ping localhost
PING localhost (127.0.0.1):56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 tt1=64 time=0.086 ms 
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.183 ms 
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.143 ms 
--- Localhost ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss 
round-trip min/avg/max/stddev = 0.086/0.150/0.187/0.041 ms

ping的是域名。ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL。

ping命令会先发送一个ICMP Echo Request 给对端,对端接收到之后会返回一个 ICMP Echo Reply。

telnet是23端口, ssh是22端口, 那么ping是什么端口?

ping 命令基于网络层的ICMP,而端口号是传输层的概念,网络层中根本就没有端口号。

 

5. NAT协议

5.1 NAT技术背景

NAT技术是解决IP地址不足的主要手段,是路由器的一个重要功能。

NAT能够将私有IP对外通信时转为全局IP,是一种将私有IP和全局IP相互转化的技术。

5.2 NAT IP转换过程

  • 私有网络中的数据经路由器转发到服务器时,路由器会将IP报文中源IP替换成路由器的WAN口IP。
  • 公共网络中的数据经路由器转进私有网络时,路由器会将IP报文中目的IP替换回发起请求的主机IP。
NATP转化表

在NAT路由器内部,有一张自动生成的用于地址转换的表。两边可以互为键值,数据出去时“向外”转换,数据进来时“向内”转换。

这种映射关系是由路由器自动维护的,第一次发送报文时就会生成这个表项。

不同主机访问同一个公网服务,或者主机的多个进程访问同一个公网服务时。报文中的源端口号会被路由器用来区分不同进程。

在这里插入图片描述

5.3 NAT技术的缺陷

由于NAT依赖这个转换表,所以有诸多限制:

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

5.4 代理服务器

正向代理和反向代理

现在的路由器往往都具备NAT功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程。

代理服务器看起来和NAT设备有点像:

  1. 客户端向代理服务器发送请求,代理服务器将请求转发给服务器;
  2. 服务器返回结果给代理服务器,然后又把结果回传给客户端。

在这里插入图片描述

如图所示,靠近用户的代理服务器,叫做正向代理。优点有:

  1. 身份认证。
  2. 加速内网服务。
  3. 筛查非法请求。

如图所示,靠近服务器的代理服务器,叫做反向代理。优点有:

  1. 进行业务转发,实现负载均衡。
  2. 防止恶意攻击服务器。
NAT和代理的区别
角度NAT代理服务器
应用网络基础设备,解决的是IP不足的问题贴近具体应用,比如通过代理进行加速或翻墙
底层工作在网络层,直接替换IP地址工作在应用层
使用一般部署在局域网的出口可以在局域网,也可以在广域网,也可以跨网
位置一般集成在路由器等设备上需要部署在服务器上
  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuhyOvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值