【网络】数据链路层MAC帧与其他部分协议

数据链路层与网络层的关系

在网络层,IP协议能够寻址定位,找到目标主机,也就是为什么要从主机A->主机B,而数据链路层是在解决如何将数据从主机A发送到主机B的问题

以太网

认识以太网

  • “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的 内容. 例如: 规定了网络拓扑结构,访问控制方式, 传输速率等
  • 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
  • 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

以太网帧的格式

在这里插入图片描述

  • 源地址和目的地址是指网卡的硬件地址(也叫做MAC地址),长度是48位,是在网卡出厂是固化的
  • 帧类型字段分为三种:IP,ARP,RARP
  • 帧末尾是CRC校验码

MAC地址

认识MAC地址

  • MAC地址用来识别数据链路层中相连的节点
  • 长度为48位,即6字节,一般用16进制数字加上冒号的形式来表示(例如08:00:27:03:fb:19)
  • MAC地址通常是唯一的,在网卡出厂时被设定

对比MAC地址和IP地址

在对比MAC地址和IP地址之前,先举个例子

以唐僧西天取经为例,唐僧从东土大唐出发到西天取经,唐僧并不知道具体的路怎么走,但是他知道大致的方向,在取经途中,他会经过很多的国家,如女儿国,车迟国等等,他每经过一个国家,就会问路,而被问路的人也并不知道西天到底在哪,但他知道,想去西天取经,就必须经过xx国,于是不断重复这个过程,唐僧最终就到达了目的地

东土大唐和西天,就是源地点和目的地点,就如同IP地址中的源地址和目的地址,而途径的每一个国家,就如同每一个MAC地址,也就是说:

  • IP地址是用来描述整个传输路径中的源地址和目的地址
  • MAC地址是用来描述部分区间的起点和终点
    在这里插入图片描述

例如在这张图中,主机A想把数据发送给主机B(路径不唯一,以其中某一条路径为例)

  1. 数据从主机A发出,数据包的网络层包含了源IP地址(主机A的IP)和目的IP地址(主机B的IP)
  2. 而在数据链路层,数据首先得从主机A发送到路由器A,MAC帧包含了源MAC地址(主机A的MAC地址)和目的MAC地址(路由器A的MAC地址)
  3. 之后路由器A再将数据转发给路由器E,数据包的网络层目的IP地址始终不变,但源MAC地址被替换为了路由器A的MAC地址,目的MAC地址被替换为了路由器E的MAC地址(当然源IP地址也会被替换,这在讲NAT时会讲到)
  4. 以此类推,直到主机B收到数据

至于说如何知道这些部分区间的MAC地址,讲ARP协议时会讲到

MTU

认识MTU

MTU相当于对发送数据包大小的限制,这个限制是不同的数据链路对应的物理层产生的限制

在以太网帧中,数据长度大小规定最小为46字节,最大为1500字节
这个最大值称为以太网最大传输单元(MTU,Maximum Transmission Unit),不同的网络类型有不同的MTU

MTU对IP协议的影响

由于MTU的限制,对于较大的IP数据包,必须对其进行分片处理,在IP报头中,有部分字段是专门为数据链路层分片使用的(3位标志位,13位片位移等)

  • 将较大的IP包分成多个小包,并为每个小包‘’打上标签‘
  • 每个小包的IP报头中的16位表示(id)是相同的
  • 每个小包的IP报头的3位标志字段中,第2位为0,表示允许分片,第三位表示结束标记(如果是最后一个小包则置为1,否则为0)
  • 到达对端后,会将这些小包重新按顺序拼装,并返回给传输层
  • 一旦这些小包其中任意一个丢失,接收端会重组失败,但是IP层不会负责重新传输数据

在这里插入图片描述

MTU对UDP/TCP的影响

对于UDP

  • UDP报头长度为8字节,而IP报头长度为20字节(标准报头),也就是说如果在UDP层,有效载荷大小超过1472字节,那么以太网帧的有效载荷(UDP报头 + IP报头 + 有效载荷)就会超过MTU,那么在网络层就会对该数据包进行分片
  • 如果多个IP数据包中任意一个丢失,就会引起网络层重组失败,那么就意味着如果UDP数据包在网络层被分片,数据包丢失的可能性就会增大

