一、物理层
1.物理层
物理层面的通信标准可以概括划分为与网络基础设施有关的标准和与被传输物理信号有关的标准两类。
网络基础设施的标准:鉴于物理层面的消息互通也是物理层应该兑现的服务,因此物理层的标准还会包括针脚的用途、线缆的材料与设计等因素。我们大家耳熟能详的水晶头(RJ-11和RJ-45)、串行接口(EIA-RS-232)、网线线序(ANSI/TIA/EIA-568)都属于这一类标准。
所传物理信号的标准:既然接收方设备通过传输介质接收到用物理表示方法描述的二进制信号时,需要将物理信号还原成本来的二进制数据,那么收发数据的双方就必须拥有一套相同的数据编码标准。每个比特的时长、传输开始和终止的信号标志都需要进行定义。不归零编码(NRZ)、曼彻斯特编码、不归零反转编码(NRZI)和4B/5B编码等都对信号的标准进行了定义。
在一些实际网络中,二进制数字信号在传输的过程中需要借助电话线路等模拟网络进行发送。在这种情况下,人们需要在终端与模拟线路之间安装一台调制解调器将这些数字信号转换为模拟信号,这样才能让信号在模拟线路中传输,如图所示。
2.网络介质
有线介质
目前,连接局域网时采用的有线介质以双绞线和光纤为主。双绞线是指为了冲抵干扰,而将由两根相互绝缘的导线按照一定规格相互缠绕在一起而形成的通信介质。
双绞线的最大传输距离为100m。
双绞线传输数据时采用的方法是将数据转换为电信号进行传输,而光纤传输数据时则会将其转换为光信号。
光纤可以分为单模光纤和多模光纤。
多模光纤可以让不同模式的光在一根光纤上传输,由于模间色散较大而导致信号脉冲展宽严重,因此多模光纤传输距离较短,主要用于局域网中的短距离传输,但也可以达到数百米的传输距离,相比双绞线来说已经拥有了数倍的优势。
单模光纤只能传输一种模式的光,不存在模间色散,因此适用于长距离高速传输,传输距离可以达到数千米,甚至上百千米。
当然,除了双绞线和光纤之外,人们在连接广域网时,也会采用以EIA-RS-232标准为主的串行连接(Serial接口)等其他连接标准
无线介质
使用有线介质在通过线缆传输信号时,终端会用电压和光强来描述二进制信号。而对于无处不在的无线介质,终端设备则会使用电磁波来描述要传输的信号,并通过微波来承载这些信号。
无线的连接方式主要分为下面两种:
基础设施连接(Infrastructure):终端设备通过接入点(AP)接入局域网,并进而访问更大的网络(常常是互联网)。
自组织连接(Ad hoc):即终端设备之间直接通过无线信号实现连接,这种连接方式的目的是建立一个小规模的通信网络,而未必是为了连接到其他大型的网络(如互联网)当中。
二、数据链路层
根据OSI参考模型的定义,当接收方设备通过物理层协议将电压高低、光的闪灭或电磁特征等物理描述方式转换为由数据编码成的二进制信号时,这台设备就要继续通过数据链路层来处理这些接收到的比特流,并将经过处理的数据帧交由上层的网络层进行处理。
同样,当发送方设备将网络层封装好的数据包交给数据链路协议处理时,这一层的协议也需要将其封装成数据帧,交由物理层进行编码和发送。
为了完成这些任务,数据链路层需要解决的问题如下。
数据成帧:当网络层封装的数据包到达数据链路层时,数据链路层协议需要给数据包添加上头部和尾部,这个封装之后的结构称为数据帧(Frame)。数据帧就是物理层执行编码转换的数据。
错误校验:由于信号在物理层传输的过程中难免会出现差错,因此位于物理层之上的数据链路层就需要承担错误校验的功能,以确保交付给网络层的数据帧是正确的。
物理寻址:数据链路层为处于同一个网段中的设备提供物理寻址的依据,让发送方设备可以使用接收方设备的地址来封装数据帧,以确保接收方设备能够接收并接受发送方发来的数据。
可靠传输:在物理介质差错率比较严重的情况下,数据链路层协议可以像传输层协议一样提供保障数据可靠传输的机制,即通过确认和重传来确保通信的接收方接收到了数据。由于确认和重传也会占据链路的开销,因此在物理介质差错率不高的环境中,数据链路层协议往往不会提供与可靠传输有关的功能,而会把相关的步骤留给传输层协议进行处理。
1.链路类型
从贴近物理层的角度来看,设备之间的相互连接需要通过某种介质来实现,而这种介质要么是共享型介质,要么是两台设备之间独占的点对点连接。
对于所有通过同一个共享型介质连接在一起的设备来说,只要有一台以上的设备同时发送数据,它们发送的信号就会在这个共享介质上叠加,导致接收方难以识别其中任何一台设备发送的数据,这种因为数据在共享介质上信号叠加导致接收方无法识别原数据的情形称为冲突(Collision),而通过同一个共享型介质连接在一起的设备则称为处于同一个冲突域(Collision Domain)中。
采用共享介质传输数据的环境的协议需要解决的问题至少比采用独占信道通信的协议多出了以下两点:
- 如何找到接收方;
- 如何避免冲突。
相比点对点连接,诸如WLAN这类共享型介质环境要求数据链路层协议提供更多硬件层面的标准。尽管相比TCP/IP模型,OSI模型已经细化了对于底层的定义,将TCP/IP模型中,网络接入层的服务分散到了数据链路层和物理层两层当中。
共享型网络要想实现数据传输,必须针对大量设备如何在网络中有序收发数据、如何实现相互寻址等服务制订明确的规则,而这类规则在逻辑上应该比数据链路层的其他服务更加靠近物理层,于是IEEE将数据链路层的服务分为了LLC子层和MAC子层,它们的作用概括如下。
逻辑链路控制(LLC)子层:与网络层相接,为不同的MAC子层协议与网络层协议之间提供统一的接口,并提供流量控制等服务。
介质访问控制(MAC)子层:与物理层相接,为统一的LLC子层协议和不同的物理层介质之间提供沟通的媒介,并执行与硬件有关的服务,包括在共享环境中实现资源分配、让通信可以适应不同的传输介质、实现数据寻址等。这个子层也就是本小节要进行介绍的介质访问控制子层。
从逻辑上看,保障共享介质不会出现信息冲突的方法有下面两种。
- 定义不可发送数据的情形:如果介质中有数据正在传输,则设备不能发送数据,否则可以随时发送数据。
- 定义可以发送数据的情形:只有获得发送数据许可的通信设备可以发送数据,同时只有一台设备可以获得许可。
载波侦听多路访问/冲突检测(后文简称CSMA/CD)是一种通过定义不可发送数据的情形来避免冲突的技术。
载波侦听多路访问指每个站点在发送信号之前需要首先监测共享介质,查看介质中是否有消息正在传输,如果介质中有消息正在传输则暂不传输数据。
不过,如果因为介质中有信号正在传输,导致多台准备发送数据的设备都暂停发送数据,那么这些设备难免会在介质中信号传输结束之后同时开始发送数据,这也会导致冲突。因此,发送方站点在开始发送数据之后仍会侦听传输介质,查看介质中传输的信号是否与自己发送的信号一致,如果不一致说明发生了冲突,此时发送方就会暂停发送,等待一段随机时间之后再发送,这个过程叫作冲突检测。
令牌环是一种通过定义可以发送数据的情形来避免冲突的技术,其方法类似于驾驶员在十字路口等待本方向获得绿灯时方可通过。
在一个环形拓扑环境中,一台设备要发送数据必须首先获取一个赋予设备向介质中发送信号权限的特殊数据帧,这个数据帧就称为令牌(Token),如图4-7所示。令牌在网络中沿着固定的方向一站一站地进行传输,如果收到令牌的设备并没有数据需要传输,它会立刻把令牌转发给下一台设备,否则就会持有该令牌,最大限度地发送数据帧,然后再将令牌转发给下一台设备。
载波侦听多路访问/冲突避免(后文简称CSMA/CA)是用于无线局域网环境中的冲突避免技术,这是另一种通过定义不可发送数据的情形来避免冲突的技术。
无线环境之所以没有沿用传统的CSMA/CD技术,一方面是因为无线环境中的信号衰减十分严重,这使得发送方无法在发送信号的同时,通过判断自己接收到的信号是否与发送的信号一致来检测信号是否在信道中发生了冲突,因为相对于发送方正在发送的信号而言,它有可能接收到的信号往往在强度上过于微弱,设备难以判断信号是否在信道中与其他信号产生了叠加;另一方面,无线设备是以帧为单位发送数据的,即使检测到了冲突也不会为了避免冲突而立刻停止发送数据帧。根据上述两点我们可以得出结论:在无线环境中执行冲突检测不仅难以做到,而且也没有必要。于是,CSMA/CA机制则规定除了发送第一个数据帧的设备可以在检测到信道空闲时,仅仅经历一段短暂的间隔时间就可以发送数据帧之外,其他设备即使检测到信道空闲,也必须随机回退一段时长来避免冲突。设备在回退时会设置一个计时器,等待过程中只要检测到信道被占用,则暂停计时器倒计时,待计时器倒计时结束再执行数据帧的发送。
2.数据封装格式
每当技术人员需要深入了解一项网络协议或者标准,最直观的方法就是观察这项协议或者标准所定义的封装格式。
前导码(Preamble):前导码由7字节组成,这7字节的每个字节均固定为10101010。在7字节的前导码之后的字节称为帧起始定界符,这个字节固定为10101011。这8个字节的目的是为了通过编码,让一个以太网数据帧的开头部分表现为有规律的物理信号,以便提醒接收方设备,让它与自己同步时钟。而帧起始定界符的最后两位被定义为11,这是为了告知接收方,在这两个比特之后即为以太网数据帧下一个字段的开始。
目的地址(Destination Address):目的地址由6字节组成,其作用是标识数据帧的目的设备,类似于快递包裹的收件人地址。
源地址(Source Address):源地址由6字节组成,其作用是标识数据帧的始发设备,类似于快递包裹的发件人地址。
类型(Type):类型字段由2字节组成。类型字段的作用是为了告知对端设备,这个数据帧在网络层是使用什么协议进行封装的,以便接收方选择同样的协议来对这个数据帧进行解封装。
填充(Pad):以太网标准规定,一个以太网数据帧的最小长度不得小于64字节。标准将数据字段的最小长度定义为46字节,如果数据部分不足46字节,则用填充位来填充这个数据帧,让它的长度可以满足最小长度的要求。
FCS(Frame Check Sequence):FCS译为帧校验序列,这个字段长度为4字节。这个字段会被封装在数据帧的尾部,其目的是供对端设备校验其接收到的数据帧是否与发送方发送时一致。
3.MAC地址
MAC地址的作用是在数据链路层标识一台设备适配器的身份。由于MAC地址往往烧录在适配器的硬件上,而不由设备管理员通过逻辑手段进行修改,因此MAC地址也称为硬件地址。
如00-9A-CD-00-00-0A就是一个典型的MAC地址。
此外,在MAC地址的6字节中,前3个字节是IEEE分配给该MAC地址适配器厂商的代码,这个代码是我们在前文中提到过的组织唯一标识符(Organizationally-Unique Identifier,OUI)。
这是适配器制造商在生产适配器之前,向IEEE注册并申请到的本厂商标识符。
而MAC地址的后3个字节则要由设备制造商给各个适配器分配,同一厂商生产的不同适配器,它们的后3个字节不能相同。
如图所示,在传统的共享型以太网中,集线器只会将数据帧从所有接口不加区分地转发出去,无论终端在发送数据时,以哪台设备的MAC地址作为目的地址来封装数据帧,这个数据帧都会被集线器转发给所有它连接的终端。
所有终端的适配器也都会查看数据的以太网数据帧头部信息,但只有发现该目的MAC地址与自己MAC地址相同的适配器才会进一步解封装数据帧去查看其内部的信息,其余设备在发现数据帧的目的地址并非自己之后,就会丢弃数据帧。
在交换型以太网中,交换机只会将数据帧从其目的地址所在的那个接口发送出去。
交换机之所以有能力实现有针对性地数据帧转发,是因为交换机内部包含了一个叫作CAM(Content Address Memory)表的缓存表。当终端设备第一次向自己直连的交换机发送数据时,交换机不仅会查看数据帧的目的MAC地址,以便将其转发给目的设备,同时也会查看数据帧的源MAC地址,并且将数据帧的源MAC地址与交换机接口之间的映射关系,添加到自己的CAM表中。
这样一来,以后交换机再收到以这个数据帧的源MAC地址作为目的MAC的数据帧时,交换机只要查看自己CAM表中的映射关系,就可以查询到需要将这个数据帧从哪个端口转发出去了。
如图所示,通过IP地址为192.168.0.11的PC1向IP地址为192.168.0.13的PC3发送ping命令时,交换机会向其他端口发送广播arp请求,只有PC3会返回响应说明自己的MAC地址192.168.0.13 (54:89:98:45:7f:e6)。而PC2会丢弃该数据,不返回响应。
当首次返回消息时,交换机的MAC地址缓存表会记录PC1和PC3的MAC地址及对应端口,而没有通信的PC2的MAC地址和端口还没有记录在该表中。
单播MAC地址:绝大多数MAC地址都是单播MAC地址。
广播MAC地址:只有全1的MAC地址为广播MAC地址,即FF-FF-FF-FF-FF-FF。根据广播的定义,所有设备在接收到以广播MAC地址作为目的MAC地址的数据时,都应该对数据进行解封装而不应该丢弃。此外,交换机会将以广播MAC地址为目的MAC地址的数据帧从除了接收到它的那个接口之外的所有接口转发出去。鉴于广播可达的区域称为广播域,因此交换机所连接的设备共同构成了一个广播域。
在使用Windows操作系统的计算机上,管理员在开始->运行中输入cmd命令进入命令提示符,然后在命令提示符中输入命令ipconfig/all即可在Physical address(物理地址)一行看到这台计算机(各个)适配器的MAC地址。
三、网络层
数据链路层如何在一个局域网的范围内实现寻址。然而,当连接异构局域网形成强烈需求时,那些希望通过更高一层协议最终实现异构网络之间建立连接的用户,他们显然不会满足于仅仅在一个局域网范围内进行通信。
那么,既然需要通过更高一层的协议将多个局域网进行互联,这个协议也就必须为不同局域网环境定义统一的寻址标准,这样才能在逻辑上真正实现设备之间跨越局域网的全局信息互通。
为了让使用某协议的设备之间可以实现跨网络的通信,就需要在OSI模型的网络层(或TCP/IP模型的互联网层)给这个协议定义寻址的服务和流程。因此,网络层协议需要定义的内容包括但不限于:
- 参与协议的设备相互间用什么地址对进行跨网络的通信;
- 这些设备如何通过该地址对要发送/接收的数据实现寻址;
- 网络层协议的头部格式如何定义,才能满足寻址等服务的需求;
- 如何向传输层协议隐藏下层复杂的环境和标准。
1.IP协议
IP协议的目的就是在全局范围内实现跨越异构网络的寻址,所有与此宗旨无关的服务都不在定义IP协议的考量范畴之内,这也形成了IP协议的特点。
为了跨越不同类型网络实现全面互联,IP协议需要忽略底层的传输介质,将使用不同介质的局域网络连接起来。跨越使用不同介质的网络(有线网络、无线网络),最终实现通信的。
所谓IP协议可以在任何技术上运行,或者IP协议独立于底层介质,用通俗的方式表达,就是IP公司在收寄包裹时,会利用一切交通方式将包裹送达目的地,无论到达目的地址需要采用哪种交通方式,都可以通过IP公司来完成包裹的投递。
其次,原始TCP协议已经按照服务分为了当今工作在网络层(也即TCP/IP模型中的互联网层)的IP协议,以及当今工作在传输层的TCP协议,同时与传输可靠性有关的服务都交给了工作在传输层的TCP协议来实现。
而IP协议的宗旨就是提供最简单的服务:实现从源到目的的数据转发。因此,IP协议既不会在传输数据之前先与接收方建立连接,也不保证传输的可靠性,它只提供尽力而为的服务。
IP协议定义的数据包封装格式:
版本(Version):由于IP协议不止一个版本,因此根据IP协议的定义,数据包要在头部的一开头即列明这个数据包是使用哪个版本的IP协议进行封装的,不同版本的IP协议所采用的数据包头部封装格式也各不相同。目前网络中使用的IP协议几乎都是IPv4或者IPv6。关于IPv6的数据包封装格式,我们会在系列教材第3册中进行展示和说明。
首部长度(Header Length):如图5-1所示,IPv4的数据包头部中定义了一个可选项字段。由于可选项字段的长度并不固定,因此IPv4的数据包头部长度也是不固定的,这就是为什么IPv4需要在头部定义一个头部长度字段来界定整个数据包中,哪一部分是数据包的头部,以及数据部分从哪里开始。首部长度字段的长度为4字节。
服务类型(Type of Service):服务类型字段的定义和名称都发生过很多次变化,但其宗旨都是界定这个数据包要接受什么等级的服务。目前,这个字段已经改称为区分服务(Differentiated Services)字段,用来说明这个数据需要执行加速传输还是精确传输,以及数据在传输过程中是否经历了拥塞。
数据长度(Length):这个字段负责列明整个数据包的长度,也就是头部长度和数据长度之和。
标识(Identification):当数据包的长度大于链路允许传输的数据长度时,这个数据包就需要进行分片(Fragment),目的设备接收后再通过重组进行还原。标识字段的作用就是在分片前,指明哪些分片此前属于同一个数据包,以备未来重组数据包时之用。
标记(Flag):标记位的作用是标识这个数据包是否允许路由器对其进行分片(标记位的第2位),以及这个分片是不是整个数据包的最后一个分片(标记位的第3位)。具体来说,如果标记位的第2位被设置为1,那么当路由器发现必须对这个数据包进行分片才能将其转发到目的地时,路由器就会丢弃这个数据包,因此标记位的第2位叫作DF位,译为“勿分片(Don’t Fragment)”位;如果标记位的第3位没有被设置为1,则代表这个分片是整个数据包的最后一个分片,整个数据包的分片都已到达,后面不再有任何这个数据包的分片了,因此这一位译为“还有更多分片”(More Fragments)位。标记位一共有3位,至于第1位的用途,IP协议并没有进行定义。
分片偏移(Fragment Offset):分片偏移字段的作用是告诉重组分片的设备,应该按照什么样的顺序重组数据包。即用来标识这个分片在整个数据包中的位置。
生存时间(Time To Live):生存时间字段本来的目的是对数据包在网络中传输的时间进行倒计时,一旦生存时间字段标识的时间耗尽,即使这个数据包还没有传输到目的设备,它也会被网络设备丢弃。设置这个字段的目的显然为了防止数据包在网络中无限地消耗传输资源。然而,由于数据包在网络中传输的时间远比预计得要快很多,因此这个字段目前的用法是对数据包在网络中传输的跳数进行限制。始发数据包每经过一跳路由设备,设备在转发时,就会将其生存时间字段的数值减1,直至该数据包被丢弃。
协议(Protocol):协议字段的作用是标识IP协议上层所使用的协议(如TCP或UDP等),以便让对端设备知道该如何在传输层对数据包进行进一步的解封装。
头部校验和(Checksum):这个字段的作用是供接收方检测数据包的头部在传输过程中是否出现了错误。由于数据包头部在传输中出现错误可能意味着目的地址等重要参数已经与始发时不同,因此这个数据包已经没有继续传输的价值。在大部分情况下,路由器会丢弃头部校验和字段校验失败的数据包。
源IP地址(Source IP Address):源IP地址的作用是标识该数据包源设备的IPv4地址。
目的IP地址(Destination IP Address):目的IP地址的作用是标识该数据包目的设备的IPv4地址。
可选项(Option):IP协议支持设备对数据包封装的头部格式进行扩展,这是IP协议的设计者为后来者按照需求改造协议预留的空间。在设计可选项字段时,人们最初定义了5个可选项,其中包括在数据包的源站点指定数据包的全部或部分传输路径、记录数据包传输过程中经过的路由器等服务。但由于很多路由器并不支持可选项服务,因此可选项字段的使用并不广泛。可选项字段虽然很少使用,但它的存在导致了IPv4数据包头部的长度无法固定,这就是IP协议需要定义一个头部长度字段的原因。这就意味着可选项字段的定义降低了IPv4协议的传输效率,所以这个字段在IPv6协议定义的数据包头部字段中已经取消。
2.路由
无论哪个版本的IP协议都可以为寻址提供逻辑地址。不过,仅仅定义逻辑地址尚不足以将数据从源设备发送给目的设备,要想实现真正的通信还需要通过其他协议来界定联网设备如何使用逻辑地址实现寻址。
使用逻辑地址实现全局寻址的方式涉及一系列的问题,包括:
- 联网设备相互之间如何分享路径信息;
- 这些设备如何根据其他设备分享的路径信息,找出一条从自己通往目的网络的路径;
- 如果去往同一网络拥有多条不同路径,这些设备如何判断它们的优劣等,
充当名词时,路由是路由条目的简称,表示转发设备之间为了跨网络转发数据包而相互传播的路径信息。
充当动词时,路由表示路由器或其他依据逻辑地址转发数据包的设备对数据包所执行的转发操作。
在默认情况下,一台路由器只拥有直连(Directly Connected)网络的路由,所有非直连网络的路由则超出了路由器默认掌握的信息范畴。然而,路由器却常常需要将数据包转发给非直连网络,为此,路由器之间就需要共同遵循某些相互分享路由的标准,以便相互交换彼此掌握的路由信息,这类标准称为路由协议。