一.概述
网络硬件
一般来说,目前使用的传输技术有两种,它们是:广播式链接和点到点链接。
按距离进行分类可以分为:局域网(LAN)、城域网(MAN)和广域网(WAN)。
大致上,无线网络可以分为三大类:系统互连、无线LAN、无线WAN。
网络软件
为了降低网路设计的复杂性,绝大多数网络组织成一堆相互叠加的层,每一层都建立在其下一层的基础之上。协议是指通信双方关于如何进行通信的一种约定。不同层之间有不同的通信协议。
对等体是不同机器上包含的对应层的实体称。这些对等体可能是进程或设备硬件,甚至可能是人。接口存在于每一对相邻层之间。接口定义了下层向上层提供哪些原语操作和服务。计算机网络各层设计需要考虑的问题有:编码机制、错误控制和流控制等。为建立多个连接还需要考虑多路复用和多路解复用。
下层可以向上提供两种不同类型的服务:面向连接的服务或面向无连接的服务。面向连接的服务是基于电话系统模型的,面向无连接的服务是基于邮件系统模型的。
参考模型
OSI参考模型:OSI模型有七层,从下到上依次为:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
TCP/IP参考模型:TCP/IP参考模型有四层,从下到上依次为:物理至主机层,互联网层,传输层,应用层。
物理层:涉及到通信信道上传输的原始数据位。设计时要确保,当一方发送“1”时,另一方接受到的是“1”而不是“0”。这里涉及的问题有:应该用多大的电压表示“1”和“0”;每一位持续多少ns;初始连接如何建立;当双方结束之后如何撤销等。
数据链路层:主要任务是将一个原始的传输设备转变成一条逻辑传输线路,在这条线路上,所有为检测出来的传输错误也会反映到网络层上。数据链路层完成这项任务的做法是:让发送方将发送的数据拆开,分装到数据帧中,然后按顺序传送这些数据帧。如果是可靠服务,则接收方必须确认每一帧都正确接收到了,及给发送方送回一个确认帧。为避免快速发送的发送方数据淹没接收慢的接收方,还需要流调节机制和错误处理机制。
网络层:控制子网的运行过程。一个关键的设计问题是如何将分组从源端发送到目标端。拥塞控制也属于网络层的范畴,还有所提供的服务质量等(如延迟,抖动,传输时间等)。网络层负责解决这些问题,从而允许不同类型的网络可以互连起来。
传输层:基本功能是接受来自上一层的数据,并且在必要时把这些数据分割成小的单元,然后把数据单元传递给网络层,并且确保数据片段都能够正确到达另一端。而且,这些工作都必须高效的完成,并且必须时上面各层不受底层硬件技术变化的影响。
会话层:允许不同机器上的用户之间建立会话。所谓会话,通常指各种服务,包括对话控制、令牌管理及同步功能。
表示层:表示层关心的是所传递的信息的语法和语义。不同的计算机可能使用不同的数据表示法。
应用层:包含了各种各样的协议,这些协议往往直接针对客户的需要。如HTTP(超文本传输协议),它是WWW(万维网)的基础。此外还有一些协议用于文件传输、电子邮件及新闻媒体等。
以上是OSI模型各层的简述,TCP/IP模型也差不多,这里不再赘述。以下是TCP/IP模型中的早期协议和网络。
二.物理层
信号传输的介质可以分为有导向的传输介质和无线传输。前者包括磁介质、双绞线、同轴电缆、光纤灯。后者包括无线电传输、微波传输、光波传输等。
三.数据链路层
数据链路层的功能包括:(1)向网络层提供一个良好的服务接口;(2)处理传输错误;(3)调节数据流,确保慢速的接受方不会被快速的发送方淹没。数据链路层从网络层获取分组,然后将这些分组封装到帧中以便传输。
数据链路层通常会提供以下三种可能的服务:(1)无确认的无连接服务;(2)有确认的无连接服务;(3)有确认的面向连接服务。无确认的无连接服务是指源机器向目标机器发送独立的帧,目标机器不对这些帧进行确认;有确认的无连接服务则需要对所发送的每一帧都需要单独确认;当使用面向连接的服务时,数据传输需要经过建立连接、传输数据和释放连接三个阶段。
数据链路层的协议:PRA协议(支持重传的肯定确认协议);滑动窗口协议。PRA协议加入定时器,当数据丢失导致定时器超时时,数据将会重传。滑动窗口协议采用发送方不用每次接受到前一个已发送的数据的确认帧再发送下一帧,而是一下子连续发送数帧,从而提高宽带利用率。滑动窗口协议又分为回退n帧技术和选择性重传两类。前者接受方的窗口大小为1,每次只能缓存待网络层接下来要接受的一帧,所以当某一个特定序列号错误的帧到达接受方时,接收方将它和后续到达不同序列号的帧丢弃,直到正确的序列号的帧再次到达。这意味着发送方得重传错误帧及其后面的帧。选择性重传由于接收方缓存区大于1所以可以将错误帧后面到达的帧缓存起来,而发送方只需重发错误帧即可。如下图显示了它们的区别:
图3.2 (a)接收方的尺寸为1 (b)接收方的尺寸较大
数据链路层示例
HDLC(高级数据链路控制)协议是面向位的协议,其帧结构如下图3.3所示。其中地址域用来标识一个终端。控制域被用作序列号、确认,以及其他的用途。数据域可以包含任何信息,它可以任意长。校验和域是一个循环循环冗余码。帧的分界线是另一个标志序列(01111110)。
图3.3 面向位的协议的帧格式
PPP(点到点协议)是Internet中的协议,PPP处理错误检测、支持多个协议、允许在连接时刻协商IP地址、允许身份认证,等等还允许其他许多特征。
PPP提供了一下3类功能:(1)一种成帧方法。它可以毫无歧义的分割出一帧的结束和下一帧的开始。并且帧格式支持错误检测。(2)一个链路控制协议,可用于启动线路、测试线路、协商参数,以及当线路不需要时可以温和的关闭线路。该协议称为LCP(链路控制协议)。它支持同步和异步线路,也支持面向字节和面向位的编码方法。(3)一种协商网络层选项的方法,并且协商方法与所使用的网络层协议独立。所选择的方法对于每个网络层都有一个不同的NCP(网络控制协议)。PPP和HDLC的最主要区别是,PPP是面向字符的,而不是面向位的。下图3.4为PPP帧的格式。
图3.4 无序号模式操作下的PPP完整帧格式
所有的PPP帧都以一个标准的HDLC标志字节(01111110)作为开始。接下来是地址域,设置为11111111表示所有的站都可以接受该帧。控制域默认为00000011,表示没有采用序列号和确认来实现可靠传输。协议域的任务是指明有效载荷域中是哪一种分组。已定义的代码协议有:LCP\NCP\IP\IPX等。有效载荷域是变长的,最多可以达到某一个商定的最大值。接下来为校验和域,可以是2或4字节。
总而言之,PPP是一种多协议成帧机制,它适用于在调制解调器、HDLC位序列线路、SONET和其他的物理层上使用。它支持错误检测、选项协商、头部压缩,以及使用HDLC类型帧格式的可靠传输。
四.介质访问控制子层
网络可以分为两大类:使用点到点连接的网络和使用广播信道的网络。广播信道也称为多路访问信道或者随机访问信道。为解决当多方要竞争使用信道的时候,如何确定谁可以使用信道。用于在多路访问信道上确定下一个使用者的协议属于数据链路层的一个子层,称为MAC(介质访问控制)子层。信道的分配一般可以分为静态和动态两种方案。静态的啊方案思想为当N个用户竞争一个信道时,把信道分成N等分,每个用户拥有一个自己的信道。这种方法的缺点是会浪费带宽,而且当发送方的数量很多且经常不断的变化时这种方法会出现问题。动态方案可以正好解决这些问题,其思想为只为某时需要带宽的用户分配合理的带宽。
多路访问协议有很多,代表性的有:ALOHA、载波多路访问(CSMA)协议(如CSMA/CD)、无冲突的协议(如位图协议)、有限竞争协议(如自适应树搜索协议)、波分多路访问协议(WDMA)、无线LAN协议(如MACAW)等。
以太网
以太网是一种LAN,IEEE已经标准化了许多局域网和城域网,这些标准都在IEEE 802 的名字下面,最重要的有802.3(以太网)和802.11(无线LAN),此外还有前途未卜的802.15(蓝牙)和802.16(无线MAN)。为了实现”让接收方在没有任何外部时钟参考的情况下,可以毫无歧义的确定每一位的起始、结束或者中间位置“的功能,可以使用曼彻斯特编码和差分曼彻斯特编码。
早期的DIX帧结构如下图4.1(a)所示。每一帧都从8个字节的前导域开始。接下来是目标地址和源地址,标准中允许使用2或6字节的地址。目标地址最高位如果是0,则表示普通地址;如果是1则表示组地址。向一组站发送数据称为多播。由全部为’1‘位构成的地址被保留用于广播。一个多播帧被发送给以太网上选出来的一组站,而广播帧则被发送给以太网上的所有站。源地址即本主机的mac地址,它是独一无二的。接下来的类型域告诉接收方应该如何处理这一帧。如应该把此帧交给哪一个进程。数据域最多可以达到1500字节。此外,为了更加容易的区分有效帧和垃圾数据,以太网要求有效帧必须至少64字节长,从目标地址算起到最后的校验和。如果一帧的数据域部分少于64字节的话,则使用填充域来填充该帧使其满足最小的长度。以太帧的最后一个域是校验和。
图4.1 (a)DIX以太网 (b)IEEE 802.3
当IEEE标准化以太网时,对DIX帧格式做了两个改动。第一个改动是将前导域降低到7个字节,并且将空出来的一个字节用作帧起始分界符。第二改动是将类型域编程了长度域。
IEEE 802.2(LLC即逻辑链路控制):它通过提供一种统一的格式,以及向网络层提供一个接口,从而隐藏各种802网络之间的差异。LLC构成了数据链路层的上半层,MAC是它的下半层。
LLC提供三种服务选择:不可靠的数据服务、有确认的数据服务,以及面向连接的可靠服务。LLC头包含三个域:一个目标访问点、一个源访问点,以及一个控制域。两个访问点指明了该帧从哪个进程来,以及要递交给哪个进程,相当于取代了DIX的type域。控制域包含了序列号和确认号。
无线LAN(802.11)
无线LAN可以有两种配置方案:有一个基站或者没有基站。下图4.2为802.11协议栈部分视图。标准规定物理层上允许五种传输技术,分别为红外线、FHSS(跳频扩频)、DSSS(直接序列扩频)、OFDM(正交频多路复用)和HR-DSSS(高速率的直接序列扩频)。无线LAN要解决的问题要比有线LAN要多,MAC子层协议有CSMA/CA(带冲突检测的CAMS)协议等。
图4.2 802.11协议栈的部分视图
802.11标准定义三种不同类型的帧用于通信:数据帧、控制帧和管理帧。每一种帧都有一个头,该头部包含了各种用于MAC子层的域。数据帧的格式如下图4.3所示。首先是帧控制域,其有11个子域。数据帧第二个域为持续时间域,它提供这样的信息:该帧和它的确认帧将会占用信道多长时间。接着的四个地址域分别为源地址和目标地址、源和目标基站地址。序列号域(Seq)使分片可以被编号。数据域包含了净荷,其长度可以达到2312字节。最后为校验和域。
图4.3 802.11数据帧
下图为每一层之间的连接设备和不同层上数据的封装格式。
五.网络层
网络层关注的是如何从将分组从源端沿着网络路径送达目标端。沿路可能要经过许多跳路由器。网络层需要提供的服务:存储-转发分组交换、向传输层提供服务。根据所提供的服务类型不同,有两种不同的组织。如果提供的是无连接的服务,则所有的分组都被独立的传送到子网中,并且独立于路由,不需要提前建立任何辅助设施。该分组通常称为数据报。如果使用面向连接的服务,则在发送分组之前必须首先建立一条从源路由器到目标路由器之间的路径。这个连接称为VC(虚电路)。下图5.1为数据报在子网内的路由。图5.2为虚电路子网路由过程。
图5.1 数据报子网路由过程
图5.2 虚电路子网内路由过程
下图列出了虚电路子网和数据包子网的比较。
图5.3 数据报和虚电路子网比较
由于在大多数子网中,分组需要经过多跳才能到达目的地。在此过程需要用到路由算法和拥塞控制算法。路由算法是网络层软件的一部分,它负责确定一个进来的分组应该被传送到哪一条输出线路上。路由算法一般可以分为静态的和动态的。静态路由常见有最短路径路由和扩散法等。动态路由算法例如距离矢量路由。
当一个子网或者子网的一部分中出现太多分组的时候,网路性能开始下降,这种情况称为拥塞。拥塞控制算法可分为开环方案和闭环方案。开环方案的手段有:确定何时接受新的流量、确定何时丢弃分组及丢弃哪些分组,以及在网络的不同点上执行调度决策。所有这些手段的共同之处是,它们在做出决策的时候不考虑网络的当前状态。相反,闭环方案则建立在反馈环路的概念基础之上,它有三部分:(1)监视系统,监视到何时何地发生了拥塞。(2)将该信息传递到能够采取行动的地方。(3)调整系统的运行,以改正问题。
很多系统的设计思想是从一开始就将发生拥塞的可能性降低到最小。下图为各种可能会影响到拥塞的数据链路层、网络层和传输层策略。
IP协议
IP协议是Inernet的网络层协议。每个IP数据包包含一个头部和一个正文部分。头部有一个20字节的定长部分和一个可选的变长部分。下图5.5为IP数据报的头部格式。版本域记录数据报属于哪一个版本的协议,如IPv4或IPv6。IHL域指明头部有多长,其最小值为5表明没有可选项,最大值为60表明可选项做多为40字节。服务类型域用来区分不同的服务种类,可靠性和速度的各种组合都是可能的。总长度域包含了改数据报中所有内容,即头和数据。最大长度为65535字节。标识域的用途是让目标主机确定一个新到达的分段属于哪一个数据报。接下来是一个未使用的域,然后是两个1位域。DF代表”不分段“,表示让路由器部分个数据报。MF代表”更多的分段“。分段偏移域指明了该分段在当前数据包中的什么位置。该域有13为,说明每个数据报最多有8192个分段。TTL是一个用于限制分组生存期的计数器。头怒校验和域只校验头部。源地址和目标地址域表示网络号和主机号。
图5.5 IPv4(Internet协议)头部
一些常见的选项域如下图:
图5.6 一些IP选项
IP地址
Internet上的每台主机和路由器都有一个IP地址,IP地址包含网络号和主机号。并且这种组合是唯一的,每个IP地址长32位。IP地址分为5大类:A\B\C\D\E。其中A、B、C类为私有地址,专门为组织机构内部使用。D类用作多播地址,E类保留将来使用。如下图5.7为IP地址格式。A类有128个网络,每个网络有1600万台主机。B类有16384个网络,每个网络有6万4千台主机。C类有2百万个网络,每个网络有256台主机。
图5.7 IP地址格式
子网的出现是为了解决网络号不够用的情况。其基本思想为一个B类地址不再是14位网络号和16位主机号,而是从主机中拿出一些位构成一个子网号。为了实现对子网的支持,主路由器需要一个子网掩码,它代表了”网络+子网号“与主机之间的分割方案。也可以用十进制标记法来表示,外加一个’/‘,并跟上”网络+子网部分的位数“。例如下图5.8,子网掩码可以写成255.255.252.0或”IP地址/22“来表示掩码有22位长。
图5.8 一个B类网络被分成64个子网
六.传输层
传输层的任务是在元机器和目标机器之间提供可靠的、性价比合理的数据传输功能,并且与当前所使用的物理网络完全独立。传输层的最终目标是想它的用户(通常是应用进程)提供高效的、可靠的和性价比合理的服务。下图6.1为网络层、传输层和应用层建的关系。
传输服务的原语为进行传输服务是使用的机器能了解的语言。下图6.2为TCP的套接字原语。
图6.2 TCP套接字原语
TPDU(传输协议数据单元)代表一个传输实体发送至另一个传输实体的消息。它被包含在分组的内部。分组被包含在帧的内部。这种嵌套关系如图6.3所示。
传输协议的设计要素有编址、建立连接、释放连接、流控制和缓冲、多路复用和崩溃恢复等。
Internet传输协议——UDP
UDP是一个无连接的传输协议。T它不必建立连接就可以向一个程序发送一个封装的IP数据报。UDP传输的数据段是由8字节的头和净荷域组成的。如图6.4.两个端口分别被用来标识出源机器和目标机器内部的端点。当一个UDP分组到来的时候,它的净荷部分被递交给目标端口相关联的那个进程。UDP长度域包含了8字节的头部和数据部分。UDP校验和是可选的。
图6.4 UDP头
Internet传输协议——TCP
TCP是可靠的面向连接的传输协议。如果要进行TCP服务,则发送方和接收方必须创建一种被称为套接字的端点。每个套接字有一个套接字号(地址),它是由主机的IP地址和本地主机局部的一个16位数值组成的端口组成的。有关的套接字调用如上图6.2.1024以下的端口被称为知名端口。每个连接可用两端的套接字标识符来标识,即(socket1,socket2)。
TCP数据段的起始部分为固定的20字节,如下图6.5所示。固定的头部之后可能跟着头选项。在选项之后的数据部分最多可达65495数据字节。无任何数据的TCP段也是合法的,通常被用来进行确认和控制消息。序列号和确认号域完成它们的常规功能。TCP头长度域指明了在TCP头部包含多少个32位的字节。接下来是未使用的6位域。接下来是6个1位的标志位。CWR被用来控制信号的拥塞。ACK位被设置为1表示Acknowledgement number是有效的。如果为0则该数据段不包含确认信息。PSH位表示这是带有PUSH标志的数据。RST位被用来重置一个已经混乱的连接。SYN位被用于建立连接的过程。FIN被用来释放一个连接。
图6.5 TCP头
TCP的连接建立需要三次握手,如图6.6.假设客户机发起主动连接,服务器被动打开。TCP的三次握手步骤如下:
(1)服务器必须准备好接受外来的连接。这通常通过调用socket、bind和listen这三个函数来完成。
(2)客户机通过调用connet发起主动连接。这导致客户机TCP发送一个SYN分节,它告诉服务器客户将在连接中发送的数据的初始序列号。通常SYN分节不携带数据,其所在IP数据报只含一个IP首部、一个TCP首部及可能有的TCP选项。
(3)服务器必须确认(ACK)客户机的SYN。同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送的数据的初始序列号。服务器在单个分节中发送SYN和ACK。
(4)客户机必须确认服务器的SYN。
图6.6 TCP三次握手
TCP的连接终止需要四次挥手,如图6.7。其步骤如下:
(1)某个应用程序首先调用close,称为主动关闭。该端的TCP于是主动发送一个FIN分节,表示数据发送完毕。
(2)接收到这个PIN的对端执行被动关闭。这个FIN由TCP确认。它的接收也作为一个文件结束符传递给接收端应用进程,因为FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3)一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致TCP也发送一个FIN。
(4)接收这个最终FIN的原发送端TCP确认这个FIN。
图6.7 TCP的四次挥手
七.应用层
DNS域名系统是一种层次的、基于域的命名方案。Internet被分为200多个顶级域,每个域包含许多主机。顶级域分为两种:通用域和国家域。每个域又被分为若干个子域。如下图7.1。
无论是单主机域还是顶级域,每个域都可以有一组与它相关联的资源记录。对于一台主机而言,最常见的资源记录为它的IP地址。当解析器把一个域名传递给DNS时,DNS返回的是与该域名相关联的资源记录。因此DNS的基本功能是将域名映射到资源记录上。
参考文献
《计算机网络(第4版)》Andrew S.Tanenbaum著 清华大学出版社
《UNIX网络编程 卷1:套接字联网API (第3版)》W.Richard Stevens 等著 人民邮电出版社