TCP/IP第二章笔记链路层协议

二、链路层

2.1 引言

链路层由三个目的:

  1. 主要为IP模块发送和接受IP数据包;

  2. 为ARP模块发送请求和接受ARP应答;

  3. 为RARP发送RARP请求和接收RARP应答;

    TCP/IP协议支持不同的链路层协议,取决于网络所用的硬件


2.2 以太网和IEEE802封装

以太网:以太网是3个公司在1982年联合发布的一个标准。它是TCP/IP采用的主要的局域网技术。它采用一种称作CSMA/CD的媒体接入方法。CSMA/CD意为:带冲突检测的载波侦听多路接入

**LLC:**几年后,IEEE(电子电器工程师协会)802委员会发布802标准,其中

  • 802.3针对真个CSMA/CD网络
  • 802.4针对令牌总线网络
  • 802.5针对令牌环网络

三者的共同标准由802.2标准定义,即逻辑链路控制(LLC)。但是802.2和802.3定义了一个与以太网不同的帧格式。

**以太网IP数据报 **的封装是在 RFC 894 中定义的,IEEE 802 网络的IP数据报封装是在 RFC 1042 中定义的。

主机需求RFC要求每台Internet主机都与一个10MB/s的以太网电缆连接并且满足:

  1. 并且能发送和接受RFC 894(以太网)封装格式的分组。
  2. 应该能就接受RFC 894和RFC 1042(IEEE 802)封装格式的分组。
  3. 也许能够发送采用RFC 1042 格式封装的分组。如果主机同时能发送两种类型的分组,那分组必须是可设置的,且默认是RFC 894分组。

在这里插入图片描述

两种帧格式都采用6字节(48bit)的目的地址和源地址(802.3允许使用16bit但是默认是48bit)。地址为硬件地址

后面2字节在各个帧格式中互不同:

  • 在802标准定义的帧格式中中为长度字段,是它后续数据的字节长度,但不包括CRC校验码长度

  • 在以太网中为 类型字段,定义了后续数据的类型。(802的类型字段在后面的SNAP首部给出)

    因为802的有效长度值和以太网的有效类型值无一相同。可以对两种帧格式进行区分。

  • 以太网帧格式中后面是数据。802帧格式中后面是3字节的802.2 LLC和5字节的802.2 SNAP

    • LLC中目的服务访问点DSAP源服务访问点SSAP的值都设为0xaa,Ctrl字段设为3。SANP中3个字节的org code都置为0。SANP后面类型字段和以太网帧格式一样。
  • CRC字段用于帧内后续字节差错的循环冗余码检验(检验和)(它也被称为FCS或帧检验序列)。

帧格式都有最小长度要求。802.3规定数据部分至少39字节。以太网要求最少要有46字节。为保证最小长度需要在不足空间插入填充(pad)字节。


2.3 尾部封装(已弃用只做了解)

目前尾部封装已遭到反对,大致意思是RFC893早期描述的一种把IP和TCP头部移动次序到尾部CRC之前的帧格式。原因是可以当把数据复制到内核时可以把数据帧的数据部分映射到一个硬件页面,节省内存到内存的复制过程。TCP数据报长度正好是12字节的整数倍,正好可以用内核的页表来处理。


2.4 SLIP:串行线路IP

SLIP:全称是Serial Line IP。它是一种在串行线路上对 IP数据报进行封装的简单形式,在RFC 1055中有详细描述。SLIP适用于家庭中每台计算机几乎都有的 RS - 232串行端口和高速调制解调器接入 Internet。

SLIP帧格式定义规则

  1. IP数据报以叫做END的特殊字符(0xc0)结束。为了防止传输前的噪声被当做数据报内容,大多数实现在IP数据报头部也加上了END字符。(对每一段的数据报交给上层后,上层会判断是否为无意义噪声而丢弃)

  2. 如果IP报文中某个字符为END(0xc0)要传两个字节0xdb和0xdc来取代它。0xdb被称为SLIP的ESC字符(不等于ASCII码的ESC(0xlb))

  3. 如果IP数据报中某个字符为(0xdb)ESC字符,要在其上基础上再加上0xdd以两个字节来取代他。

    解释第三步:经过第二步我们会把END(0xc0)换成0xdb 0xdc。目的是防止数据报中出现END符截断了原本的一个完整数据,我们使用此方法把END字符转义了。但是如果原数据报里就存在0xdb和0xdc这两个相邻的字符,那么就会被上层检测为一个’END’字符(0xc0),则上层接受数据就比原始数据少一个字节。为了避免这种情况,我们把原数据报里的ESC(0xdb)后都加上一个0xdd。则上层接受到的数据为包含0xdb 0xdd 0xdc三个相邻字符的数据,不会把原数据里的数据替换。

    疑问:那么若原数据报里就含有0xdb 0xdd 相邻字符,会不会被上层识别为一个0xdb字符?就改变了原数据的长度。这样下去就会无限套娃,解决不了问题。

