TCP/IP详解 卷1:协议 学习笔记 第二章 链路层

链路层主要有三个目的:
1.为IP模块发送和接受IP数据报。
2.为ARP模块发送ARP请求和接受ARP应答。
3.为RARP模块发送RARP请求和接受RARP应答。

TCP/IP支持不同的链路层协议,这取决于网络所用的硬件,如以太网、令牌环网、FDDI(光纤分布式数据接口)、RS-232串行线路等。

以太网指数字设备公司、英特尔公司、Xerox公司在1982年联合公布的一个标准,是当今TCP/IP采用的主要局域网技术。它采用CSMA/CD的媒体接入方法,其含义是带冲突检测的载波监听多路接入,它的速率为10Mb/s,地址为48bit。

几年后,IEEE(电子电气工程师协会)802委员会公布了一个稍有不同的标准集,其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络,这三者的共同特性(即802网络共有的逻辑链路控制(LLC))由802.2标准定义,不幸的是,802.2和802.3定义了一个与以太网不同的帧格式。

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

最常使用的封装格式是RFC 894定义的格式。

在这里插入图片描述
两种帧格式都采用48bit(6字节)的目的地址和源地址(802.3允许16bit地址,但一般是48bit),这就是硬件地址。ARP和RARP协议对32bit的IP地址和48bit的硬件地址进行映射。

源地址和目的地址之后的2字节在两种帧结构中互不相同,一个表示类型(以太网帧格式),一个表示长度(802帧格式,表示从长度之后的后续数据的字节长度,但不包括CRC检验码),但它们的有效值无一相同,由此可以区分出两种帧格式。

以太网帧格式中,类型之后就是数据。

CRC字段用于帧内数据字节差错的循环冗余码检验(被称为FCS或帧检验序列)。

802.3规定数据部分必须至少为38字节,而以太网要求最少有46字节,因此有时需要填充字节。

RFC 893描述了另一种用于以太网的封装格式,称为尾部封装。但现在已遭到反对。

SLIP(Serial Line IP)是一种在串行线路上对IP数据报进行封装的简单形式。SLIP协议定义的帧格式:
1.IP数据报以一个称作END(0xc0)的特殊字符结束。为防止数据报到来前线路噪声也被当作数据报内容,大多数实现在数据报的开头处也传一个END字符,这样如果有线路噪声,那么END字符将结束这份错误报文。这样当前报文会正确传输,而前一个错误报文交给上层后,会因其毫无意义而丢弃。
2.若IP报文中某字符为END,则用两个字节0xdb和0xdc来取代它,0xdb这个特殊字符被称为SLIP的ESC字符,但它的值与ASCII码的ESC字符0x1b不同。
3.若IP报文段的某字符与SLIP的ESC字符相同,则用两个字节0xdb和0xdd取代它。
在这里插入图片描述
SLIP是有缺陷的:
1.每一端必须知道对方的IP地址,没有办法把本端的IP通知给另一端。
2.数据帧中没有类型字段,如果一条串行线路用于SLIP,那么它不能同时使用其他协议。
3.SLIP没有在帧中加上校验和,传输错误(噪声等影响)只能通过上层协议来发现(新型的调制解调器可以检测并纠正错误报文)。上层提供某种形式的CRC很重要。

串行线路通常速率较低,且通信常是交互式的,因此在SLIP线路上有许多小的TCP分组进行交换。为传送1字节的数据需要20字节的IP首部和20字节的TCP首部,总数超过40字节,于是CSLIP诞生,它能把上面的40个字节压缩到3或5个字节,且能在CSLIP每一端维持16个TCP连接。被压缩的首部大大缩短了交互响应的时间。大多SLIP产品都支持CSLIP。

PPP协议包括:
1.在串行链路上封装IP数据报的方法。它既支持数据为8位和无奇偶校验的异步模式(如串行接口),也支持面向比特的同步链接。
2.建立、配置和测试数据链路的链路控制协议(LCP,Link Control Protocol),允许通信双方协商,以确定不同的选项。
3.针对不同网络层协议的网络控制协议(NCP,Network Control Protocol)体系。如IP NCP允许双方商定是否对报文首部进行压缩。


PPP帧协议字段可以区分信息字段是IP数据报还是链路控制数据还是网络控制数据。