对于TCP

  • TCP数据包的大小也不能过大,也会受制于MTU,这个TCP数据包最大长度,被称为MSS(Max Segment Size)
  • 在TCP建立连接时,双方会进行MSS协商
  • 理论情况下,MSS的值是刚好是不会被IP层分片的数据包大小(受限于MTU)
  • 双方在三次握手发送SYN时会在TCP报头中写入自己支持的MSS值
  • 最终双方选择MSS值更小的一方作为MSS的最终值

MTU和MSS的关系
在这里插入图片描述

ARP协议

在介绍MAC地址时遗留了一个问题,那就是通信双方如何知道对方的MAC地址呢?答案是需要借助ARP协议

ARP协议的作用

ARP协议建立了主机IP地址与MAC地址的映射关系

在网络通信中,双方主机只知道对方的IP地址,但是不知道网卡硬件地址(MAC地址),而数据是从网卡接收上来的,如果不知道对方的网卡地址,数据也就会丢失,因此通信前必须知道通信双方的MAC地址

ARP数据报格式

在这里插入图片描述

  • 硬件类型表示链路层网络类型,1为以太网
  • 协议类型是指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节
  • 协议地址长度对于IP地址为4字节
  • op为1表示该数据报为ARP请求,为2表示ARP应答

以太网源地址和以太网目的地址出现了两次是有必要的,如果数据链路层网络为以太网,那么这个是多余的,但如果不是以太网(如令牌环,无线LAN),则是有必要的

ARP协议的工作流程

在这里插入图片描述

  1. 源主机先进行广播(将以太网目的地址设置为全F)
  2. 每台主机收到ARP报文之后,首先查看op,然后将自己的IP地址与ARP请求报文中的目的IP地址核对
  3. 对应主机核对完成之后,将ARP报文中部分字段修改替换,作出arp应答
  4. 对端收到ARP应答后,提取目的主机的MAC地址
  5. 提取到目的主机的MAC地址后,源主机会将该MAC地址和IP地址建立映射,储存到自己的ARP缓存表中,方便下次使用

NAT技术(简介)

之前在讨论IP层时谈论到,因为IP地址的数量有限,所以在网络通信中会采取NAT技术解决这个问题

NAT能够将私有IP转换为全局IP,私有IP不要求唯一,而全局IP必须要求唯一,所以即使私有IP相同也不会有影响

在这里插入图片描述

客户端A向服务器发送数据,在经过NAT路由器时,路由器会将数据包中的源地址10.0.0.10替换为自己的IP地址202.244.174.37,再将数据包发送给服务器

那么问题又来了,如果是多个客户端给服务器发送数据,服务器收到数据的源地址都是相同的,服务器又怎么将数据返回给不同的的客户端呢?

NAPT

这时NAPT来解决这个问题,就需要借助IP + port的关系
在这里插入图片描述

  • 不同的客户端给服务器发送数据时,NAT将源IP地址进行替换,并会建立一个(客户端IP:port + 路由器IP:port)< – > (路由器IP:port + 服务器IP:port)的转换表
  • 不论是客户端向服务器发送数据,还是服务器向客户端发送数据,通过该转换表都可以精确定位

例如客户端A(10.0.0.10:1025,源)给服务器(163.221.120.9:80,目)发送数据时,路由器将客户端A的源IP地址替换(202.244.174.37:1025,源),并建立转换表

在遇到相同端口号时会做处理,例如这里将第二个客户端的端口口号替换为1026

此时,如果服务器(163.221.120.9:80,源)向客户端A(10.0.0.10:1025,目的)发送数据时,先将数据发送给路由器(202.244.174.37:1025,目的),路由器通过查询转换表,将目的IP地址替换(10.0.0.10:1025,目的)

NAT技术的缺陷

  • 无法从NAT外部向内部建立连接
  • 转换表生成和销毁会产生额外开销
  • 通信过程中一旦NAT异常,所有的TCP连接都会断开
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值