图2 - 2中的例子就是含有一个 END字符和一个ESC字符的IP报文。在这个例子中,在串行线路上传输的总字节数是原 IP报文长度再加4个字节。(一般是加两个END字节,这种情况下两种特殊情况都有,两个特殊字符被替换成了四个字符。所以共比原报文多加了4个字符)

在这里插入图片描述

SLIP的缺陷:

  1. 每一端必须知道对方的IP地址。没办法把本端的IP地址通知到另一端。
  2. 数据帧没有类型字段。如果一条串行路用于SLIP那么它就不能同时使用其他协议。
  3. SLIP没有在末尾加上校验和。SLIP传输被噪声影响发生传输错误,只能通过上层协议来发现(新型的调制解调器可以检测并纠正错误报文)所以上层的CRC就很重要,如IP和TCP。

2.5 压缩的SLIP

串行线路的速率通常较低,且其上会交互式通信,为了传输一个字节需要至少20字节的IP首部和TCP首部。

于是人们提出了CSLIP(压缩的SLIP)的新协议,在RFC 1144 里详细描述。CSLI能把40个字节压缩到3-5个字节。能在CSLIP的每一端维持多大16个TCP连接。压缩的首部极大地提升了交互响应的时间。


2.6 PPP:点对点协议

PPP点对点协议的提出改进了SLIP的许多缺点。PPP包含三部分:

  1. 串行链路上封装IP数据包,PPP既支持数据为8位和无奇偶校验的异步模式。(如今大多数计算机上都有的串行接口),话支持面向比特的同步链接。
  2. 可建立链路控制协议。允许通过两方进行协商(LCP),以确定不同的选项。
  3. 有针对不同网络层协议的网络控制层协议(NCP)体系。RFC里定义的网络层有IP,OSI网络层…IP NCP允许双方商定是否对报文首部进行压缩,类似于CSLIP.

RFC 1548 描述了报文封装方法和链路控制协议。RFC 1332 描述了针对IP的网络控制协议。

PPP数据帧很像ISO的HDLC(高层数据链路控制)标准

在这里插入图片描述

  1. 每一帧都以0x7e开始和结束,后面是一个值始终为0xff的地址字节,然后是一个值为0x03的控制字节

  2. 中间的是协议字段,类似于以太网的类型字段,决定使用的是什么类型的协议。

    • 值为0x0021表示信息字段是一个IP数据报。

    • 值为0xc021表示信息字段是链路控制数据。

    • 值为0x8021表示信息字段是网络控制数据。

  3. 倒数第二个为CRC字段,一个循环冗余校验码,以检测数据帧传输错误。

跟SLIP里一样,如果数据报的信息字段出现了用来分隔的标志字符0x7e时,需要进行转义。

  • 在同步链路中,转义是通过一种比特填充的硬件技术来完成的。
  • 在异步链路中,特殊字符0x7d作为转义字符。当它出现在PPP数据帧中时紧接着的后面第6个比特要取其补码。
    • 遇到字符0x7e时,须连续传输两个字符:0x7d和0x5e实现标志字符的转义。
    • 当遇到转义字符0x7d时,须连续传输两个字符:0x7d和0x5d两个字符实现转义字符的转义。
  • 默认情况下,如果字符的值小于0x20(共32个字符),都需要进行转义。因为这32个字符出现在双方的串行接口驱动程序或调制解调器中会把这些字符解释成特殊含义。

PPP和SLIP都用于低俗链路控制协议,减少每一帧的字节数可以降低应用交互时延。利用链路控制协议提前交互,大多数产品可以通过协商省略标识符和地址字段,并把协议字段2个字节减少到1个字节。

那么再拿现在的PPP和SLIP对比,发现就比SLIP多了3个字节,一个字节的协议字段,2个字节的CRC字段。

使用IP网络控制协议,大多数产品可以协商使用Van Jacobson压缩报文首部字段(对应CSLIP),减少IP和TCP首部长度。

PPP相对SLIP有以下优点:

  1. PPP支持在单根串行线路上运行多种协议。
  2. PPP每一帧都有循环冗余检验,保证数据传输正确性。
  3. 通讯双方可使用IP网络控制协议进行IP地址的协商,省去地址字段。
  4. 可以对TCP和IP报文首部进行压缩,对应CSLIP。
  5. 链路控制协议可以多个数据链路选项进行设置,代价是首部多3个字节,建立链路时要发送几帧协商数据。

尽管PPP有优点,但是目前使用SLIP用户仍比PPP的多。未来PPP会取代SLIP。


