5 链路层
链路层的基本服务是将数据报通过单一通信链路从一个结点移动到相邻节点。运行链路层协议的任何设备均称为节点(node),包括主机、路由器、交换机和WiFi接入点。沿着通信路径连接相邻节点的通信信道称为链路(link)。链路层提供的服务细节随着链路层协议的不同而变化,协议能够提供的可能服务包括:
- 组帧(framing)。封装数据报构成数据帧
- 链路接入(link access):帧首部中的"MAC"地址,标识了帧的源和目的地址
- 可靠交付:保证无差错地经链路层移动每个网络层数据报。通常是通过确认和重传取得的可靠服务。
- 差错检测和纠正。
链路层的主机部分是在网络适配器(network adapter,即网卡)中实现的。位于网络适配器核心的是链路层控制器,其通常是一个实现了许多链路层服务的专用芯片(例如Intel 8254x控制器实现了以太网协议, Atheros AR5006控制器实现了802.11 WIFI协议)。
1 差错检测和纠正技术¶
差错检测一般有奇偶校验、校验和,循环冗余检测码(CRC)等。
在奇偶校验中, 最简单的方法是发送方增加一个奇偶校验位(parity bit),使得d + 1个比特中1的总数是偶数个。而接收方只需验证接收到的数据中1的个数是否为偶数个。但使用这种方法,在多个位同时改变的情况下,未检测出差错的概率能够达到50%。
校验和(checksum)将数据的字节为左
2 多路访问链路和协议¶
3 局域网¶
MAC地址¶
MAC地址(MAC address, Media Access Control Address)是一个用来确认网络设备位置的识别码。MAC地址长度为6字节,通常用十六进制表示法,地址的每个字节表示为一对十六进制数字。MAC地址固化在网卡的ROM中,有时也可以软件设置。局域网中的每块网卡都有一个唯一的MAC地址,它由IEEE统一管理和分配。
保持各层独立
主机和路由器接口除了Ip地址以外还有MAC地址,有如下几个原因:
- 局域网是为任意网络层协议涉及的,如果适配器被指派IP地址的话,它将不能方便地支持其他网络层协议(例如IPX/DECnet)。
- 如果适配器使用的是Ip地址,那么Ip地址必须存储在适配器中,并且每次移动时都需要重新配置。
在全世界,MAC地址也并不总是唯⼀的。实际上,即使MAC地址相同,只要不是同属⼀个数据链路就不会出现问题。例如,⼀台主机上如果启动多个虚拟机,由于没有硬件的⽹卡只能由虚拟软件⾃⼰设定MAC地址给多个虚拟⽹卡,这时就很难保证所⽣成的MAC地址是独⼀⽆⼆的了。
ARP¶
ARP协议(地址解析协议, Address Resolution Protocol)用于IP地址和MAC地址之间的转换。 ARP利用广播对所有设备提问:“×× 这个 IP 地址是谁的?请把你的MAC地址告诉我”。然后就会有人回答:“这个IP地址是我的,我的MAC地址是 A ××××1。
不过,如果每次发送包都要这样查询一次,网络中就会增加很多ARP包,因此我们会将查询结果放到一块叫作ARP缓存的内存空间中留着以后用。也就是说,在发送包时,先查询一下ARP缓存, 如果其中已经保存了对方的MAC地址,就不需要发送ARP查询,直接使用ARP缓存中的地址,否则发送 ARP查询。每台主机或路由器在其内存中具有一个ARP表(ARP table),其包含了IP地址到MAC地址的映射关系,同时也包含了一个TTL值。
arp命令
arp
命令可以用来管理系统的ARP缓冲区。arp -la
可以查看本机ARP表的所有信息。
➜ arp -la
Neighbor Linklayer Address Expire(O) Expire(I) Netif Refs Prbs
192.168.1.1 f0:10:ab:7:ee:e0 1m49s 1m38s en0 1
192.168.1.5 70:48:f:a4:1b:41 expired expired en0 1
192.168.1.255 ff:ff:ff:ff:ff:ff (none) (none) en0
192.168.56.1 a:0:27:0:0:0 (none) (none) vboxnet0
192.168.56.255 ff:ff:ff:ff:ff:ff (none) (none) vboxnet0
224.0.0.251 1:0:5e:0:0:fb (none) (none) en0
以太网¶
在众多数据链路中,使用最广泛的莫过于以太网(Ethernet)。它是为多台计算机能够彼此自由而廉价地相互通信而设计的通信技术。现代以太网使用交换式集线器连接,集线器会根据接收方MAC地址将包转发到指定的目的地。
以太网经历了多个发展阶段1
- 原型:使用收发器的小设备,仅仅将不同网线之间的信号连接起来而已。当一台计算机发送信号时,信号就会通过网线流过整个网络,最终到达所有的设备。需要在信号的开头加上接收者的地址,接收者会接收这个包,其他设备会丢弃这个包。
- 使用集线器(hub): 将主干网线替换成了一个中继式集线器,将收发器网线替换成了双绞线, 但信号会发送给所有设备这一基本性质并没有改变。
- 使用交换机(switch): 现在的以太网都使用交换机,信号只会发送给根据MAC地址指定的设备,而不会到达其他设备。
以太网帧包含以下字段:
- 前同步码:由于传输帧时的速率漂移,需要将接收方适配器和发送方适配器的时钟进行同步
- 目的地址:目的MAC地址
- 源地址:源MAC地址
- 类型:使用的协议类型
- 0800:IP协议
- 0806:ARP协议
- 86DD:IPv6
- CRC: 循环冗余校验码
链路层交换机¶
交换机(switch)具有过滤、转发功能:
- 过滤(filter):决定一个帧应该转发到某个接口还是应当将其丢弃
- 转发(forwarding):决定一个帧应该被导向哪个接口,并把该帧移动到那些接口
交换机的过滤和转发借助于交换机表(switch table)完成的,其每个条目包含
- MAC地址
- 通向该MAC地址的交换机的接口
- 这个条目放置的时间
集线器/交换机/网桥/路由器
集线器 | 交换机 | 网桥 | 路由器 | |
---|---|---|---|---|
层次 | 物理层 | 链路层 | 链路层 | 网络层 |
流量(冲突域)隔离 | no | yes | yes | yes |
广播域隔离 | no | no | no | yes |
直通传输 | yes | yes | yes | no |