【网络协议笔记】链路层协议整理
2019-07-25 本文已影响7人
58bc06151329
文前说明
作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。
本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。
1. 概要
- 运行链路层协议(第二层)的任何设备均称为 节点。节点包含主机、路由器、交换机、Wifi 接入点等。沿着通信路径连接相邻节点的通信信道称为 链路(link)。为了将一个数据报从源主机传输到目的主机,数据报必须通过沿端到端路径上的各段链路传输。在通过特定的链路时,传输节点将数据报封装在 链路层帧 中,并将该帧传送到链路中。
- 链路层提供的服务。
- 成帧(framing)。一个帧由一个数据字段和若干首部字段组成,其中网络层数据报插在数据字段中。帧的结构由链路层协议决定。
- 链路接入。媒体访问协议(Medium Access Control,MAC)协议规定了帧在链路上传输的规则。
- 可靠交付。当链路层协议提供可靠交付服务时,它保证无差错地经链路层移动每个网络层数据报,然而对于低比特差错的链路,可靠交付被认为是一种不必要的开销,所以许多有线的链路层协议都不提供可靠交付服务。
- 差错检测和纠正。当帧中的一个比特作为 1 传输时,接收方节点中的链路层硬件可能不正确地将其判断为 0,反之亦然。这种比特差错是由信号衰减和电磁噪声导致的。
- 链路层的主题部分是在 网络适配器(network adapter)中实现的,网络适配器也称为 网络接口卡(Network Interface Card,NIC)。
2. 原理
2.1 MAC 地址
- 不是主机或路由器具有链路层地址,而是它们的适配器(网络接口)具有链路层地址。
- 链路层交换机并不具有与它们的接口(这些接口是与主机和路由器相连的)相关联的链路层地址。
- 这是因为链路层交换机的任务是在主机与路由器之间承载数据报。
- 交换机透明地执行该项任务。
- 主机或路由器必须明确地将帧寻址到期间的交换机。
- 链路地址有不同的称呼,例如 LAN 地址(LAN address)、物理地址(physical address)或 MAC 地址(MAC address)。
- 对于大多数局域网,MAC 地址长度为 6 字节(6 个字节地址通常用十六进制表示法,地址的每个字节被表示为一对十六进制数),共有 248 个可能的 MAC 地址。
- 每个适配器具有唯一的 MAC 地址。
- 当某适配器要向某些目的适配器发送一个帧时,发送适配器将目的适配器的 MAC 地址插入到该帧中,并将该帧发送到局域网上(通过广播方式)。当适配器接收到一个帧时,将检查该帧中的目的 MAC 地址是否与它自己的 MAC 地址匹配。如果匹配,提取出封装的数据报,并沿协议栈向上传递,如果不匹配,则丢弃该帧。
- 有时的的确需要让局域网上所有其他适配器接收并处理发送的帧,这种情况下,发送适配器在该帧的目的地址中插入一个特殊的 MAC 广播地址(broadcast address)即(以十六进制表示法表示是 FF-FF-FF-FF-FF-FF)。
2.2 地址解析协议
- 因为存在网络层地址(如因特网 IP 地址)和链路层地址(即 MAC 地址),所以需要在它们之间进行转换。这就是 地址解析协议(Address Resolution Protocol,ARP)[ RFC 826 ] 的任务。
- 每台主机和路由器有一个单一的 IP 地址和 单一的 MAC 地址。如果要向目的地主机发送 IP 数据报,该源必须要向它的适配器提供 IP 数据报,还需要提供目的主机的 MAC 地址,然后发送适配器将构建一个包含目的地 MAC 地址的链路层帧,发送到局域网中。
- 通过 ARP 就能确定目的地主机的 MAC 地址。通过发送主机的 ARP 模块将获取在相同局域网上的任何 IP 地址对应的 MAC 地址。
- 每台主机或路由器在其内存中具有一个 ARP 表(ARP table),这张表包含 IP 地址到 MAC 地址的映射关系。该表包含一个 寿命(TTL)值,它指示了从表中删除每个映射的时间。
- 这张表不必为该子网上的每台主机和路由器都包含一个表项,某些可能从来没有进入到该表中,某些可能已经过期。
- 如果发送方的 ARP 表具有目的节点的表项,那么直接获得 MAC 地址。
- 如果发送方的 ARP 表不具有目的节点的表项,则构造一个 ARP 查询分组,该分组包括发送方和接收方的 IP 地址及 MAC 地址字段(MAC 地址字段填写 MAC 广播地址),在链路层帧中封装这个 ARP 分组,传输进子网中。
- 子网中的所有其他适配器将该帧中的 ARP 分组向上传递给 ARP 模块,检查是否与 ARP 分组中的接收方 IP 地址匹配,与之匹配的主机向查询主机发送回一个带有所希望映射的 ARP 响应分组(ARP 响应分组与 ARP 查询分组格式一致)。
- 查询主机接收这个返回的响应 ARP 分组,更新它的 ARP 表,并发送 IP 数据报。
- ARP 协议可以看成是一个跨越链路层和网络层边界两边的协议。
- 路由器有多个接口,那么该路由器也就有多个 IP 地址,多个 ARP 模块和 多个适配器(即多个 MAC 地址)。
- 假设发送方主机(在子网 A),通过路由器再到目的地主机(在子网 B),首先需要通过 ARP 获得路由器子网 A 接口的 MAC 地址,路由器接口 A 接收到 IP 数据报后通过路由器中的转发表,转发到子网 B 接口上,然后发送 ARP 获得目的地主机的 MAC 地址,再将 IP 数据报发送给目的地主机。
2.3 以太网
2.3.1 以太网帧结构