2.7 环回接口

本机测试开发程序运行时打开的localhost就是环回接口

大多数都支持环回接口,即允许运行在统一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类网络号127是为环回接口预留的。大多数程序把127.0.0.1分配给了这个接口,并命名为localhost。传给环回接口的IP数据报不能在任何网络中出现只在主机内存在

当传输层检测到目的端地址为环回地址应省略部分传输层和所有网络层的逻辑操作。但是大多数产品并不省略。只是将发送给网络中的IP数据报直接返回给自己。

在这里插入图片描述

图中关键点有:

  1. 传回给环回地址的任何数据都作为IP输入。
  2. 传给广播地址和多播地址的数据要复制一份给环回接口,然后送给以太网,因为广播包括自己本身。
  3. 任何传给主机IP地址的数据都送到环回地址。

环回地址可以看作网络层下的另一个链路层,网络层把数据传送给环回接口,就像传给其他链路层一样,只不过环回接口把数据返回到IP的输入队列里。


2.8 最大传输单元MTU

以太网和802.3对数据帧长度都有限制,最大值分别1500和1492字节。链路层的长度限制称为MTU。

如果IP层有一个长度比MTU还大的数据报要传,那么IP层就要进行切片,即每一片都小于MTU。

在这里插入图片描述

图中是RFC 1191列出的典型MTU值,注意点到点的链路层(如SLIP和PPP)的MTU并非是网络媒体的物理特性限制的,而是他们的逻辑限制的,目的是为了交互时提供足够快的响应时间。


2.9 路径MTU

不同网络的两台主机进行通信时要通过多个网络,每个网络的链路层就可能有不同的MTU。此时重要的不是两台主机所在网络的MTU,而是两台通信主机路径中最小MTU。它被成为路径MTU。

两台主机之间的路径MTU并不固定,它取决于当时选择的路由,所选的路由也不一定对称(不对称的意思是A -> B的路径可能于B -> A 的路径不同)

RFC 1191描述了路径MTU的发现机制,即在任何时候确定路径MTU的方法。


2.10 串行线路吞吐量计算*

如果线路速率是9600 b/s,而一个字节有8 bit,加上一个起始比特和一个停止比特,那么线路的速率就是960 B/s(字节/秒)。以这个速率传输一个1 0 2 4字节的分组需要1066 ms。如果用SLIP链接运行一个交互式应用程序,同时还运行另一个应用程序如 FTP发送或接收1024字节的数据,那么一般来说就必须等待一半的时间( 533 ms)才能把交互式应用程序的分组数据发送出去。

对于交互应用来说,等待 533 ms是不能接受的。关于人的有关研究表明,交互响应时间超过100~200 ms就被认为是不好的。

把SLIP的MTU缩短到256就意味着链路传输一帧最长需要 266 ms,它的一半是 133 ms(这是一般需要等待的时间)。这样情况会好一些,但仍然不完美。我们选择它的原因(与 64或128相比)是因为大块数据提供良好的线路利用率(如大文件传输)。假设CSLIP的报文首部是5个字节,数据帧总长为 261个字节,256个字节的数据使线路的利用率为 98.1 %,帧头占了1.9 %,这样的利用率是很不错的。如果把MTU降到256以下,那么将降低传输大块数据的最大吞吐量。

我们对平均等待时间的计算(传输最大数据帧所需时间的一半)只适用于SLIP链路(或PPP链路)在交互通信和大块数据传输这两种情况下。当只有交互通信时,如果线路速率是9600 b/s,那么任何方向上的 1字节数据(假设有 5个字节的压缩帧头)往返一次都大约需要12.5 ms。它比前面提到的100~200 ms要小得多。需要注意的是,由于帧头从 40个字节压缩到5个字节,使得1字节数据往返时间从85 ms减到12.5 ms。


2.11 小结

本章讨论了 Internet协议族中的最底层协议,链路层协议。

  • 我们比较了以太网和 IEEE 802.2/802.3的封装格式。
  • 以及SLIP和PPP的封装格式。由于 SLIP和PPP经常用于低速的链路,二者都提供了压缩不常变化的公共字段的方法。这使交互性能得到提高。
  • 大多数的实现都提供环回接口。访问这个接口可以通过特殊的环回地址,一般为127.0.0.1。也可以通过发送IP数据报给主机所拥有的任一 IP地址。当环回数据回到上层的协议栈中时,它已经过传输层和 IP层完整的处理过程。
  • 我们描述了很多链路都具有的一个重要特性, MTU,相关的一个概念是路径 MTU。根据典型的串行线路MTU,对SLIP和CSLIP链路的传输时延进行了计算。

TCP/IP成功的原因之一是它几乎能在任何数据链路技术上运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值