链路层和局域网
前言
打算系统学习下计算机网络,就来翻阅经典的自顶向下
本篇是第六章链路层和局域网,本章中主要探究几个链路层概念和技术,并更深入地研究差错检测和纠正,最后完整走一遍一个web页面请求的历程
资源:
- 书是第7版中文电子书:https://pan.baidu.com/s/1PidIzLmFVWAb8T74GyVGlQ 密码: bhob
- 网站是2021年更新的第8版:https://www-net.cs.umass.edu/kurose_ross/interactive/
1、链路层概述
(1)名词
- 节点(node):运行链路层协议(即第2 层)协议的任何设备,包括主机、路由器、交换机和WiFi接入点
- 链路(link):沿着通信路径连接相邻节点的通信信道
(2)服务
- 成帧(framing):在每个网络层数据报经链路传送之前,几乎所有的链路层协议都 要将其用链路层帧封装起来
- 链路接入:媒体访问控制(Medium Access Control, MAC)协议规定了帧在链路上传输的规则。对于在链路的一端仅有一个发送方、链路的另一端仅有一个接收方的点对点链路,MAC协议比较简单(或者不存在),即无论何吋链路空闲,发送方都能够发送帧。更有趣的情况是当多个节点共享单个广播链路时,即所谓多路访问问题,MAC协议用于协调多个节点的帧传输
- 可靠交付:当链路层协议提供可靠交付服务时,它保证无差错地经链路层移动每个网络层数据报,通常是通过确认和重传取得的
- 差错检测和纠正:当帧中的一个比特作为1传输时,接收方节点中的链路层硬件可能不正确地将其判断为0,反之亦然。这种比特差错是由信号衰减和电磁噪声导致的。因为没有必要转发一个有差错的数据报,所以许多链路层协议提供一种机制来检测这样的比特差错
(3)在何处实现
链路层的主体部分是在网络适配器(network adapter)中实现的,网络适配器有时也称为网络接口卡(Network Interface Card, NIC)
位于网络适配器核心的是链路层控制器,该控制器通常是一个实现了许多链路层服务(成帧、链路接入、差错检测等)的专用芯片
2、差错检测和纠正
比特级差错检测和纠正(bit-level error detection and correction):对从一个节点发送到另一个物理上连接的邻近节点的链路层帧中的比特损伤进行检测和纠正(Error- Detection and- Correction, EDC)
前向纠错(Forward Error Correction, FEC):接收方检测和纠正差错的能力
(1)奇偶校验
差错检测最简单最朴素的方式就是用单个奇偶校验位(parity bit),若有d比特数据:
- 在偶校验方案中,发送方只需包含一个附加的比特,选择它的值,使得这d 1比 特(初始信息加上一个校验比特)中1的总数是偶数,如下图所示
- 对于奇校验方案,选择校验比特值使得有奇数个 1
但若有偶数个差错,这个方案就失败了,所以升级下,提出二维奇偶校验 (two-dimensional parity)方案
(2)检验和方法
因特网检验和(Internet checksum):数据的字节作为16比特的整数对待并求和,这个和的反码形成了携带在报文段首部的因特网检验和。接方通过对接收的数据(包括检验和)的和取反码,并且检测其结果是否为全1比特来检测检验和 [RFC 1071]
不过因特网检验和通常用于传输层,而链路层用CRC
(3)循环冗余检测(CRC)
考虑d比特的数据D,发送节点要将它发送给接收节点。发送方和接收方首先必须协商一个r 1比特模式,称为生成多项式(generator),我们将其表示为G,要求G的最高有效位的比特(最左边)是1
然后要求
那么我们可以如此计算R
一个例子如下
现在用的32bit的G是G = 100000100110000010001110110110111
3、多路访问链路和协议
(1)名词
- 点对点链路(point-to-point link):由链路一端的单个发送方和链路另一端的单个接收方组成,如点对点协议(point-to-point protocol, PPP)和 高级数据链路控制(high-level data link control, HDLC)
- 广播链路(broadcast link):让多个发送和接收节点都连接到相同的、单一的、共享的广播信道
- 多路访问问题(muhiple access problem):如何协调多个发送和接收节点对一个共享广播信道的访问
- 多路访问协议(multiple access protocol):节点通过这些协议来规范它们在共享的广播信道上的传输行为,希望其拥有的特性:
(2)信道划分协议(channel partitioning protocol)
- 时分多路复用(TDM):将时间划分为时间帧(time frame),并进一步划分每个时间帧为N个 时隙(slot) 。节点被限制于R/N bps的平均速率,即使当它是唯一有分组要发送的节点时,节点必须总是等待它在传输序列中的轮次
- 频分多路复用(FDM):将R bps信道划分为不同的频段(每个频段具有R/N带宽),并把每个频率分配给N个节点中的一个,也限制一个节点只能使用R/N的带宽
- 码分多址(Code Division Multiple Access, CDMA):对每个节点分配一种不同的编码然后每个节点用它唯一的编码来对它发送的数据进行编码
(3)随机接入协议(random access protocol)
一个传输节点总是以信道的全部速率(即R bps)进行发送。当有碰撞时,涉及碰撞的每个节点反复地重发它的帧(也就是分组),到该帧无碰撞地通过为止。但它不必立刻重发该帧,重发该帧之前会等待一个随机时延
1、时隙 ALOHA
最简单的随机接入协议之一,假设:
- 所有帧由L比特组成
- 时间被划分成长度为L/R秒的时隙,一个时隙等于传输一帧的时间
- 节点只在时隙起点开始传输帧
- 节点是同步的,每个节点都知道时隙何时开始
- 如果在一个时隙中有两个或者更多个帧碰撞,则所有节点在该时隙结束之前检测到该碰撞事件
令P是一个概率,即一个在0和1之间的数。在每个节点中,时隙ALOHA的操作是简单的:
- 当节点有一个新帧要发送时,它等到下一个时隙开始并在该时隙传输整个帧
- 如果没有碰撞,该节点成功地传输它的帧,从而不需要考虑重传该帧(如果该节点有新帧,它能够为传输准备一个新帧)
- 如果有碰撞,该节点在时隙结束之前检测到这次碰撞。该节点以概率卩在后续的 每个时隙中重传它的帧,直到该帧被无碰撞地传输出去
效率:当有大量的活跃节点且每个节点总有大量的帧要发送时,长期运行中成功时隙的份额,Np(1-p)N-1
2、载波侦听多路访问(CSMA)
两个规则:
- 载波侦听(carrier sensing):说话之前先听,即一个节点在传输前先听信道,如果来自另一 个节点的帧正向信道上发送,节点则等待直到检测到一小段时间没有传输
- 碰撞检测(collision detection):如果与他人同时开始说话,停止说话,即当一个传输节点在传输时一直在侦听此信道,如果它检测到另 一个节点正在传输干扰帧,它就停止传输
(4)轮流协议(taking-turns protocol)
- 轮询协议(polling protocol):要求这些节点之一要被指定为主节点,主节点以循环的方式轮询(poll)每个节点。首先向节点1发送一个报文,告诉它(节点1) 能够传输的帧的最多数量;在节点1传输了某些帧后,主节点告诉节点2它(节点2)能够传输的帧的最多数量。如此以循环的方式轮询了每个节点
- 令牌传递协议(token-passing protocol):没有主节点, 一个称为令牌(token)的小的特殊帧在节点之间以某种固定的次序进行交换
4、交换局域网
(1)链路层寻址和ARP
- MAC地址:不是主机或路由器具有链路层地址,而是它们的适配器(即网络接口)具 有链路层地址。长度为6字节,共有248个可能的MAC地址。广播地址是
FF- FF- FF- FF- FF-FF
- 地址解析协议(Address Resolution Protocol, ARP)[RFC 826]:可参见一文搞明白ARP
(2)以太网
以太网是第一个广泛部署的高速局域网
1、帧结构
- 数据字段(46 ~ 1500字节):这个字段承载了 IP数据报,最大传输单元(MTU)是1500字节,超过1500字节,则必须将该数据报分片;最小长度是46字节,小于46字节,则必须被填充到46字节
- 目的地址(6字节):这个字段包含目的适配器的MAC地址,即BB-BB-BB-BB- BB-BB。当适配器B收到一个以太网帧,帧的目的地址无论是BB-BB-BB-BB-BB- BB,还是MACT播地址,它都将该帧的数据字段的内容传递给网络层;如果它收到了具有任何其他MAC地址的帧,则丢弃之
- 源地址(6字节):这个字段包含了传输该帧到局域网上的适配器的MAC地址,在本例中为AA-AA-AA-AA-AA-AA
- 类型字段(2字节):允许以太网复用多种网络层协议
- CRC (4字节):接收适配器(适配器B)检测帧中是否引入了差错
- 前同步码(8字节):以太网帧以一个8字节的前同步码(Preamble)字段开始,该前同步码的前7字节的值都是
10101010
;最后一个字节是10101011
2、 技术
(3)链路层交换机
1、交换机转发和过滤
借助于交换机表(switch table)完成过滤和转发:
- 过滤(filtering):决定一个帧应该转发到某个接口还是应当将其丢弃的交换机功能
- 转发(forwarding):决定一个帧应该被导向哪个接口,并把该帧移动到那些接口的交换机功能
2、自学习
- 交换机表初始为空
- 对于在每个接口接收到的每个入帧,该交换机在其表中存储:①在该帧源地址字段中的MAC地址;②该帧到达的接口;③当前时间。交换机以这种方式在它的表中记录了发送节点所在的局域网网段。如果在局域网上的每个主机最终都
- 如果在老化期(aging time)后,交换机没有接收到以该地址作为源地址的帧,就在表中删除这个地址。以这种方式,如果一台PC被另一台PC (具有不同的适配器)代替,原来PC的MAC地址将最终从该交换机表中被清除掉
3、性质
- 消除碰撞:在使用交换机(不使用集线器)构建的局域网中,没有因碰撞而浪费的带宽!交换机缓存帧并且决不会在网段上同时传输多于一个帧
- 异质的链路:交换机将链路彼此隔离,因此局域网中的不同链路能够以不同的速率运行并且能够在不同的媒体上运行
- 管理:如果一个适配器工作异常并持续发送以太网帧(称为快而含 糊的(jabbering)适配器),交换机能够检测到该问题,并在内部断开异常适配器
4、比较
(4)虚拟局域网(Virtula Local Network, VLAN)
5、web页面请求的历程
一名学生Bob将他的便携机与学校的以太网交换机相连,下载一个Web页面(比如说www. google, com主页):
- Bob便携机上的操作系统生成一个DHCP请求报文,并将这个报文放入具有目的端口 67 (DHCP服务器)和源端口 68 (DHCP客户)的UDP报文段该UDP报文段则被放置在一个具有广播IP目的地址
255.255.255.255
和源IP地址0. 0. 0. 0
的IP数据报中,因为Bob的便携机还没有一个IP地址 - 包含DHCP请求报文的IP数据报则被放置在以太网帧中。该以太网帧具有目的MAC地址
FF: FF: FF: FF: FF: FF
,使该帧将广播到与交换机连接的所有设备 (如果顺利的话也包括DHCP服务器);该帧的源MAC地址是Boh便携机的MAC地址00: 16: D3:23:68:8A
- 包含DHCP请求的广播以太网帧是第一个由Bob便携机发送到以太网交换机的帧。该交换机在所有的出端口广播入帧,包括连接到路由器的端口
- 路由器在它的具有MAC地址
OO:22:6B:45:1F
的接口接收到该广播以太网帧,该帧中包含DHCP请求,并且从该以太网帧中抽取出IP数据报。该数据报的广播IP目的地址指示了这个IP数据报应当由在该节点的高层协议处理,因此该数据报的载荷(一个 UDP报文段)被分解向上到达UDP,DHCP请求报文从此UDP报文段中抽取出来。此时DHCP服务器有了 DHCP请求报文 - 我们假设运行在路由器中的DHCP服务器能够以CIDR块
68. 85. 2. 0/24
分配IP地址。所以本例中,在学校内使用的所有IP地址都在Comcast的地址块中。我们假设DHCP服务器分配地址68. 85. 2. 101
给Bob的便携机。DHCP服务器生成包含这个IP地址以及DNS服务器的IP地址68.87.71.226
、默认网关路由器的IP地址68. 85. 2. 1
和子网块68.85.2.0/24
(等价为“网络掩码”)的一个DHCP ACK报文。该DHCP报文被放入一个UDP报文段中,UDP报文段被放入一个IP数据报中,IP数据报再被放入一个以太网帧中。这个以太网帧的源MAC地址是路由器连到归属网络时接口的MAC地址00:22:6B:45:1F:1B
,目的MAC地址是Bob便携机的MAC地址00: 16: D3:23:68:8A
- 包含DHCP ACK的以太网帧由路由器发送给交换机。因为交换机是自学习的 ,并且先前从Bob便携机收到(包含DHCP请求的)以太网帧,所以该交换机知道寻址到
00: 16:D3:23:68:8A
的帧仅从通向Bob便携机的输岀端口转发 - Bob便携机接收到包含DHCP ACK的以太网帧,从该以太网帧中抽取IP数据报, 从IP数据报中抽取UDP报文段,从UDP报文段抽取DHCP ACK报文。Bob的DHCP客户则记录下它的IP地址和它的DNS服务器的IP地址。它还在其IP转发表中安装默认网关的地址。Bob便携机将向该默认网关发送目的地址为其子网
68. 85. 2. 0/24
以外的所有数据报。此时,Bob便携机已经初始化好它的网络组件,并准备开始处理Web网页获取 - Bob将www. google. com的URL键入其Web浏览器时,操作系统因此生成一个DNS查询报文,将字符串www. google. com放入DNS报文的问题段中。该DNS报文则放置在一个具有53号(DNS服务 器)目的端口的UDP报文段中。该UDP报文段则被放入具有IP目的地址
68. 87. 71. 226
和源IP地址68. 85. 2. 101
的IP数据报中 - Bob便携机则将包含DNS请求报文的数据报放入一个以太网帧中。该帧将发送到Bob学校网络中的网关路由器。然而,即使Bob便携机经过上述第5步中的DHCP ACK报文知道了学校网关路由器的IP地址
68. 85.2. 1
,但仍不知道该网关路由器的MAC地址。为了获得该网关路由器的MAC地址,Bob便携机将需要使用ARP协议 - Bob便携机生成一个具有目的IP地址
68. 85. 2. 1
(默认网关)的ARP查询报文,将该ARP报文放置在一个具有广播目的地址的以太网帧中,并向交换机发送该以太网帧,交换机将该帧交付给所有连接的设备,包括网关路由器 - 网关路由器在通往学校网络的接口上接收到包含该ARP查询报文的帧,发现在ARP报文中目标IP地址
68. 85. 2. 1
匹配其接口的IP地址。网关路由器因此准备一个ARP回答,指示它的MAC地址00:22:6B:45:1F:1B
对应IP地址68. 85. 2. 1
。它将ARP回答放在一个以太网帧中,其目的地址为00:16:D3:23:68:8A
(Bob便携机),并向交换机发送该帧,再由交换机将帧交付给Bob便携机 - Bob便携机接收包含ARP回答报文的帧,并从ARP回答报文中抽取网关路由器的 MAC 地址
- Boh便携机现在(终于!)能够使包含DNS查询的以太网帧寻址到网关路由器的MAC地址。注意到在该帧中的IP数据报具有IP目的地址
68.87.71.226
( DNS服务器),而该帧具有目的地址00:22:6B:45:1F:1B
(网关路由器)。Bob便携机向交换机发送该帧, 交换机将该帧交付给网关路由器 - 网关路由器接收该帧并抽取包含DNS查询的IP数据报。路由器查找该数据报的目的地址
68. 87.71.226
,并根据其转发表决定该数据报应当发送到图中的Comcast 网络中最左边的路由器。IP数据报放置在链路层帧中,该链路适合将学校路由器连接到最左边Comcast路由器,并且该帧经这条链路发送 - 在Comcast网络中最左边的路由器接收到该帧,抽取IP数据报,检查该数据报的目的地址
68. 87.71.226
,并根据其转发表确定出接口,经过该接口朝着DNS服务器转发数据报,而转发表已根据Comcast的域内协议以及因特网的域间协议BGP 所填写 - 最终包含DNS查询的IP数据报到达了 DNS服务器。DNS服务器抽取出DNS查询报文,在它的DNS数据库中找到包含对应 www. google. com的IP地址
64.233.169.105
的DNS源记录 - Bob便携机从DNS报文抽取出服务器www. google. com的IP地址,生成TCP套接字,首先与www. google. com中的TCP执行三次握手 。Bob便携机因此首先生成一个具有目的端口 80 (针对HTTP的)的TCP SYN 报文段,将该TCP报文段放置在具有目的IP地址
64. 233. 169. 105
的IP 数据报中,将该数据报放置在MAC地址为00:22:6B:45:1F:1B
(网关路由器)的帧中, 并向交换机发送该帧 - 在学校网络、Comcast网络和谷歌网络中的路由器朝着www. google. com转发包含TCP SYN的数据报,使用每台路由器中的转发表
- 最终,包含TCP SYN的数据报到达www.google.com。从数据报抽取出TCP SYN 报文并分解到与端口 80相联系的欢迎套接字。对于谷歌HTTP服务器和Bob便携机之间 的TCP连接生成一个连接套接字。产生一个TCP SYNACK (3.5.6节)报文段, 将其放入向Bob便携机寻址的一个数据报中,最后放入链路层帧中,该链路适合将www.google.com连接到其第一跳路由器
- 包含TCP SYNACK报文段的数据报通过谷歌、Comcast和学校网络,最终到达 Bob便携机的以太网卡。数据报在操作系统中分解到TCP套接字,从而进入连接状态
- 借助于Bob便携机上的套接字,Bob的浏览器生成包含要获取的URL的HTTP GET报文。HTTP GET报文则写入套接字,其中GET报文成为一个TCP报文段的载荷。
- 在www.google.com的HTTP服务器从TCP套接字读取HTTP GET报文,生成一 个HTTP响应报文,将请求的Web页内容放入HTTP响应体中,并将报文发送进TCP套接字中
- 包含HTTP回答报文的数据报通过谷歌、Comcast和学校网络转发,到达Bob便 携机。Bob的Web浏览器程序从套接字读取HTTP响应,从HTTP响应体中抽取Web网页 的html,并最终(终于!)显示了 Web网页
结语
到此完成了对整个网络体系的学习
红客突击队于2019年由队长k龙牵头,联合国内多位顶尖高校研究生成立。其团队从成立至今多次参加国际网络安全竞赛并取得良好成绩,积累了丰富的竞赛经验。团队现有三十多位正式成员及若干预备人员,下属联合分队数支。红客突击队始终秉承先做人后技术的宗旨,旨在打造国际顶尖网络安全团队。