TCP/IP第二层--数据链路层

数据链路层的知识点:

  1、数据链路层为网络层提供可靠的数据传输;

  2、基本数据单位为帧;

  3、主要的协议:以太网协议;

  4、两个重要设备名称:网桥和交换机。


       不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。

       如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示:

       图 36.4. 跨路由器通讯过程



     其实在链路层之下还有物理层,指的是电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)是工作在物理层的网络设备,用于双绞线的连接和信号中继(将已衰减的信号再次放大使之传得更远)。

      链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装之后再转发。


      目的主机收到数据包后,如何经过各层协议栈最后到达应用程序呢?整个过程如下图所示。

图 36.5. Multiplexing过程



      以太网驱动程序首先根据以太网首部中的“上层协议”字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP还是RARP协议的数据报,然后交给相应的协议处理。假如是IP数据报,IP协议再根据IP首部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。假如是TCP段或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的“端口号”字段确定应该将应用层数据交给哪个用户进程。IP地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识不同进程的地址,IP地址和端口号合起来标识网络中唯一的进程。

       注意,虽然IP、ARP和RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。虽然ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。本文对RARP、ICMP、IGMP协议不做进一步介绍,有兴趣的读者可以看参考资料。


1.基本功能

设计数据链路层的原因
1、在原始的物理线路上传输数据信号是有差错的。
2、设计数据链路层的主要目的就是在原始的、有差错的物理传输线路的基础上,采取 差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,向网络层提供高质量的服务。
3、从网络参考模型的角度看,物理层之上的各层都有改善数据传输质量的责任,数据链路层是最重要的一层。
数据链路层的最基本的 功能是向该层 用户提供 透明的和可靠的 数据传送基本服务。 透明性是指该层上传输的 数据的内容、格式及编码没有限制,也没有必要解释 信息结构的意义;可靠的传输使 用户免去对丢失 信息、干扰信息及顺序不正确等的担心。在 物理层中这些 情况都可能发生,在 数据链路层中必须用 纠错码来检错与纠错。 数据链路层是对 物理层传输原始 比特流的 功能的加强,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对 网络层表现为一无差错的 线路。如果您想用尽量少的词来记住 数据链路层,那就是:“ 介质访问控制”。

    在TCP/IP协议族中,数据链路层主要有三个目的:
          1)为IP模块发送和接收数据
          2)为ARP模块发送ARP请求和接收ARP应答
          3)为RARP模块发送RARP请求和接收RARP应答
    
    TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网,令牌环网,FDDI(光纤分布式数据接口)及RS-232串行线路等。
     
     数据链路层的协议数据单元——帧:将IP层(网络层)的数据报添加首部和尾部封装成帧。
     数据链路层协议有许多种,都会解决三个基本问题,封装成帧,透明传输,差错检测

帧同步:从接收到的比特流中准确区分帧的边界

为了使传输中发生差错后只将有错的有限数据进行重发,数据链路层将 比特流组合成以帧为单位传送。每个帧除了要传送的数据外,还包括校验码,以使接收方能发现传输中的差错。帧的组织结构必须设计成使接收方能够 明确地从物理层收到的比特流中对其进行识别,也即能从比特流中区分出帧的起始与终止,这就是帧同步要解决的问题。由于网络传输中很难保证计时的正确和一致,所以不可采用依靠时间间隔关系来确定一帧的起始与终止的方法。
(1)字节计数法:这是一种以一个特殊字符表示一帧的起始并以一个专门字段来标明帧内字节数的帧同步方法。接收方可以通过对该特殊字符的识别从比特流中区分出帧的起始并从专门字段中获知该帧中随后跟随的数据字节数,从而可确定出帧的终止位置。面向字节计数的同步规程的典型代表是DEC公司的数字数据通信报文协议DDCMP(Digital Data Communications Message Protocol)。DDCMP采用的帧格式如图3-1。

