• TCP/IP协议之链路层


    1.1引言

    在TCP/IP协议族中,链路层主要有三个目的:

    • 为IP模块发送和接收IP数据报;
    • 为ARP模块发送ARP请求和接收ARP应答;
    • 为RARP发送RARP请求和接收RARP应答。
      TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网、令牌环网、FDDI(光纤分布式数据接口)及RS-232串行线路等。

    1.2 以太网和IEEE 802封装

    以太网:以太网这个术语一般是指数字设备公司( Digital Equipment Corp.)、英特尔公司(IntelCorp.)和Xerox公司在1982年联合公布的一个标准。它是当今TCP/IP采用的主要的局域网技术。它采用一种称作CSMA/CD的媒体接入方法,其意思是带冲突检测的载波侦听多路接入(Carrier Sense, Multiple Access with Collision Detection)。它的速率为10 Mb/s,地址为48 bit。
    802封装:IEEE(电子电气工程师协会),802委员会公布了一个稍有不同的标准集,其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络。这三者的共同特性由802.2标准来定义,那就是802网络共有的逻辑链路控制(LLC)。
    主机需求RFC要求每台Internet主机都与一个10 Mb/s的以太网电缆相连接:

    • 必须能发送和接收采用RFC 894(以太网)封装格式的分组;
    • 应该能接收与RFC 894混合的RFC 1042(IEEE 802)封装格式的分组;
    • 也许能够发送采用RFC 1042格式封装的分组。如果主机能同时发送两种类型的分组数据,那么发送的分组必须是可以设置的,而且默认条件下必须是 RFC 894分组。
      最常使用的封装格式是RFC 894定义的格式。下图显示了两种不同的封装格式。图中每个方框下面的数字是它们的字节长度。

      两种帧格式都采用48 bit(6字节)的目的地址和源地址。接下来的2个字节在两种帧格式中互不相同。在802标准定义的帧格式中,长度字段是指它后续数据的字节长度,但不包括CRC检验码。以太网的类型字段定义了后续数据的类型。在802标准定义的帧格式中,类型字段则由后续的子网接入协议(Sub-network Access Protocol,SNAP )的首部给出。幸运的是,802定义的有效长度值与以太网的有效类型值无一相同,这样,就可以对两种帧格式进行区分。
      在以太网帧格式中,类型字段之后就是数据;而在802帧格式中,跟随在后面的是3字节的802.2 LLC和5字节的802.2 SNAP。目的服务访问点( Destination Service Access Point,DSAP)和源服务访问点(Source Service Access Point, SSAP)的值都设为0xaa。Ctrl字段的值设为3。随后的3个字节org code都置为0。再接下来的2个字节类型字段和以太网帧格式一样。
      CRC字段用于帧内后续字节差错的循环冗余码检验(检验和)。
      802.3标准定义的帧和以太网的帧都有最小长度要求。 802.3规定数据部分必须至少为38字节,而对于以太网,则要求最少要有46字节。为了保证这一点,必须在不足的空间插入填充(pad)字节。

    1.3 尾部封装

    尾部封装:另一种用于以太网的封装格式,这是一个早期BSD系统在DEC VAX机上运行时的试验格式,它通过调整IP数据报中字段的次序来提高性能。
    不知道为什么尾部封装遭到反对。在网上也没有找到答案。

    1.4 SLIP:串行线路IP

    SLIP:SLIP的全称是Serial Line IP。它是一种在串行线路上对IP数据报进行封装的简单形式,
    SLIP的帧格式:

    • IP数据报以一个称作 END(0xc0)的特殊字符结束。同时,为了防止数据报到来之前的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个END字符(如果有线路噪声,那么END字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
    • 如果IP报文中某个字符为 END,那么就要连续传输两个字节0xdb和0xdc来取代它。0xdb这个特殊字符被称作SLIP的ESC字符,但是它的值与ASCII码的ESC字符(0x1b)不同。
    • 如果IP报文中某个字符为SLIP的ESC字符,那么就要连续传输两个字节 0xdb和0xdd来取代它。
      下图中的例子就是含有一个END字符和一个ESC字符的IP报文。在这个例子中,在串行线路上传输的总字节数是原IP报文长度再加4个字节。

      SLIP是一种简单的帧封装方法,还有一些值得一提的缺陷:
    • 每一端必须知道对方的IP地址。没有办法把本端的IP地址通知给另一端。
    • 数据帧中没有类型字段(类似于以太网中的类型字段)。如果一条串行线路用于SLIP,那么它不能同时使用其他协议。
    • SLIP没有在数据帧中加上检验和(类似于以太网中的CRC字段)。

    1.5 压缩的SLIP

    由于串行线路的速率通常较低(19200b/s或更低),而且通信经常是交互式的(如Telnet和Rlogin,二者都使用TCP),因此在SLIP线路上有许多小的TCP分组进行交换。为了传送1个字节的数据需要20个字节的IP首部和20个字节的TCP首部,总数超过40个字节。
    既然承认这些性能上的缺陷,于是人们提出一个被称作CSLIP(即压缩SLIP)的新协议。
    CSLIP一般能把上面的40个字节压缩到3或5个字节。它能在CSLIP的每一端维持多达16个TCP连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。这些被压缩的首部大大地缩短了交互响应时间。

    1.6 PPP:点对点协议

    PPP,点对点协议修改了SLIP协议中的所有缺陷。PPP包括以下三个部分:

    • 在串行链路上封装IP数据报的方法。PPP既支持数据为8位和无奇偶检验的异步模式(如大多数计算机上都普遍存在的串行接口),还支持面向比特的同步链接。
    • 建立、配置及测试数据链路的链路控制协议( LCP:Link Control Protocol)。它允许通信双方进行协商,以确定不同的选项。
    • 针对不同网络层协议的网络控制协议( N C P:Network Control Protocol)体系。当前RFC定义的网络层有IP、OSI网络层、DECnet以及Apple Talk。例如,IP NCP允许双方商定是否对报文首部进行压缩,类似于CSLIP(缩写词NCP也可用在TCP的前面)。
      PPP的帧格式:PPP的标准帧格式如下图所示。

      每一帧都以标志字符0x7e开始和结束。紧接着是一个地址字节,值始终是 0xff,然后是一个值为0x03的控制字节。接下来是协议字段,类似于以太网中类型字段的功能。当它的值为0x0021时,表示信息字段是一个IP数据报;值为0xc021时,表示信息字段是链路控制数据;值为0x8021时,表示信息字段是网络控制数据。CRC字段(或FCS,帧检验序列)是一个循环冗余检验码,以检测数据帧中的错误。
      PPP比SLIP的优点
    • PPP支持在单根串行线路上运行多种协议,不只是IP协议;
    • 每一帧都有循环冗余检验。
    • 通信双方可以进行IP地址的动态协商(使用IP网络控制协议);
    • 与CSLIP类似,对TCP和IP报文首部进行压缩;
    • 链路控制协议可以对多个数据链路选项进行设置。为这些优点付出的代价是在每一帧的首部增加3个字节,当建立链路时要发送几帧协商数据,以及更为复杂的实现。

    2.7回环接口

    回环接口:以允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信.根据惯例,大多数系统把I P地址127.0.0.1分配给这个接口,并命名为localhost
    环回接口处理IP数据报的简单过程:如下图所示:

    图中需要指出的关键点是:

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

    2.8 最大传输单元MTU

    MTU:以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称作MTU,最大传输单元。
    分片:如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于MTU。
    路径MTU:如果两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的MTU。重要的不是两台主机所在网络的MTU的值,重要的是两台通信主机路径中的最小MTU。它被称作路径MTU。

    2.9 串行线路吞吐量计算

    如果线路速率是9600b/s,而一个字节有8bit,加上一个起始比特和一个停止比特,那么线路的速率就是960B/s(字节/秒)。以这个速率传输一个1024字节的分组需要1066ms。如果用SLIP链接运行一个交互式应用程序,同时还运行另一个应用程序如FTP发送或接收1024节的数据,那么一般来说就必须等待一半的时间(533ms)才能把交互式应用程序的分组数据发送出去。
    注:我当时很疑惑为什么必须等待一半的时间。后来查资料得知SLIP数据帧中没有类型字段.一条串行线路使用SLIP就不能同时使用其他协议,有两种情况,一种是此交互应用程序先发送数据,那么它等待的时间是0ms,另一种是ftp发送数据,那么它将占用1066ms的时间,则交互应用程序将要等待1066ms,平均下来即等待533ms。

  • 相关阅读:
    SSM学习笔记之Spring, SpringIoC, 注解, SpringAOP, Spring整合MyBatis
    Java学习笔记之网络编程
    Maven学习笔记之Mac环境下安装和配置Maven
    SSM学习笔记之MyBatis
    SSM学习笔记之SpringMVC
    ODP.NET 开发 出现 ORA12154: TNS:could not resolve the connect identifier specified 错误
    MEF开发资源
    Windows Store 应用程序开发示例资源
    QNAS MariaDB 远程登录配置
    Oracle通过DBLINK访问PG13
  • 原文地址:https://www.cnblogs.com/fcw245838813/p/13653900.html
Copyright © 2020-2023  润新知