字段名称 | 说明 |
---|---|
数据字段(46~1500 字节) | 承载了 IP 数据报。以太网最大传输单元(MTU)是 1500 字节。IP 数据报超 1500 字节,则主机必须将该数据报切片,如果小于 46 字节,则需要填充。 |
目的地址(6 字节) | 目的适配器 MAC 地址。当适配器接收到匹配的 MAC 地址和 MAC 广播地址,则将该帧的数据字段内容传递给网络层,否则丢弃。 |
源地址(6 字节) | 包含传输该帧到局域网上的适配器的 MAC 地址。 |
类型字段(2 字节) | 类型字段允许以太网复用多种网络层协议(使用除 IP 以外的其他网络层协议),ARP 分组类型编号 0806,则该 ARP 分组将被多路分解给 ARP 协议。 |
CRC(4 字节) | CRC(循环冗余检测)字段的目的是使得接收适配器检测帧中是否引入了差错。 |
前同步码(8 字节) | 前同步码的前 7 个字节的值,用于 " 唤醒 " 接收适配器,并将它们的时钟和发送方的时钟同步(解决传输的漂移问题),第 8 个字节的最后两个比特连续为 1 时,则警告目的地适配器 " 重要内容 " 的到来。 |
- 以太网技术是向网络层提供无连接服务,类似 UDP 服务。
- 以太网技术是向网络层提供不可靠服务,CRC 校验不通过会丢弃帧,但是发送方适配器并不知道,如果接收方运输层使用的是 TCP 协议,那么该主机 TCP 将不会确认包含在丢弃帧中的数据,从而引起发送方主机的 TCP 重传。
2.4 链路层交换机
- 交换机的任务是接收入链路层帧并将它们转发到出链路。
- 交换机自身对子网中的主机和路由器是 透明的(transparent)。
2.4.1 交换机转换和过滤
- 过滤(filtering)是决定一个帧应该转发到某个接口还是应当将其丢弃的交换机功能。
- 转发(forwarding)是决定一个帧应该被导向哪个接口,并把该帧移动到那些接口的交换机功能。
- 交换机的过滤和转发借助于 交换机表(switch table)完成。交换机表包含某局域网上某些主机和路由器的但不必是全部的表项。
- 交换机表项包含。
- 一个 MAC 地址。
- 通向该 MAC 地址的交换机接口。
- 表项放置在表中的时间。
- 交换机是基于 MAC 地址的转发,而路由器是基于 IP 地址的转发。
- 假设目的地址为 AA-AA-AA-AA-AA-AA 的帧从交换机的接口 x 到达。
- 交换机表中有一个表项 AA-AA-AA-AA-AA-AA 与接口 x 关联,那么字节丢弃该帧执行过滤功能。
- 表中有一个表项 AA-AA-AA-AA-AA-AA 与接口 y(不等于 x)关联,交换机通过将该帧放入接口 y 前面的输出缓存完成转发功能。
- 表中没有对于 AA-AA-AA-AA-AA-AA 的表项,交换机向除接口 x 以外的所有接口前面的输出缓存转发该帧的副本(广播)。
2.4.2 自学习
- 交换机是自动、动态和自治地建立的,交换机是 自学习(self-learning)的。
- 交换机表初始为空。
- 对于每个接口接收到的每个入帧,该交换机在其表中存储下列字段。
- 在该帧源地址字段中的 MAC 地址。
- 该帧到达的接口。
- 当前时间。
- 交换机以这种方式在它的表中记录发送节点所在的局域网网段。如果局域网上每个主机都发送了帧,则每个主机将在这张表中留有记录。
- 在一段时间后(称为老年期(aging time)),交换机没有接收到以该地址作为源地址的帧,则在表中删除该地址。
- 交换机是 即插即用设备(plug-and-play device)。交换机是双工的,任何交换机接口能够同时发送和接收。
2.4.3 链路层交换机的性质
- 交换机的几个优点。
- 消除碰撞,在使用交换机构建的局域网中,没有因碰撞而浪费的带宽。
- 异质的链路,交换机将链路彼此隔离,因此局域网中的不同链路能够以不同的速率运行并且能够在不同的媒体上运行。
- 管理,除了提供强化的安全性,交换机也易于进行网络管理。
2.4.4 虚拟局域网(VLAN)
- 现代机构的局域网常常是配置为等级结构的,每个工作组(部门)有自己的交换局域网,经过一个交换机等级结构与其他工作组的交换局域网互联。但这样还是有一些缺点。
- 缺乏流量隔离。该等级结构把组流量局域化到一个单一交换机中,但广播流量仍然必须跨越整个结构网络。
- 交换机的无效使用。如果组织有 N 个小组,就需要有 N 个第一级交换机,造成浪费。
- 管理用户。雇员在不同组间移动,必须改变物理布线。
- 这些问题可以通过支持 虚拟局域网(Virtula Local Network,VLAN)的交换机来处理。
- 支持 VLAN 的交换机允许经一个单一的物理局域网基础设施定义多个虚拟局域网。
- 在一个 VLAN 内的主机彼此通信,仿佛它们(并且没有其他主机)与交换机连接。
- 在一个基于端口的 VLAN 中,交换机的端口(接口)由网络管理员划分为组。每个组构成一个 VLAN,在每个 VLAN 中的端口形成一个广播域(即来自一个端口的广播流量仅能到达该组中的其他端口),VLAN 与 VLAN 的帧彼此隔离。
- 交换机中会维护一张端口到 VLAN 的映射表。交换机软件仅在属于相同 VLAN 的端口之间交付帧。