控制字符SOH标志数据帧的起始。实际传输中,SOH前还要以两个或更多个同步字符来确定一帧的起始,有时也允许本帧的头紧接着上帧的尾,此时两帧间就不必再加同步字符。 count字段共有14位,用以指示帧中数据段中数据的字节数,14位二进制数的最大值为2-1=16383,所以数据最大长度为8×16383=131064。DDCMP协议就是靠这个字节计数来确定帧的终止位置的。DDCMP帧格式中的ACK、SEG、ADDR及FLAG中的第2位,CRC1、CRC2分别对标题部分和数据部分进行双重校验,强调标题部分单独校验的原因是,一旦标题部分中的CONUT字段出错,即失却了帧边界划分的依据,将造成灾难性的后果。由于采用字符计数方法来确定帧的终止边界不会引起数据及其它信息的混淆,因而不必采用任何措施便可实现数据的透明性(即任何数据均可不受限制地传输)。
(2)使用字符填充的首尾定界符法:该法用一些特定的字符来定界一帧的起始与终止,为了不使数据信息位中出现的与特定字符相同的字符被误判为帧的首尾定界符,可以在这种数据字符前填充一个转义控制字符(DLE)以示区别,从而达到数据的透明性。但这种方法使用起来比较麻烦,而且所用的特定字符过份依赖于所采用的字符编码集,兼容性比较差。

     (3)使用比特填充的首尾标志法: 该法以一组特定的比特 模式 (如01111110)来标志一帧的起始与终止。本章稍后要详细介绍的 HDLC 规程即采用该法。为了不使 信息 位中出现的与特定 比特 模式相似的比特串被误判为帧的首尾标志,可以采用比特填充的方法。比如,采用特定模式01111110,则对 信息 位中的任何连续出现的五个“1”,发送方自动在其后插入一个“0”,而接收则做该过程的逆 操作 ,即每接收到连续五个“1”,则自动删去其后所跟的“0”,以此恢复 原始 信息,实现 数据传输 的透明性。 比特 填充很容易由 硬件 来实现,性能优于 字符 填充方法。
(4)违法编码法:该法在物理层采用特定的比特编码方法时采用。例如,一种被称作曼彻斯特编码的方法,是将数据比特“1”编码成“高-低”电平对,而将数据比特“0”编码成“低-高”电平对。而“高-高”电平对和“低-低”电平对在数据比特中是违法的。可以借用这些违法编码序列来定界帧的起始与终止。局域网IEEE 802标准中就采用了这种方法。违法编码法不需要任何填充技术,便能实现数据的透明性,但它只适用于采用冗余编码的特殊编码环境。由于字节计数法中COUNT字段的脆弱性以及字符填充法实现上的复杂性和不兼容性,较普遍使用的帧同步法是比特填充和违法编码法。

差错控制:差错检查和差错纠正

一个实用的通信系统必须具备发现(即检测)这种差错的能力,并采取某种措施纠正之,使差错被控制在所能允许的尽可能小的范围内,这就是差错控制过程,也是数据链路层的主要功能之一。对差错编码(如奇偶校验码,检查和或CRC)的检查,可以判定一帧在传输过程中是否发生了错误。一旦发现错误,一般可以采用反馈重发的方法来纠正。这就要求接收方收完一帧后,向发送方反馈一个接收是否正确的信息,使发送方所在此作出是不需要重新发送的决定,也即发送方仅当收到接收方已正确接收的反馈信号后才能认为该帧已经正确发送完毕,否则需要重新发送直至正确为止。物理信道的突发噪声可能完全“淹没”一帧,即使得整个数据帧或反馈信息帧丢失,这将导致发送方永远收不到接收方发来的反馈信息,从而使传输过程停滞.为了避免出现这种情况,通常引入计时器(Timer)来限定接收方发回反馈信息的时间间隔,当发送方发送一帧的同时也启动计时器,若在限定时间间隔内未能收到接收方的反馈信息,即计时器超时(Timeout),则可认为传的帧已出错或丢失,继而要重新发送。由于同一帧数据可能被重复发送多次,就可能引起接收方多次收到同一帧并将其递交给网络层的危险。为了防止发生这种危险,可以采用对发送的帧编号的方法,即赋予每帧一个序号,从而使接收方能从该序号来区分是新发送来的帧还是已经接收但又重新发送来的帧,以此来确定要不要将接收到的帧递交给网络层。数据链路层通过使用计数器和序号来保证每帧最终都被正确地递交给目标网络层一次。

