解读《TCP/IP详解》(卷1):02章:链路层

2.1引言

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

(1)为IP模块发送和接收IP数据报。

(2)为ARP模块发送ARP请求和接收ARP应答。

(3)为RARP发送RARP请求和接收RARP应答。

        TCP/IP支持多种不同的链路层协议,具体取决于网络所使用的硬件,本文讨论以太网链路层协议,串行接口链路层协议(SLIP和PPP)以及回环(127.0.0.1)驱动程序。

2.2以太网和IEEE 802封装

以太网(Ethernet)指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10M/S的速率运行在多种类型的电缆上。后来IEEE 802委员会公布了一个稍有不同的标准集。

        在TCP/IP世界中,以太网IP数据报的封装格式是在RFC 894中定义的,IEEE 802网路的IP数据报格式封装格式是在RFC 1042中定义的。主机需求RFC要求每台Internet主机都与一个10M/s的以太网电缆相连:

(1)必须能发送和接收 RFC 894(以太网)封装格式的分组。

(2)应该能接收与RFC 894混合的RFC 1042(IEEE 802)封装格式的分组。

(3)也许能够发送采用RFC 1042格式的分组。如果主机能同时发送两种类型的分组数据,那么发送的分组必须是可以设置的,而且默认必须是RFC 894分组。

这里我们可以看出以太网的封装格式还是最普遍被人们接受的。

        两种帧格式都采用48位(6字节)的目的地址和源地址,802.3允许16位地址,但一般也是48位。这就是我们通常所说的硬件地址(MAC地址)。接下来的两个字节在两种帧格式中互不相同。802中,长度字段是指它后续数据的字节长度,不包括CRC(循环冗余)校验码。而以太网中这两个字节是定义了后续数据类型的类型字段。802中的类型字段则由后续的SNAP(子网接入协议)的首部给出。幸运的是,802的有效长度指和以太网的类型值无一相同,这就可以对两种帧格式进行区分。

上图为IEEE 802.2/802.3(RFC 1042)与以太网封装格式图

其中:

LLC:逻辑链路控制 这是802网络共有的

DSAP:目的服务访问点 值0xaa

SSAP:源服务访问点 值0xaa

以太网和802.3都有帧的最小长度要求。802.3规定数据部分至少38字节,而以太网而要求46字节。如不能满足,则在不足的空间插入填充(pad)字节。

------------------------------

        另外,RFC 893 描述了一种尾部封装,这种封装格式已经遭到反对。它的内容是将以太网数据帧的IP首部与TCP首部移到尾部CRC之前。

2.3 SLIP(串行线路IP)

 SLIP

        SLIP(Serial Line Internet Protocol,串行线路网际协议),主要在Unix远程访问服务器中使用,现今仍然用于连接某些ISP。因为SLIP协议是面向低速串行线路的,可以用于专用线路,也可以用于拨号线路,Modem的传输速率在1200bps到19200bps。RFC1055中有详细描述。

帧格式的规则:

(1)IP数据报以一个被称作END(0xc0)的特殊字符结束。同时为防止数据到来前的噪声,通常在开始处也会传一个END,用来标识数据的起始部分。

(2)若IP报文中某个字符为END,那么要连续传输两个字节0xdb,0xdc来代替。(好比,编程语言中要打印特殊含义的字符的时候要加转义字符)

(3)若IP报文中某个字符为ESC,那么要连续传输两个字节0xdb,0xdd来代替。

SLIP的缺陷:

(1)每一端必须知道对方的IP地址,不能把本端的IP地址通知给另一端

(2)数据帧中没有类型字段。如果一条串行线路用于SLIP,那么它不能同时使用其他协议。

(3)SLIP中没有类似于以太网的CRC校验字段,这样纠错能力差。

CSLIP

        传统的串行线路速率较低,为了传输1个字节的数据需要20个字节的IP首部和20个字节的TCP首部。因此,人们提出CSLP(压缩SLIP),他将前面提到的40个字节压缩到3到5个字节,且能够在两端维持多大16个TCP连接,并且知道其中每个连接的首部中的某个字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。被压缩的首部大大缩短了交互响应时间。

2.4 PPP(点对点协议)

        PPP协议修改了SLIP协议中的所有缺陷:

包括三个部分:

(1)在串行链路上封装了IP数据报的方法。PPP既支持数据位8为和无奇偶检验的异步模式,还支持面向比特的同步链接。

(2)建立、配置及测试LCP(数据链路的链路控制协议)。它允许通信双方进行协商,以及确定不同的选项。

