【网络编程】第十一章 数据链路层 - 以太网(MAC+MTU+ARP+MSS+RARP)


文章目录


重点

  • 数据链路层的作用:两个设备 (同一种数据链路节点) 之间进行传递数据;
  • 以太网是一种技术标准;既包含了数据链路层的内容, 也包含了一些物理层的内容。 例如:规定了网络拓扑结构,访问控制方式,传输速率等;
  • 以太网帧格式
  • 理解 mac 地址
  • 理解 arp 协议
  • 理解 MTU

链路层

数据链路层:提供将数据在局域网中传输的能力,传输方式主要是以太网

  • 数据在发送之前会给数据封装上对应的局域网的报头。
  • 数据要进行跨网络传输,需要经过路由器转发。
  • 数据在路由器进行向上交付时,会将该数据对应的局域网报头去掉。
  • 而当路由器该数据转发给下一跳之前,又会给该数据封装上下一跳网络所对应的局域网报头。

以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据

以太网MAC帧格式

  • 目的地址(6B):48 位的 MAC 地址

  • 源地址(6B):48 位的 MAC 地址

  • 类型(2B):网络层使用的协议,帧协议类型有三种值,分别对应 IP、ARP、RARP,所以只需要 2 个字节

    • TCP/IPv4:0x0800

    • ARP 请求或响应:0x0806

    • RARP:0x8035

    • Novell 网络层 IPX 协议:0x8137

  • 数据载荷:46B-1500B

  • CRC(4B):校验码

碰撞域

通过交换机来划分碰撞域,在同一个碰撞域当中,目的地址不会传输到外面去,减少碰撞的概率发生,同时MAC 帧不要太大,否则会大大增加碰撞的概率

MAC地址

mac地址也是物理地址,不是指物理层的概念

  • MAC地址用来识别数据链路层中相连的节点
  • 长度为48位,及6个字节,例如:08:00:27:03:fb:19
  • 网卡出厂时就确定,MAC地址通常是唯一的

ifconfig命令来查看我们的MAC地址

MAC地址和IP地址

  • IP是路途总体的起点和终点。
  • MAC是路途上的每一个区间的起点和终点。

MTU-最大传输单元

以太网对应MTU的值一般是1500字节,最小长度为46字节,为了满足数据链路层中最大帧/最小帧的要求

MTU 对 IP 的影响

  • 因为 MTU 的存在,网络层 IP 协议中需要对较大的数据包进行分片
  • 如果 IP 分片后出现丢包导致数据丢失,那么传输层就必须得重传

MTU 对 UDP 的影响

IP报头的长度是20字节,UDP报头的长度是8字节,只要 UDP 携带的数据超过 1472字节 (1500 - 20 IP首部 - 8 UDP首部),那么就会在网络层分片

一旦数据报中有一个 IP 报文丢失了,那么整个 UDP 报文就会丢失。再加上 UDP 并没有超时重传机制,UDP 的报文在 IP 层中被分片后丢包的概率远大于 TCP

MTU 对 TCP 的影响-MSS

  • TCP发送的数据报该受制于MTU,TCP的单个数据报的最大报文长度,称为MSS,在TCP首部选项当中
  • TCP 在建立连接的过程中,通信双方会进行 MSS 协商。最理想的情况, 最终选取双方支持的MSS值当中的较小值作为最终MSS

ARP协议

地址解析协议协议,根据IP地址获取MAC地址的一个TCP协议,是 MAC 帧协议的 "上层",因为同一个局域网中发消息需要知道对方mac地址,而我们一般只知道ip地址,所以需要arp协议将ip地址转换为mac地址

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

ARP协议的工作流程

ARP请求的过程

主机 A 需要给主机 B 发送数据,但是不知道主机 B 的 MAC 地址,它就需要发起一个 ARP 请求

  • 以太网目的地址填为全 F,代表广播
  • 源地址填主机 A 自己的 MAC 地址
  • 帧类型填 0806 代表 ARP 协议
  • 硬件类型字段设置为1
  • 协议类型设置为0800
  • 硬件地址长度为6
  • 协议地址长度为4
  • ARP 中的 OP 填为 1,代表是 ARP 请求
  • 发送端以太网地址填为主机 A 的 MAC 地址
  • IP 地址填主机 A的 IP 地址
  • 目的以太网地址填为全 F,表示广播
  • 目的IP 地址填为主机 B的 IP 地址