流量控制:收发双方速度保持协调

流量控制并不是数据链路层所特有的功能,许多高层协议中也提供流时控功能,只不过流量控制的对象不同而已。比如,对于数据链路层来说,控制的是相邻两节点之间数据链路上的流量,而对于运输层来说,控制的则是从源到最终目的之间端的流量。由于收发双方各自使用的设备工作速率和缓冲存储的空间的差异,可能出现发送方发送能力大于接收方接收能力的现象,如若此时不对发送方的发送速率(也即链路上的信息流量)作适当的限制,前面来不及接收的帧将被后面不断发送来的帧“淹没”,从而造成帧的丢失而出错。由此可见,流量控制实际上是对发送方数据流量的控制,使其发送率不致超过接收方所能承受的能力。这个过程需要通过某种反馈机制使发送方知道接收方是否能跟上发送方,也即需要有一些规则使得发送方知道在什么情况下可以接着发送下一帧,而在什么情况下必须暂停发送,以等待收到某种反馈信息后继续发送。

链路管理:数据链路的建立,维持,释放

链路管理功能主要用于面向连接的服务。当链路两端的节点要进行通信前,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接,在传输过程中则要能维持该连接。如果出现差错,需要重新初始化,重新自动建立连接。传输完毕后则要释放连接。数据连路层连接的建立维持和释放就称作链路管理。在多个站点共享同一物理信道的情况下(例如在LAN中)如何在要求通信的站点间分配和管理信道也属于数据链路层管理的范畴。

2.主要协议

数据链路层的主要协议有:
(1)点对点ppp协议(Point-to-Point Protocol),是从SLIP的替代品。他们都提供了一种低速接入的解决方案。
(2)以太网(Ethernet);
(3)高级数据链路协议(High-Level Data Link Protocol);
(4) 帧中继(Frame Relay);
(5) 异步传输模式(Asynchronous Transfer Mode);

以太网协议并不是第二层的唯一协议,但却是最常用的。就好比英语不是大家说的唯一语言,但却是最常用的。


3.常用的数据链路层

  1. TCP/IP支持多种不同的数据链路层协议,这取决于网络使用的硬件,如以太网、令牌环、FDDI等局域网,串行线路、X.25、帧中继FR、ATM等广域网。
  2. 早期,由于各网络公司的竞争,局域网没有形成统一标准,为了将各种局域网融合,将链路层拆分成两层,逻辑链路层(LLC)和媒体接入控制(MAC)(802.3封装:SAP),
  3. 90年代,以太网取得垄断地位,以太网成为局域网代名词。数据链路层仅需要MAC层,采用以太网帧格式(Ethernet V2封装:ARPA)。