(3)针对不同网络层协议的NCP(网路控制协议)体系。当前RFC定义的网络层有IP、OSI网络层、DECnet以及AppleTalk。例如,IP NCP允许双方商定是否对报文首部进行压缩,类似于CSLIP

        PPP数据帧的格式看上去很像ISO的HDLC(高层数据链路控制)。每一帧都以标志0x7e开始和结束,紧接着是一个地址字节,值始终是0xff,然后是一个值为0x03de控制字节。接下来是协议字段(类似于以太网中的类型字段):

其值为0x0021时,表示信息字段是一个IP数据报

其值为0xc021时,表示信息字段是链路控制数据

其值为0x8021时,表示信息字段是网络控制数据

        标志字节值是0x7e,因此如果信息字段中出现此字符时,PPP需要对其转义。同样特殊字符0x7d也需要进行转义。

过程如下:

(1)当遇到0x7e时,需连续传送两个字符:0x7d和0x5e,以实现标志字符的转义。

(2)当遇到0x7d时,需连续传送两个字符:0x7d和0x5d,以实现转义字符的转义。

(3)默认的,如果字符的值小于0x20,一般都要进行转义。由ASCLL表可以看出20(16进制)以内的字符大都是控制字符,所以需要转义。

HEX

字符

解释

HEX

字符

解释

00

NUL

空字符

10

DLE

数据链路转义

01

SHO

标题开始

11

DC1

设备控制1

02

STX

正文开始

12

DC2

设备控制2

03

ETX

正文结束

13

DC3

设备控制3

04

EOT

传输结束

14

DC4

设备控制4

05

ENQ

请求

15

NAK

拒绝接收

06

ACK

收到通知

16

SYN

同步空闲

07

BEL

响铃

17

ETB

传输块结束

08

BS

退格

18

CAN

取消

09

HT

水平制表符

19

EM

介质中断

0A

LF

换行符

1A

SUB

替补

0B

VT

垂直制表符

1B

ESC

溢出

0C

FF

换页符

1C

FS

文件分割符

0D

CR

回车符

1D

GS

分组符

0E

SO

不用切换

1E

RS

记录分割符

0F

DI

启用切换

1F

US

单元分割符

         PPP比SLIP只多了额外3个字节,一个字节留给协议字段,另外两个留个CRC字段。

总体看,PPP比SLIP有如下优点:

(1) PPP 支持在单根串行线路上运行多种协议,不只是I P 协议

(2) 每一帧都有循环冗余检验

(3)  通信双方可以进行 I P地址的动态协商(使用I P 网络控制协议)

(4)与C S L I P类似,对T C P和I P 报文首部进行压缩

(5)  链路控制协议可以对多个数据链路选项进行设置

为这些优点付出的代价是在每一帧的首部增加 3个字节。。虽然如今SLIP用户依然比PPP用户多,但最终SLIP将会被取代。

2.5回环接口(127.0.0.1)

        回环接口,又叫环回接口都是Loopback Interface的翻译,不过我觉得环回有点拗口。关于这个127.0.0.1基本上学过网络编程的人都不会陌生。比如你用java写一个c/s的程序,要用自己的PC又当Server又当Client。就需要这个回环地址。同样java中可以用localhost代替。A类网络号就是为了回环接口预留的,大多数系统喜欢分配127.0.0.1,所以在你不装网卡的时候用ping命令也是可以通的。.当你把ip数据报传给这个接口的时候,就不能再任何网络上出现了。

        也许你会觉得,既然是自己给自己传递数据。那么就不必先一层一层向下传,再一层一层向上传递了。但是多数厂品还是会完成传输层和网络层的传递过程。回环接口可以看作是网络层下面的另一个链路层。与其他链路层一样,只不过他把数据又返回了IP输入队列中。

2.6MTU(最大传递单元)

        链路层对于传输的数据是有长度限制的。不同网络有所不同。

网络

MTU字节

超通道

65535

10Mb/s令牌环(IBM)

17914

4Mb/s令牌环(IEEE 802.5)

4464

FDDI

4352

以太网

1500

IEEE 802.2/802.3

1492

X.25

576

点到点(低时延)

296

        上面的点到点的链路层(SLIP和PPP)的MTU并非是值网络媒体的物理特性,只是一个逻辑限制,为了加快交互相应速度。

        如果两台主机在同一个网络,那么该网络的MTU就不用说了,确定了。但是如果两个主机在两个不同的网络,进行通信的时候中间又经过不同的网络,美每个网络都有不同的MTU,那么该次通信的MTU是多少呢?答案也很理解,就是其中的最小值。称为“路径MTU”。实际上,两台主机之间的路径MTU不是一个常数。这取决于当时所选的路由。比如,从小明到小红家有好多条路可以走,小明并不一定每一次都走同一条路哦。

posted on 2014-01-21 22:10  果冻虾仁  阅读(251)  评论(0编辑  收藏  举报

导航