之后将封装好的MAC帧以广播的方式发送到局域网当中,直接判断arp协议

  • ARP 层先通过 OP 为 1 判断是 ARP 的请求
  • 取出请求中的目的 IP 地址,判断是否为本机 IP 地址,不是则丢弃
  • 是本机的 IP 地址,代表这个报文是发给自己的 ARP 请求,需要构造 ARP 响应
ARP应答的过程
  • 以太网目的地址填为 ARP 请求中的主机 A MAC 地址
  • 以太网源地址填主机 B的MAC 地址
  • 帧类型填 0806 代表 ARP 协议
  • 硬件类型字段设置为1
  • 协议类型设置为0800
  • 硬件地址长度为6
  • 协议地址长度为4
  • ARP 中的 OP 填 2,代表 ARP 响应
  • 发送端以太网地址填为主机 B 的 MAC 地址
  • IP 地址填主机 B的 IP 地址
  • 目的以太网地址填 A 的 MAC 地址
  • IP 地址填为目的主机 A 的 IP 地址

之后将封装好的MAC帧以广播的方式发送到局域网当中,先判断mac协议,再判断arp协议

  • 通过 MAC 地址来判断是否是发给自己的 MAC 帧。如果不是就直接丢弃
  • 判断 ARP 中的 OP 为 2,代表是 ARP 响应
  • 直接取出发送端主机 MAC 和主机 IP,就能得到主机 B 的 IP 和 MAC 地址的映射关系

ARP 缓存

  • 任何一台主机发出的一定是 ARP 的请求
  • 接收到的 ARP 可能是对方向往发送的 ARP 请求,也可能是我发送的 ARP 请求的响应

当我们发送了一个 ARP 请求后,应该需要将 ARP 响应给暂时缓存到本机上,过段时间一起发

中间人攻击

  • 主机 A 想获取主机 B 的 MAC,发送 ARP 请求并获取到了响应
  • 主机 D 把自己的 IP 伪装成主机 B 的 IP,又给主机 A 发送了 ARP 响应
  • 此时主机 A 更新了 ARP 缓存表,将主机 B 的 IP B 映射给了 MAC D
  • 主机 D 用同样的办法,将主机 B 的 ARP 缓存表中的 IP A 映射给了 MAC D
  • 此时主机 A 给 B 发送消息,填的是 MAC D;B 给 A 发消息,填的也是 MAC D;
  • 主机 D 在收到 A 和 B 双方通信的报文后,先交付给自己的上层,再转发给对方;

RARP协议

根据MAC地址获取IP地址的一个TCP/IP协议,因为既然我们已经知道一台主机的MAC地址了,那么我们就已经可以直接向给主机发送消息了,因此我们可以直接发消息询问对方的IP地址就行了


相关推荐
SoraLuna11 分钟前
「Mac玩转仓颉内测版7」入门篇7 - Cangjie控制结构(下)
算法·macos·动态规划·cangjie
安步当歌33 分钟前
【WebRTC】视频发送链路中类的简单分析(下)
网络·音视频·webrtc·视频编解码·video-codec
米饭是菜qy1 小时前
TCP 三次握手意义及为什么是三次握手
服务器·网络·tcp/ip
yaoxin5211231 小时前
第十九章 TCP 客户端 服务器通信 - 数据包模式
服务器·网络·tcp/ip
Algorithm15762 小时前
mac上使用docker搭建gitlab
macos·docker·gitlab
余清歌2 小时前
macOS解决U盘装完系统容量变小的问题
macos
SoraLuna2 小时前
「Mac玩转仓颉内测版8」入门篇8 - Cangjie函数与方法
算法·macos·cangjie
鹿鸣天涯2 小时前
‌华为交换机在Spine-Leaf架构中的使用场景
运维·服务器·网络
zhlx28352 小时前
【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载
macos·ios·cocoa
星海幻影2 小时前
网络基础-超文本协议与内外网划分(超长版)
服务器·网络·安全