4.以太网和IEEE802的封装

    以太网Ethernet: 1980年,数字设备公司(DEC)、Intel公司、施乐(Xerox)公司推出了DIX V1.0标准。1982年又推出了DIX V2.0标准,也就是现在通常所说的Ethernet II, 它采用了CSMA/CD(Carrier Sense, Multiple Access with Collision Detection)含冲突检测的载波侦听多路接入。

   802.3:1985年,IEEE推出了"802.3 含冲突检测的载波侦听多路访问(CSMA/CD)访问方式和物理层规范",即802.3CSMA/CD标准


   如图所示,显示了两种不同形式的封装格式。最常使用的封装格式是RFC894定义的格式。两种帧格式均采用48bit(6 byte)的目的地址和源地址。

       

    以太网的帧格式才有6字节的目的地址和源头地址。帧长度字段是指它后续数据的字节长度,但不包括CRC校验码。这个长度是提供给上层协议的数据负载,也就是上层协议封装的数据最长度不要超过以太网帧的数据长度。最小数据帧尾46,最大数据帧长为1500.
      

    这两个标准稍有不同,TCP/IP协议对这种情况的处理方式如下:

  • 以太网的IP数据报封装在RFC894中定义,而IEEE802网络的IP数据报封装在RFC1042中定义。
  • 一台主机一定要能发送和接收RFC894定义的数据报。
  • 一台主机可以接收RFC894和RFC1042的封装格式的混合数据报。
  • 一台主机也许能够发送RFC1042数据报。。如果主机能同时发送两种类型的分组数 据,那么发送的分组必须是可以设置的,而且默认条件下必须是RFC 894分组。

       可见,RFC1042在TCP/IP里面处于一个配角的地位。

        以太网协议实现RFC894规定的功能,能发送接收采用RFC894封装格式的帧,同时也能够兼容与RFC894混合的RFC1042(IEEE802)封装格式的帧。

      数据链路层的协议还是很多的,有我们最常用的以太网(就是平时我们用的网卡)协议,也有不太常见的令牌环,还有FDDI,当然,还有国内现在相当普及的PPP协议(就是adsl宽带),以及一个loopback协议。




      联系linux里面的ifconfig -a命令,这个命令通常会得到如下的结果

em1       Link encap:Ethernet  HWaddr 34:17:EB:BB:ED:93  
          inet addr:192.168.1.48  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::3617:ebff:febb:ed93/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:847304 errors:0 dropped:0 overruns:0 frame:0
          TX packets:540883 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:277120836 (264.2 MiB)  TX bytes:195312995 (186.2 MiB)
          Interrupt:20 Memory:f7c00000-f7c20000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:3620024 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3620024 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1035581503 (987.6 MiB)  TX bytes:1035581503 (987.6 MiB)

       其中,em1就是以太网接口,而lo则是loopback接口。这也说明这个主机在网络链路层上至少支持loopback协议和以太网协议。

      注意有的网卡标识是eth0等

       em=embedded device,表示系统识别出这块网卡是集成在主板上的;而eth是传统的以太网卡设备的命名机制。

        环回接口(loopback)。平时我们用127.0.0.1来尝试自己的机器服务器好使不好使。走的就是这个loopback接口。对于环回接口,有如下三点值得注意:

  • 传给环回地址(一般是127.0.0.1)的任何数据均作为I P输入。
  • 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是 因为广播传送和多播传送的定义包含主机本身。
  • 任何传给该主机IP地址的数据均送到环回接口。

5.MTU最大传输单元

    最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。

      
    如果在IP层要传输一个数据报比链路层的MTU还大,那么IP层就会对这个数据报进行分片( fragmentation)。一个数据报会被分为若干片,每个分片的大小都小于或者等于链路层的MTU值。当同一网络上的主机互相进行通信时,该网络的MTU对通信双方非常重要。但当主机间要通过很多网络才能通信时,对通信双方最重要的是通信 路径中最小的MTU,因为在通信路径上不同网络的链路层MTU不同。通信路径中最小的MTU被称为路径MTU。
     网络中一些常见链路层协议MTU的缺省数值如下:
  • FDDI协议:4352字节
  • 以太网(Ethernet)协议:1500字节
  • PPPoE(ADSL)协议:1492字节
  • X.25协议(Dial Up/Modem):576字节
  • Point-to-Point:4470字节
      以太网和802.3对数据帧的长度有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称作MTU,最大传输单元,不同类型的网络大多都有一个上限,这个值是根据硬件来确定的。

     我们上面使用ifconfig就可以看到MTU.

     也可以用netstat来打印出MTU的结果,比如键入netstat -in 

Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
em1        1500   0   911211      0      0      0   582494      0      0      0 BMRU
lo        16436   0  3745238      0      0      0  3745238      0      0      0 LRU

      就可以观察到em1的MTU是1500。而lo(环回接口)的MTU则是16436。

      


6.二层设备-交换机/网桥