PPP帧以0x7e(01111110)开始或结束,因此当该信息出现在信息字段中,需要进行转义。同步链路中,使用名为零比特填充(在帧起始和终止间,遇到5个1就填充1个0)的硬件技术完成。异步链路中,使用0x7d作为转义字符,当转义字符出现在PPP数据帧中时,紧接着的字符的第6个比特要取其补码,具体过程如下:
1.遇到字符0x7e时,需要连续传两个字符:0x7d和0x5e。以实现字符的转义。
2.遇到转义字符0x7d时,需连续传两个字符:0x7d和0x5d。
3.默认,如果一个字符值小于0x20(如一个ASCII控制字符,注:ASCII字符可通过Alt+ASCII码输入),一般要进行转义,如,遇到0x01时,需要连续传送0x7d和0x21两个字符(此时第6个比特取补码后变为1,而前两种情况均把它们变为0)。

链路控制协议可以指定是否需要对这32个字符(字符值小于0x20的值)中的某些值进行转义,默认是将这32个字符都进行转义。

PPP协议也常用于低速的串行线路,因此减少每一帧的字节数可以降低应用程序的交互时延,利用链路控制协议,大多产品可省略标志符和地址字段,并把协议字段减为1字节,此时PPP协议只比SLIP多了3个字节,1字节留给协议字段,2字节用于CRC。使用IP网络控制协议,大多数产品可通过协商使用Van Jaconbson报文首部压缩方法,以减小IP和TCP首部长度。

PPP协议相比SLIP协议的优势:
1.可在单根串行线路上运行多种协议,不只是IP协议。
2.每一帧都有CRC。
3.通信双方可以进行IP地址动态协商(通过网络控制协议)。
4.可对TCP、IP报文首部进行压缩。
5.链路控制协议可设置多个数据链路选项。

大多产品都支持环回接口,以允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类网络号127就是为环回接口预留的,大多系统把127.0.0.1分配给这个接口,并命名为localhost。

4.4BSD定义了变量useloopback,并初始化为1,但如果这个变量为0时,以太网驱动程序把本地分组送到网络而非环回接口,这样可能不能工作,这取决于使用的以太网接口卡和设备驱动程序。

一旦传输层检测到目的端地址是环回地址,可以省略部分传输层、网络层的逻辑操作。但大多产品还是照样完成传输层/网络层所有过程,只是当IP数据报离开网络层时把它返回给自己。

在这里插入图片描述
上图中的关键点有:
1.任何传给该主机IP地址的数据均送到环回接口。2.传给环回地址(127.0.0.1)的任何数据均作为IP输入。
3.传给广播或多播地址的数据报复制一份传给环回接口,然后送到以太网上。(广播和多播传送的定义包括主机本身)

上图中一个隐含的意思是传给环回接口的IP数据报一般不出现在相应的网络上。例如,在一个以太网上,分组一般不传出去然后读回来。某些BSD以太网的设备驱动程序注明,许多以太网接口卡不能读回它们自己发送出去的数据,这种情况下一台主机必须处理发送给自己的数据报,上图是最简单的处理办法。

用传输层和IP层的方法处理环回数据似乎效率不高,但它简化了设计,因为环回接口可以被看作是网络层下面的另一个链路层,网络层把一份数据报传送给环回接口,就像传给其他链路层一样,只不过环回接口把数据报返回到IP的输入队列中。

以太网和802.3对数据帧长度都有一个限制,最大值分别是1500字节和1492字节。链路层的此特性被称为MTU,最大传输单元。

如果IP层有一个数据报要传,且其长度比链路层的MTU要大,那么IP层就需要分片。

在这里插入图片描述
点到点的链路层(如SLIP、PPP)的MTU不是硬件物理特性,而是逻辑限制,目的是为交互使用提供足够快的响应时间。

如果两主机之间的通信要通过多个网络,那么每个网络的链路层可能有不同的MTU,其中最小的MTU被称为路径MTU。路径MTU不一定是一个常数,它取决于当时选择的路由,而选路不一定是对称的,因此两方向上的MTU不一定相同。

为提高交互式应用响应时间,大多SLIP实现提供把交互数据放在大块数据前面的服务,但它不能影响已经进入下游(如串行驱动程序)队列的非交互数据,假设新型调制解调器有很大缓冲区,交互数据进入缓冲时可能前面已有大块非交互数据。

将SLIP的MTU降低到256字节可以降低交互时延。不选择64或128是由于256提供良好的线路利用率(如大文件传输),假设CSLIP报文首部5字节,数据帧总长251字节,数据占比98.1%,利用率高。

上图中点对点链路的MTU是296字节,这是因为TCP和IP首部一共占40字节。MTU是IP向链路层查询的结果,因此该值必须包括通常的TCP、IP首部。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值