[计算机网络——自顶向下方法] C5 Link-Layer

The Link Layer: Links, Access Networks, and LANS

[TOC]

将所有运行链路层协议的设备都叫做 node。包括有主机(hosts),路由器(routers),交换机(switches),以及WIFI接入点。

通过通信线路,将连接两个毗邻node连接起来的 communication channel 称为 link

Over a given link, a transmitting node encapsulates the datagram in a link-layer frame and transmits the frame into the link.

链路层在一个网络适配器(Network Adapter)中被实现,网络适配器有时也被称为网卡(Network interface card). 网络适配器的核心是一个链路层控制器,通常是一个专用芯片,芯片中实现了许多链路层服务。因此,链路层控制器的许多功能都是由硬件实现的。

Network Link 通常被分为两类:point-to-point links and broadcast links.

点对点链路由一个单独的发送端和一个单独的接收端组成。

广播链路(Broadcast Link)上可以有多个发送端和接收端同时进行收发工作。这里之所以使用广播这个词语,是因为当任意一个node传输frame时,broadcast channel上的所有nodes都会接收到一份复制frame。

链路层最重要的问题:如何协调多个节点使用共享的broadcast channel,来同时发送和接收数据帧。该问题被称为 multiple access problem.

Boradcast channels 通常被用在LAN中,networks that are geographically concentrated in a single building (or on a corporate or university campus).

使用 multiple access protocol 来解决 multiple access problem。

所有的 multiple access protocol 都可以被分为三类:

  • channel partitioning protocols
  • random access protocols
  • taking-turns protocols

Switched Local Area Networks

MAC Address

具有MAC地址的实际上是网络适配器(即:网卡 network interface)。一个具有多个网卡的路由器或者主机将会具有多个MAC地址,同时也就会具有多个 IP 地址。

值得注意的是,链路层交换机上连接主机和路由器的端口本身并没有链路层地址。这时因为链路层交换机的任务是在主机和路由器之间交换datagram; a switch does this job transparently, that is, without the host or router having to explicitly address the frame to the intervening switch.

当适配器打算将一个数据帧发送到目的适配器时,发送端适配器将目的适配器的MAC地址插入frame,然后将该数据帧发往LAN。然后交换机将收到的frame广播到它所有的端口(暂定,后面会有更加准确的解释)。这时,当适配器接收到一个frame之后,它会检查目的MAC地址是否为自己的MAC地址。如果匹配,适配器就会将数据帧中的数据段抽取出来,如果不匹配,那就就会丢弃该数据帧。不过,有时发送端适配器就是想要向LAN上其他所有适配器收到他所发送的数据帧。在这种情况下,发送端适配器会在数据帧的目的MAC地址处填上一个特殊的MAC广播地址。对于使用6字节的LAN来说,广播地址就是48个连续的1.

Address Resolution Protocol(ARP)

地址解析协议——用来在网络地址和链路层地址之间进行转换。

DNS与ARP的重要区别在于:DNS可以为主机解析位于Internet上所有主机的host name,而 ARP 只能解析位于同一个子网下的其他主机和路由器端口的 IP 地址。

在每台主机以及路由器的内存中,都具有一个ARP table,它保存了 IP 地址到 MAC 地址的对应关系。ARP table 同时也包含了一个time-to-live(TTL) value。

如果目的 IP 地址不在 ARP table 中,发送端会使用 ARP 协议去解析这个地址。首先,发送端构建一个特殊的 packet 叫做 ARP packet。ARP packet 中的字段包括了发送端的 IP 和 MAC 地址。发送端适配器将该 packet 封装进一个 link-layer frame,并且该数据帧的目的地址为广播地址,然后将该数据帧发送到子网中。自身 IP 地址为 ARP 请求目的 IP 的适配器会发送一个 ARP 响应,返回自己的 MAC 地址。

首先,ARP 请求消息是被封装进一个广播数据帧中,然而 ARP 响应是被封装进一个标准数据帧。其次,ARP is plug-and-play(随插即用)。

ARP packet被封装进一个链路层数据帧,然而 ARP packet 中却包含有链路层地址。所以,ARP 应该是一个处于网络层和链路层之间的协议。

Sending a Datagram off the Subnet

上图中,每个主机只有一个IP地址和一个适配器。但是在介绍网络层时说过,一个路由器上的每个端口都具有一个IP地址。对于路由器的每个端口,同时也有一个ARP模块以及一个适配器。上图中,路由器有两个端口,因此它具有两个IP地址,两个ARP模块,以及两个适配器和两个MAC地址。

发送端主机将数据包发送给自己的适配器,但是,同时主机还需要告诉适配器一个目的MAC地址,这个目的MAC地址应该是下一跳路由器对应端口的MAC地址。假设数据包是从111.111.111.111发送到222.222.222.222的,那么第一次的MAC地址应该为111.111.111.110的MAC地址即E6-E9-00-17-BB-4B。子网1上路由器的适配器发现该链路层数据包的目的地址为自己,那么它就捕获该数据帧并且将其中的IP数据包发送给路由器的网络层。现在轮到路由器来决定该数据包应该被转发到自己的哪个端口了。这是通过查询路由器中的转发表来实现的。转发表告诉路由器,该数据包应该通过路由器的222.222.222.220端口转发。那么该端口将该数据包发送给自己的适配器,该适配器将该数据包封装进一个新的数据帧,然后将该链路层数据帧发送给子网2。当然,该链路层数据帧的目的MAC地址也是通过ARP获得的。

交换机的作用在于接收到来的链路层数据帧,并且将它们转发到外部链路。对于主机和路由器来说,交换机是透明的:即,主机/交换机指明数据帧的目的主机/路由器的地址(注意不是交换机接口的地址,交换机的接口本身也没有地址),然后就将数据帧发送到子网中,它们并不知道会有交换机接收到数据帧并且进行转发。

Forwarding and Filtering

Switch filtering and forwarding are done with a switch table.转发表的核心作用就是规定MAC地址和交换机接口的对应关系。

posted @ 2019-10-28 16:23  HZQTS  阅读(457)  评论(0编辑  收藏  举报