交换机:

     二层交换机工作于OSI模型的第2层(数据链路层),故而称为二层交换机。二层交换技术是发展比较成熟,二层交换机数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。

     二层交换机一般只认帧中的源和目的MAC地址进行数据传输。根据MAC地址寻址,通过站表选择路由,站表的建立和维护由交换机自动进行。而路由器属于OSI第三层即网络层设备,它根据IP地址进行寻址,通过路由表路由协议产生。

工作过程

(1) 当 交换机从某个端口收到一个 数据包,它先读取包头中的源MAC地址,这样它就知道源MAC地址的机器是连在哪个端口上的;
(2) 再去读取包头中的目的 MAC地址,并在地址表中查找相应的端口;
(3) 如表中有与这目的MAC地址对应的端口,把数据包直接复制到这端口上;
(4) 如表中找不到相应的端口则把数据包广播到所有端口上,当目的机器对源机器回应时,交换机又可以学习一目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。
不断的循环这个过程,对于全网的MAC地址信息都可以学习到,二层 交换机就是这样建立和维护它自己的地址表。


   二层交换机最大的好处是快速:由于交换机只须识别帧中MAC地址,直接根据MAC地址产生选择转发端口算法简单,便于ASIC实现,因此转发速度极高。

  但交换机的工作机制也带来一些问题: 
     1.回路:根据交换机地址学习和站表建立算法,交换机之间不允许存在回路。一旦存在回路,必须启动生成树算法,阻塞掉产生回路的端口。而路由器的路由协议没有这个问题,路由器之间可以有多条通路来平衡负载,提高可靠性。 

     2.负载集中:交换机之间只能有一条通路,使得信息集中在一条通信链路上,不能进行动态分配,以平衡负载。而路由器的路由协议算法可以避免这一点,OSPF路由协议算法不但能产生多条路由,而且能为不同的网络应用选择各自不同的最佳路由。 
 

    3.广播控制:交换机只能缩小冲突域,而不能缩小广播域。整个交换式网络就是一个大的广播域,广播报文散到整个交换式网络。而路由器可以隔离广播域,广播报文不能通过路由器继续进行广播。 

    4.子网划分:交换机只能识别MAC地址。MAC地址是物理地址,而且采用平坦的地址结构,因此不能根据MAC地址来划分子网。而路由器识别IP地址,IP地址由网络管理员分配,是逻辑地址且IP地址具有层次结构,被划分成网络号和主机号,可以非常方便地用于划分子网,路由器的主要功能就是用于连接不同的网络。 

    5.保密问题:虽说交换机也可以根据帧的源MAC地址、目的MAC地址和其他帧中内容对帧实施过滤,但路由器根据报文的源IP地址、目的IP地址、TCP端口地址等内容对报文实施过滤,更加直观方便。

 
    6.介质相关:交换机作为桥接设备也能完成不同链路层和物理层之间的转换,但这种转换过程比较复杂,不适合ASIC实现,势必降低交换机的转发速度。因此目前交换机主要完成相同或相似物理介质和链路协议的网络互连,而不会用来在物理介质和链路层协议相差甚元的网络之间进行互连。而路由器则不同,它主要用于不同网络之间互连,因此能连接不同物理介质、链路层协议和网络层协议的网络。路由器在功能上虽然占据了优势,但价格昂贵,报文转发速度低。近几年,交换机为提高性能做了许多改进,其中最突出的改进是虚拟网络和三层交换。 

网桥(Bridge):

       是一个局域网与另一个局域网之间建立连接的桥梁。属于数据链路层的一种设备。网桥的作用是扩展网络和通信手段,在各种传输介质中转发数据信号,扩展网络的距离,同时又有选择地将现有地址的信号从一个传输介质发送到另一个传输介质,并能有效地限制两个介质系统中无关紧要的通信。
      网桥可分为本地网桥和远程网桥。本地网桥是指在传输介质允许长度范围内互联网络的网桥;远程网桥是指连接的距离超过网络的常规范围时使用的远程桥,通过远程桥互联的局域网将成为城域网或广域网。如果使用远程网桥,则远程桥必须成对出现。

你可能感兴趣的:(TCP/IP第二层--数据链路层)